Class: Elasticated::TermDelimiterFactory

Inherits:
Object
  • Object
show all
Defined in:
lib/elasticated/term_delimiter_factory.rb

Instance Method Summary collapse

Instance Method Details

#create(empty_delimiter, query_delimiters, opts = {}) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/elasticated/term_delimiter_factory.rb', line 4

def create(empty_delimiter, query_delimiters, opts={})
  klass = Delimiters::TermFieldDelimiter
  field = empty_delimiter.field_name
  delimit_by = opts.fetch(:delimit_by, [:conditions])

  case delimit_by
  when []
    relevant_delimiters = []
  when [:conditions]
    relevant_delimiters = relevant_field_delimiters(query_delimiters.fetch(:conditions), field)
  when [:aggregations]
    relevant_delimiters = relevant_field_delimiters(query_delimiters.fetch(:aggregations), field)
  else
    condition_delimiters   = query_delimiters.fetch(:conditions)
    aggregation_delimiters = query_delimiters.fetch(:aggregations)
    relevant_delimiters    = [merge_delimiters(condition_delimiters, aggregation_delimiters,field)]
  end

  values = empty_delimiter.values + relevant_delimiters.flat_map(&:values).flatten(1)
  klass.new(values: values, field: field, as: empty_delimiter.filter_name)
end

#merge_delimiters(condition_delimiters, aggregation_delimiters, field) ⇒ Object



34
35
36
37
38
# File 'lib/elasticated/term_delimiter_factory.rb', line 34

def merge_delimiters(condition_delimiters, aggregation_delimiters, field)
  aggregation_delimiters_by_field = extract_aggregation_delimiters(aggregation_delimiters, field)
  condition_delimiters_by_field   = extract_condition_delimiters(condition_delimiters,field)
  aggregation_delimiters_by_field.merge condition_delimiters_by_field
end

#relevant_field_delimiters(all_delimiters, field) ⇒ Object



27
28
29
30
31
32
# File 'lib/elasticated/term_delimiter_factory.rb', line 27

def relevant_field_delimiters(all_delimiters, field)
  all_delimiters.each_with_object(Array.new) do |delimiter, array|
    field_delimiter = delimiter.select { |k,_| k == field }
    array << field_delimiter unless field_delimiter.empty?
  end
end