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