Class: Elasticfusion::Search::Builder
- Inherits:
-
Object
- Object
- Elasticfusion::Search::Builder
- Defined in:
- lib/elasticfusion/search/builder.rb
Instance Method Summary collapse
-
#ensure_deterministic_order_with_unique_field(field) ⇒ Object
An explicit setter for sort order tiebreaker.
- #filter(f) ⇒ Object
- #filters ⇒ Object
-
#initialize(settings) ⇒ Builder
constructor
A new instance of Builder.
-
#queries ⇒ Object
Attribute readers.
-
#query(q) ⇒ Object
Attribute writers.
- #scope(scope, *args) ⇒ Object
- #sort_by(field, direction) ⇒ Object
- #sorts ⇒ Object
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 |
#filters ⇒ Object
50 51 52 |
# File 'lib/elasticfusion/search/builder.rb', line 50 def filters @filters end |
#queries ⇒ Object
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
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 |
#sorts ⇒ Object
54 55 56 57 |
# File 'lib/elasticfusion/search/builder.rb', line 54 def sorts return @sorts if @sorts.any? @default_sort end |