class Chewie::Handler::Reduced

Attributes

built_query[R]
clause[R]
clause_or_query[R]
context[R]
query[R]

Public Class Methods

new(context:, handler: {}, filters: {}) click to toggle source
# File lib/chewie/handler/reduced.rb, line 10
def initialize(context:, handler: {}, filters: {})
  @context = context
  @query = handler[:query]
  @clause = handler[:clause]
  @built_query = build_query(handler, filters)
  @clause_or_query = (@clause || @query)
end

Public Instance Methods

reduce_with(handlers, hash) click to toggle source
# File lib/chewie/handler/reduced.rb, line 18
def reduce_with(handlers, hash)
  has_one = handlers[query].one?

  if has_one && is_top_level_query
    set_in_hash(hash)
  else
    push_to_array(hash)
  end
end

Private Instance Methods

build_query(handler, filters) click to toggle source
# File lib/chewie/handler/reduced.rb, line 44
def build_query(handler, filters)
  query_type = handler[:query_type]

  case query_type
  when :term_level
    ::Chewie::Query::TermLevel.new(handler, filters).build
  when :bool
    ::Chewie::Query::Bool.new(handler, filters).build
  when :full_text
    ::Chewie::Query::FullText.new(handler, filters).build
  else
    raise "Could not build a query for type: #{query_type}"
  end
end
is_top_level_query() click to toggle source
# File lib/chewie/handler/reduced.rb, line 40
def is_top_level_query
  !(context == :bool && clause.present?)
end
push_to_array(hash) click to toggle source
# File lib/chewie/handler/reduced.rb, line 35
def push_to_array(hash)
  hash[clause_or_query] =
    (hash[clause_or_query] || []).push(built_query)
end
set_in_hash(hash) click to toggle source
# File lib/chewie/handler/reduced.rb, line 30
def set_in_hash(hash)
  hash[clause_or_query] =
    (hash[clause_or_query] || {}).merge(built_query)
end