Class: Elasticfusion::Search::Builder

Inherits:
Object
  • Object
show all
Defined in:
lib/elasticfusion/search/builder.rb

Instance Method Summary collapse

Constructor Details

#initialize(settings) ⇒ Builder

Returns a new instance of Builder.



5
6
7
8
9
10
11
12
13
# 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

Instance Method Details

#ensure_deterministic_order_with_unique_field(field) ⇒ Object

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



39
40
41
# File 'lib/elasticfusion/search/builder.rb', line 39

def ensure_deterministic_order_with_unique_field(field)
  @sorts << { field => :desc }
end

#filter(f) ⇒ Object



21
22
23
# File 'lib/elasticfusion/search/builder.rb', line 21

def filter(f)
  @filters << f
end

#filtersObject



50
51
52
# File 'lib/elasticfusion/search/builder.rb', line 50

def filters
  @filters
end

#queriesObject

Attribute readers



45
46
47
48
# File 'lib/elasticfusion/search/builder.rb', line 45

def queries
  return @queries if @queries.any?
  @default_query
end

#query(q) ⇒ Object

Attribute writers



17
18
19
# File 'lib/elasticfusion/search/builder.rb', line 17

def query(q)
  @queries << q
end

#scope(scope, *args) ⇒ Object

Raises:

  • (ArgumentError)


25
26
27
28
29
30
# 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) ⇒ Object



32
33
34
35
# 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

#sortsObject



54
55
56
57
# File 'lib/elasticfusion/search/builder.rb', line 54

def sorts
  return @sorts if @sorts.any?
  @default_sort
end