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
|