Class: ActsAsExplorable::Parser

Inherits:
Object
  • Object
show all
Defined in:
lib/acts_as_explorable/parser.rb

Overview

Transforms query strings to a Hash that can be used by ActsAsExplorable.

Examples:

ActsAsExplorable::Parser.transform('Zlatan in:first_name')
=> { values: ["Zlatan"], params: { in: ["first_name"] } }

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(query_string) ⇒ Parser

Returns a new instance of Parser.



22
23
24
25
# File 'lib/acts_as_explorable/parser.rb', line 22

def initialize(query_string)
  @query_string = query_string
  split_query_string
end

Instance Attribute Details

#paramsObject (readonly)

Returns the value of attribute params.



9
10
11
# File 'lib/acts_as_explorable/parser.rb', line 9

def params
  @params
end

#propsObject (readonly)

Returns the value of attribute props.



9
10
11
# File 'lib/acts_as_explorable/parser.rb', line 9

def props
  @props
end

#valuesObject (readonly)

Returns the value of attribute values.



9
10
11
# File 'lib/acts_as_explorable/parser.rb', line 9

def values
  @values
end

Class Method Details

.transform(query_string, *keys) ⇒ Hash

Returns a transformed query Hash using the given query string

Parameters:

  • query_string (String)

    A query string

  • keys (Array)

    An Array of transformation rules

Returns:

  • (Hash)

    Transformed query



17
18
19
20
# File 'lib/acts_as_explorable/parser.rb', line 17

def self.transform(query_string, *keys)
  instance = new(query_string)
  instance.parse(*keys)
end

Instance Method Details

#parse(*keys) ⇒ Hash

Parses the query string

Parameters:

  • keys (Hash)

    An Array of transformation rules

Returns:

  • (Hash)

    Transformed query



32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/acts_as_explorable/parser.rb', line 32

def parse(*keys)
  split_query_string

  @props.each do |p|
    key, params = p.split(':').first.to_sym, p.split(':').last.split(',')
    next if !keys.flatten.include?(key) && !keys.empty?
    @params[key] ||= []
    @params[key] = @params[key] | params.map(&:downcase)
  end

  { values: @values, params: @params }
end