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