class ActsAsExplorable::Parser
Transforms query strings to a Hash that can be used by ActsAsExplorable
.
@example
ActsAsExplorable::Parser.transform('Zlatan in:first_name') => { values: ["Zlatan"], params: { in: ["first_name"] } }
Attributes
params[R]
props[R]
values[R]
Public Class Methods
new(query_string)
click to toggle source
# File lib/acts_as_explorable/parser.rb, line 22 def initialize(query_string) @query_string = query_string split_query_string end
transform(query_string, *keys)
click to toggle source
Returns a transformed query Hash using the given query string @param query_string [String] A query string @param keys [Array] An Array of transformation rules
@return [Hash] Transformed query
# File lib/acts_as_explorable/parser.rb, line 17 def self.transform(query_string, *keys) instance = new(query_string) instance.parse(*keys) end
Public Instance Methods
parse(*keys)
click to toggle source
Parses the query string @param keys [Hash] An Array of transformation rules
@return [Hash] Transformed query
# 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
Private Instance Methods
split_query_string()
click to toggle source
# File lib/acts_as_explorable/parser.rb, line 47 def split_query_string @values = [] @params = {} @props = [] @query_string.split(/\s+/).each do |q| if q =~ /\w+:[\w,-]+/ @props << q else @values << q end end end