class SearchCop::HashParser
Attributes
query_info[R]
Public Class Methods
new(query_info)
click to toggle source
# File lib/search_cop/hash_parser.rb, line 4 def initialize(query_info) @query_info = query_info end
Public Instance Methods
parse(hash, query_options = {})
click to toggle source
# File lib/search_cop/hash_parser.rb, line 8 def parse(hash, query_options = {}) default_operator = SearchCop::Helpers.sanitize_default_operator(query_options) res = hash.collect do |key, value| case key when :and value.collect { |val| parse val }.inject(:and) when :or value.collect { |val| parse val }.inject(:or) when :not parse(value).not when :query SearchCop::Parser.parse(value, query_info) else parse_attribute(key, value) end end res.inject(default_operator) end
Private Instance Methods
parse_attribute(key, value)
click to toggle source
# File lib/search_cop/hash_parser.rb, line 31 def parse_attribute(key, value) collection = SearchCopGrammar::Attributes::Collection.new(query_info, key.to_s) if value.is_a?(Hash) raise(SearchCop::ParseError, "Unknown operator #{value.keys.first}") unless collection.valid_operator?(value.keys.first) generator = collection.generator_for(value.keys.first) if generator collection.generator(generator, value.values.first) else collection.send(value.keys.first, value.values.first.to_s) end else collection.send(:matches, value.to_s) end end