Sha256: 8fea165fb116e08c926bb3169172ca28dde01ddc427fa7ba840344514a2b1f80
Contents?: true
Size: 1.21 KB
Versions: 6
Compression:
Stored size: 1.21 KB
Contents
class SearchCop::HashParser attr_reader :query_info def initialize(query_info) @query_info = query_info end 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 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 end
Version data entries
6 entries across 6 versions & 1 rubygems