Class: Elasticated::DateDelimiterFactory

Inherits:
Object
  • Object
show all
Defined in:
lib/elasticated/date_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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/elasticated/date_delimiter_factory.rb', line 4

def create(empty_delimiter, query_delimiters, opts={})
  klass = Delimiters::DateFieldDelimiter
  field = empty_delimiter.field_name
  filter_name = empty_delimiter.filter_name
  field_since = "#{field}_since".to_sym
  field_until = "#{field}_until".to_sym
  filter_since = "#{filter_name}_since".to_sym
  filter_until = "#{filter_name}_until".to_sym
  field_term = field.to_sym
  delimit_by = opts.fetch(:delimit_by, [:conditions])

  case delimit_by
  when []
    _since = nil
    _until = nil
  when [:conditions]
    if has_terms?(query_delimiters, :conditions, field_term)
      _since = since_condition_delimiters(query_delimiters.fetch(:conditions, []), field_term)
      _until = until_condition_delimiters(query_delimiters.fetch(:conditions, []), field_term)
    else
      _since = since_condition_delimiters(query_delimiters.fetch(:conditions, []), field_since)
      _until = until_condition_delimiters(query_delimiters.fetch(:conditions, []), field_until)
    end
  when [:aggregations]
    if has_terms?(query_delimiters, :aggregations, field_term)
      _since = since_aggregation_delimiters(query_delimiters.fetch(:aggregations, []), field_term)
      _until = until_aggregation_delimiters(query_delimiters.fetch(:aggregations, []), field_term)
    else
      _since = since_aggregation_delimiters(query_delimiters.fetch(:aggregations, []), field_since)
      _until = until_aggregation_delimiters(query_delimiters.fetch(:aggregations, []), field_until)
    end
  when [:conditions, :aggregations]
    if has_terms?(query_delimiters, :conditions, field_term)
      _since = since_condition_delimiters(query_delimiters.fetch(:conditions, []), field_term)
      _until = until_condition_delimiters(query_delimiters.fetch(:conditions, []), field_term)
      _since = since_aggregation_delimiters(query_delimiters.fetch(:aggregations, []), field_term) if _since.nil?
      _until = until_aggregation_delimiters(query_delimiters.fetch(:aggregations, []), field_term) if _until.nil?
    else
      condition_since = since_condition_delimiters(query_delimiters.fetch(:conditions, []), field_since)
      condition_until = until_condition_delimiters(query_delimiters.fetch(:conditions, []), field_until)
      aggregation_since = since_aggregation_delimiters(query_delimiters.fetch(:aggregations, []), field_since)
      aggregation_until = until_aggregation_delimiters(query_delimiters.fetch(:aggregations, []), field_until)
      _since = condition_since || aggregation_since
      _until = condition_until || aggregation_until
    end
  end

  filtered_empty_delimiter = {
    filter_since => _since,
    filter_until => _until
  }.select { |_, v| not v.nil? }

  klass.new(filtered_empty_delimiter.merge(field: field, as: filter_name))
end