class Elos::Criteria
Public Class Methods
new(params:, query_builder_class:, klass:)
click to toggle source
# File lib/elos/criteria.rb, line 4 def initialize(params:, query_builder_class:, klass:) @client = Elos.client @params = params @query_builder_class = query_builder_class @klass = klass end
Public Instance Methods
current_page()
click to toggle source
# File lib/elos/criteria.rb, line 37 def current_page @params[:page] end
first!()
click to toggle source
# File lib/elos/criteria.rb, line 59 def first! r = first raise Elos::Errors::NotFound unless r r end
first_page?()
click to toggle source
# File lib/elos/criteria.rb, line 45 def first_page? current_page == 1 end
includes(*names)
click to toggle source
# File lib/elos/criteria.rb, line 27 def includes(*names) @includes = names self end
last_page?()
click to toggle source
# File lib/elos/criteria.rb, line 49 def last_page? current_page == total_pages end
page(page)
click to toggle source
# File lib/elos/criteria.rb, line 11 def page(page) @params[:page] = page self end
per(per = nil)
click to toggle source
# File lib/elos/criteria.rb, line 16 def per(per = nil) if per @params[:per] = per self else @params[:per] end end
Also aliased as: limit
query()
click to toggle source
# File lib/elos/criteria.rb, line 65 def query @query_builder_class.new(@params.merge(class: @klass)).wrap_build end
to_a!()
click to toggle source
# File lib/elos/criteria.rb, line 53 def to_a! r = to_a raise Elos::Errors::NotFound if r.empty? r end
total_count()
click to toggle source
# File lib/elos/criteria.rb, line 32 def total_count result @total_count end
total_pages()
click to toggle source
# File lib/elos/criteria.rb, line 41 def total_pages [0, total_count - 1].max / @params[:per] + 1 end
Protected Instance Methods
result()
click to toggle source
# File lib/elos/criteria.rb, line 71 def result return @result if @result search_result = @client.search(index: @klass.read_alias_name, type: @klass.type_name, body: query) # puts JSON.pretty_generate(results) @total_count = search_result['hits']['total'] @results = search_result['hits']['hits'].map do |h| source = h['_source'] if json = source.delete('json') source.reverse_merge!(JSON.parse(json)) end source.deep_symbolize_keys! @klass.new(source.reverse_merge(score: h['_score'], highlight: h['highlight']).merge(id: h['_id'], _persisted: true)) end end