class SearchEnjoy::Query
Attributes
default_options[R]
query_hash[R]
Public Class Methods
build_query(&block)
click to toggle source
build_query
do
must(:attr1).be_in [] must(:attr2).eq_to value describe :attr3 do must(:key_1).be_in must.not(:key_2).eq_to value end
end
# File lib/search_enjoy/query.rb, line 75 def self.build_query(&block) query = new({}) query.instance_eval(&block) query end
new(hash, **opts)
click to toggle source
# File lib/search_enjoy/query.rb, line 25 def initialize(hash, **opts) @default_options = {} @default_options = opts @parent_query = nil @default_options[:must] ||= false @default_options[:inverse] ||= false @query_hash = to_query_hash(hash) end
Public Instance Methods
add_statements(&block)
click to toggle source
# File lib/search_enjoy/query.rb, line 83 def add_statements(&block) instance_eval(&block) end
be(value)
click to toggle source
# File lib/search_enjoy/query.rb, line 120 def be(value) key = @query_hash.keys.first @query_hash[key][:value] = value merge_to_parent! end
describe(attribute, &block)
click to toggle source
# File lib/search_enjoy/query.rb, line 128 def describe(attribute, &block) query = Query.new({}) query.instance_eval(&block) puts query.inspect @query_hash.merge!({attribute => query.query_hash}) end
inverse!(hash = nil)
click to toggle source
# File lib/search_enjoy/query.rb, line 50 def inverse!(hash = nil) result = {} hash ||= @query_hash hash.each_pair do |key, value| value = inverse(value) if value.instance_of? Hash result[key] = { value: value, must: !hash[:must], inverse: !hash[:inverse] } end @query_hash = result if hash == @query_hash result end
must(attribute = nil)
click to toggle source
# File lib/search_enjoy/query.rb, line 87 def must(attribute = nil) query = if attribute.nil? Query.new({}, must: true) else Query.new({attribute => nil}, must: true) end query.send('parent_query=', self) query end
not(attribute)
click to toggle source
# File lib/search_enjoy/query.rb, line 112 def not(attribute) @default_options[:inverse] = true @query_hash = to_query_hash({attribute => nil}) self end
should(attribute = nil)
click to toggle source
# File lib/search_enjoy/query.rb, line 100 def should(attribute = nil) query = if attribute.nil? Query.new({}, must: false) else Query.new({attribute => nil}, must: false) end query.send('parent_query=', self) query end
to_query_hash(hash, **opts)
click to toggle source
# File lib/search_enjoy/query.rb, line 38 def to_query_hash(hash, **opts) result = {} hash.each_pair do |key, value| value = to_query_hash(value, opts) if value.instance_of? Hash result[key] = { value: value }.merge(@default_options).merge(opts) end result end
Private Instance Methods
merge_to_parent!()
click to toggle source
# File lib/search_enjoy/query.rb, line 144 def merge_to_parent! @parent_query.query_hash.merge!(@query_hash) end
parent_query=(query)
click to toggle source
# File lib/search_enjoy/query.rb, line 140 def parent_query=(query) @parent_query = query end