class Elasticfusion::Search::Builder

Public Class Methods

new(settings) click to toggle source
# File lib/elasticfusion/search/builder.rb, line 5
def initialize(settings)
  @scopes        = settings[:scopes]        || {}
  @default_query = settings[:default_query] || { match_all: {} }
  @default_sort  = settings[:default_sort]  || {}

  @queries = []
  @filters = []
  @sorts   = []
end

Public Instance Methods

ensure_deterministic_order_with_unique_field(field) click to toggle source

An explicit setter for sort order tiebreaker. Makes the purpose of the code that uses it more clear, otherwise is identical to sort_by.

# File lib/elasticfusion/search/builder.rb, line 39
def ensure_deterministic_order_with_unique_field(field)
  @sorts << { field => :desc }
end
filter(f) click to toggle source
# File lib/elasticfusion/search/builder.rb, line 21
def filter(f)
  @filters << f
end
filters() click to toggle source
# File lib/elasticfusion/search/builder.rb, line 50
def filters
  @filters
end
queries() click to toggle source

Attribute readers

# File lib/elasticfusion/search/builder.rb, line 45
def queries
  return @queries if @queries.any?
  @default_query
end
query(q) click to toggle source

Attribute writers

# File lib/elasticfusion/search/builder.rb, line 17
def query(q)
  @queries << q
end
scope(scope, *args) click to toggle source
# File lib/elasticfusion/search/builder.rb, line 25
def scope(scope, *args)
  scope = @scopes[scope]
  raise ArgumentError, "Unknown scope #{scope}" if scope.nil?

  @filters << scope.call(*args)
end
sort_by(field, direction) click to toggle source
# File lib/elasticfusion/search/builder.rb, line 32
def sort_by(field, direction)
  raise Search::InvalidSortOrderError if %w(desc asc).exclude? direction.to_s
  @sorts << { field => direction }
end
sorts() click to toggle source
# File lib/elasticfusion/search/builder.rb, line 54
def sorts
  return @sorts if @sorts.any?
  @default_sort
end