elasticated 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +35 -0
- data/Gemfile +4 -0
- data/README.md +3 -0
- data/Rakefile +6 -0
- data/elasticated.gemspec +29 -0
- data/lib/elasticated.rb +102 -0
- data/lib/elasticated/aggregation.rb +36 -0
- data/lib/elasticated/aggregations/cardinality_aggregation.rb +15 -0
- data/lib/elasticated/aggregations/count_aggregation.rb +15 -0
- data/lib/elasticated/aggregations/count_distinct_aggregation.rb +15 -0
- data/lib/elasticated/aggregations/count_filtered_aggregation.rb +29 -0
- data/lib/elasticated/aggregations/custom_aggregation.rb +25 -0
- data/lib/elasticated/aggregations/date_histogram_aggregation.rb +35 -0
- data/lib/elasticated/aggregations/filter_aggregation.rb +33 -0
- data/lib/elasticated/aggregations/filter_aggregation_evaluator.rb +22 -0
- data/lib/elasticated/aggregations/group_aggregation.rb +29 -0
- data/lib/elasticated/aggregations/histogram_aggregation.rb +34 -0
- data/lib/elasticated/aggregations/nested_aggregation.rb +30 -0
- data/lib/elasticated/aggregations/range_aggregation.rb +35 -0
- data/lib/elasticated/aggregations/range_aggregation_evaluator.rb +22 -0
- data/lib/elasticated/aggregations/ranges_builder.rb +35 -0
- data/lib/elasticated/aggregations/single_value_aggregation.rb +47 -0
- data/lib/elasticated/aggregations/subaggregated.rb +27 -0
- data/lib/elasticated/aggregations/sum_distinct_aggregation.rb +20 -0
- data/lib/elasticated/aggregations/terms_aggregation.rb +63 -0
- data/lib/elasticated/aggregations/top_hits_aggregation.rb +25 -0
- data/lib/elasticated/block_evaluation.rb +15 -0
- data/lib/elasticated/boolean_clause.rb +43 -0
- data/lib/elasticated/client.rb +84 -0
- data/lib/elasticated/clonable.rb +58 -0
- data/lib/elasticated/conditions/custom_condition.rb +19 -0
- data/lib/elasticated/conditions/exists_condition.rb +11 -0
- data/lib/elasticated/conditions/missing_condition.rb +11 -0
- data/lib/elasticated/conditions/nested_condition.rb +19 -0
- data/lib/elasticated/conditions/range_condition.rb +27 -0
- data/lib/elasticated/conditions/script_condition.rb +22 -0
- data/lib/elasticated/conditions/standard_condition.rb +26 -0
- data/lib/elasticated/conditions/terms_condition.rb +22 -0
- data/lib/elasticated/conditions/wildcard_condition.rb +18 -0
- data/lib/elasticated/conditions_builder.rb +75 -0
- data/lib/elasticated/configurable.rb +9 -0
- data/lib/elasticated/configuration.rb +9 -0
- data/lib/elasticated/default_logger.rb +27 -0
- data/lib/elasticated/delimiters/date_field_delimiter.rb +33 -0
- data/lib/elasticated/delimiters/standard_field_delimiter.rb +33 -0
- data/lib/elasticated/delimiters/term_field_delimiter.rb +24 -0
- data/lib/elasticated/document.rb +46 -0
- data/lib/elasticated/helpers.rb +28 -0
- data/lib/elasticated/index_selector.rb +44 -0
- data/lib/elasticated/inspectionable.rb +9 -0
- data/lib/elasticated/mapping.rb +19 -0
- data/lib/elasticated/mapping/builder.rb +36 -0
- data/lib/elasticated/mapping/fields_builder.rb +148 -0
- data/lib/elasticated/mapping/nested_builder.rb +15 -0
- data/lib/elasticated/mapping/object_builder.rb +15 -0
- data/lib/elasticated/mapping/partial.rb +11 -0
- data/lib/elasticated/mapping/type_builder.rb +14 -0
- data/lib/elasticated/partitioned_repository.rb +27 -0
- data/lib/elasticated/query.rb +159 -0
- data/lib/elasticated/query_aggregations.rb +71 -0
- data/lib/elasticated/query_conditions.rb +89 -0
- data/lib/elasticated/repositories/monthly_partitioned_repository.rb +96 -0
- data/lib/elasticated/repository.rb +139 -0
- data/lib/elasticated/results.rb +43 -0
- data/lib/version.rb +92 -0
- data/spec/aggregation_spec.rb +587 -0
- data/spec/date_field_delimiter_spec.rb +67 -0
- data/spec/document_spec.rb +44 -0
- data/spec/elasticsearch_hit_1.json +14 -0
- data/spec/elasticsearch_response_1.json +29 -0
- data/spec/elasticsearch_response_2.json +44 -0
- data/spec/elasticsearch_top_hits_response.json +20 -0
- data/spec/integration_spec.rb +184 -0
- data/spec/mapping_spec.rb +219 -0
- data/spec/monthly_partitioned_repository_spec.rb +99 -0
- data/spec/query_aggregations_spec.rb +44 -0
- data/spec/query_conditions_spec.rb +314 -0
- data/spec/query_spec.rb +265 -0
- data/spec/results_spec.rb +69 -0
- data/spec/spec_helper.rb +2 -0
- data/spec/term_field_delimiter_spec.rb +39 -0
- metadata +225 -0
@@ -0,0 +1,99 @@
|
|
1
|
+
require_relative 'spec_helper'
|
2
|
+
|
3
|
+
module Elasticated
|
4
|
+
describe MonthlyPartitionedRepository do
|
5
|
+
|
6
|
+
let :repository do
|
7
|
+
MonthlyPartitionedRepository.new index_name: 'fbinsights-v3', index_alias: 'fbinsights'
|
8
|
+
end
|
9
|
+
|
10
|
+
before :each do
|
11
|
+
Elasticated.configure do |config|
|
12
|
+
config.logger = double.as_null_object
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should return the correct index name" do
|
17
|
+
date = Date.parse '2015-09-04'
|
18
|
+
name = repository.index_name_for date
|
19
|
+
expect(name).to eq 'fbinsights-v3-2015-09'
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should return the correct index alias" do
|
23
|
+
date = Date.parse '2015-09-04'
|
24
|
+
name = repository.index_alias_for date
|
25
|
+
expect(name).to eq 'fbinsights-2015-09'
|
26
|
+
end
|
27
|
+
|
28
|
+
context "on a search" do
|
29
|
+
|
30
|
+
let :query do
|
31
|
+
Query.new # TODO date
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should execute a search on the correct index" do
|
35
|
+
expect(repository).to receive(:_exec_search).with query, index: 'fbinsights' # TODO
|
36
|
+
repository.execute_search query
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should execute a count on the correct index" do
|
40
|
+
expect(repository).to receive(:_exec_count).with query, index: 'fbinsights' # TODO
|
41
|
+
repository.execute_count query
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should execute a delete on the correct index" do
|
45
|
+
expect(repository).to receive(:_exec_delete).with query, index: 'fbinsights' # TODO
|
46
|
+
repository.delete_by query
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
context "on an indexation" do
|
52
|
+
|
53
|
+
let :document do
|
54
|
+
Document.create source: { 'date' => '2015-09-04' }
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should use the appropiated index alias" do
|
58
|
+
client = repository.client
|
59
|
+
expect(client).to receive(:index_exists?).with('fbinsights-2015-09').and_return true
|
60
|
+
expect(client).to receive(:index_document).with document.source, index: 'fbinsights-2015-09', type: 'post'
|
61
|
+
repository.index_document document, type: 'post'
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should create the appropiated index (only if dynamic creation is enabled)" do
|
65
|
+
client = repository.client
|
66
|
+
expect(client).to receive(:index_exists?).with('fbinsights-2015-09').and_return false
|
67
|
+
expect{ repository.index_document document, type: 'post' }.to raise_error
|
68
|
+
expect(client).to receive(:index_exists?).with('fbinsights-2015-09').and_return false
|
69
|
+
expect(client).to receive(:create_index).with 'fbinsights-v3-2015-09', anything
|
70
|
+
repository.dynamic_creation = true
|
71
|
+
expect(client).to receive(:create_alias).with('fbinsights-v3-2015-09', 'fbinsights-2015-09').once
|
72
|
+
expect(client).to receive(:create_alias).with('fbinsights-v3-2015-09', 'fbinsights').once
|
73
|
+
expect(client).to receive(:index_document).with document.source, index: 'fbinsights-2015-09', type: 'post'
|
74
|
+
repository.index_document document, type: 'post'
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
|
79
|
+
context "the index creation method" do
|
80
|
+
|
81
|
+
let :date do
|
82
|
+
Date.parse '2015-09-04'
|
83
|
+
end
|
84
|
+
|
85
|
+
it "creates the appropiated index" do
|
86
|
+
expect(repository.client).to receive(:create_index).with 'fbinsights-v3-2015-09', anything
|
87
|
+
repository.create_index! date
|
88
|
+
end
|
89
|
+
|
90
|
+
it "creates the appropiated alias" do
|
91
|
+
expect(repository.client).to receive(:create_alias).with('fbinsights-v3-2015-09', 'fbinsights-2015-09').once
|
92
|
+
expect(repository.client).to receive(:create_alias).with('fbinsights-v3-2015-09', 'fbinsights').once
|
93
|
+
repository.create_alias! date
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
99
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require_relative 'spec_helper'
|
2
|
+
|
3
|
+
module Elasticated
|
4
|
+
describe QueryAggregations do
|
5
|
+
|
6
|
+
let(:qa){ QueryAggregations.new }
|
7
|
+
|
8
|
+
describe "the aggragation lookup method" do
|
9
|
+
|
10
|
+
class DummieAggregation
|
11
|
+
def build; { dummie_body: {} }; end
|
12
|
+
def name; :nn; end
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should instantiate the correct class" do
|
16
|
+
qa.dummie
|
17
|
+
expected_result = { nn: { dummie_body: {} } }
|
18
|
+
expect(qa.build).to eq expected_result
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "the build method" do
|
24
|
+
|
25
|
+
it "should build a single aggregated body" do
|
26
|
+
qa.sum :numeric
|
27
|
+
expected_result = { sum_numeric: { sum: { field: :numeric } } }
|
28
|
+
expect(qa.build).to eq expected_result
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should build a multiple aggregated body" do
|
32
|
+
qa.sum :numeric
|
33
|
+
qa.max :numeric
|
34
|
+
expected_result = {
|
35
|
+
sum_numeric: { sum: { field: :numeric } },
|
36
|
+
max_numeric: { max: { field: :numeric } }
|
37
|
+
}
|
38
|
+
expect(qa.build).to eq expected_result
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,314 @@
|
|
1
|
+
require_relative 'spec_helper'
|
2
|
+
|
3
|
+
module Elasticated
|
4
|
+
describe QueryConditions do
|
5
|
+
|
6
|
+
let(:qc){ QueryConditions.new }
|
7
|
+
|
8
|
+
describe 'the build method' do
|
9
|
+
|
10
|
+
it "should build a 'match_all' condition" do
|
11
|
+
expected_result = { match_all: {} }
|
12
|
+
expect(qc.build).to eq expected_result
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should build a 'terms' condition" do
|
16
|
+
qc.equal :field, :value
|
17
|
+
expected_result = { terms: { field: [:value] } }
|
18
|
+
expect(qc.build).to eq expected_result
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should build a 'terms' condition (with params)" do
|
22
|
+
qc.equal :field, :value, execution: :bool, _cache: false
|
23
|
+
expected_result = { terms: { field: [:value], execution: :bool, _cache: false } }
|
24
|
+
expect(qc.build).to eq expected_result
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should build a 'must_not>terms' condition" do
|
28
|
+
qc.not_equal :field, :value
|
29
|
+
expected_result = { bool: { must_not: [ { terms: { field: [:value] } } ] } }
|
30
|
+
expect(qc.build).to eq expected_result
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should build a 'with' condition" do
|
34
|
+
qc.with :field
|
35
|
+
expected_result = { wildcard: { field: '*' } }
|
36
|
+
expect(qc.build).to eq expected_result
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should build a 'without' condition" do
|
40
|
+
qc.without :field
|
41
|
+
expected_result = { bool: { must_not: [ { wildcard: { field: '*' } } ] } }
|
42
|
+
expect(qc.build).to eq expected_result
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should build a 'wildcard' condition" do
|
46
|
+
qc.wildcard :field, 'regex'
|
47
|
+
expected_result = { wildcard: { field: 'regex' } }
|
48
|
+
expect(qc.build).to eq expected_result
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should build an 'exists' condition" do
|
52
|
+
qc.exists :field_name
|
53
|
+
expected_result = { exists: { field: :field_name } }
|
54
|
+
expect(qc.build).to eq expected_result
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should build a 'missing' condition" do
|
58
|
+
qc.missing :field_name
|
59
|
+
expected_result = { missing: { field: :field_name } }
|
60
|
+
expect(qc.build).to eq expected_result
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should build a 'between' condition" do
|
64
|
+
qc.between :field, :min_value, :max_value
|
65
|
+
expected_result = { range: { field: { gte: :min_value, lte: :max_value } } }
|
66
|
+
expect(qc.build).to eq expected_result
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should build a 'greater_than' condition" do
|
70
|
+
qc.greater_than :field, :min_value
|
71
|
+
expected_result = { range: { field: { gt: :min_value } } }
|
72
|
+
expect(qc.build).to eq expected_result
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should build a 'less_than' condition" do
|
76
|
+
qc.less_than :field, :max_value
|
77
|
+
expected_result = { range: { field: { lt: :max_value } } }
|
78
|
+
expect(qc.build).to eq expected_result
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should build a 'greater_equal' condition" do
|
82
|
+
qc.greater_equal :field, :min_value
|
83
|
+
expected_result = { range: { field: { gte: :min_value } } }
|
84
|
+
expect(qc.build).to eq expected_result
|
85
|
+
end
|
86
|
+
|
87
|
+
it "should build a 'less_equal' condition" do
|
88
|
+
qc.less_equal :field, :max_value
|
89
|
+
expected_result = { range: { field: { lte: :max_value } } }
|
90
|
+
expect(qc.build).to eq expected_result
|
91
|
+
end
|
92
|
+
|
93
|
+
it "should build a 'between' condition (with params)" do
|
94
|
+
qc.between :field, :min_value, :max_value, execution: :index, _cache: true
|
95
|
+
expected_result = { range: { execution: :index, _cache: true, field: { gte: :min_value, lte: :max_value } } }
|
96
|
+
expect(qc.build).to eq expected_result
|
97
|
+
end
|
98
|
+
|
99
|
+
it "should build a 'script' condition" do
|
100
|
+
qc.script 'your_script_here'
|
101
|
+
expected_result = { script: { script: 'your_script_here' } }
|
102
|
+
expect(qc.build).to eq expected_result
|
103
|
+
end
|
104
|
+
|
105
|
+
it "should build a 'script' condition (with params)" do
|
106
|
+
qc.script 'your_script_here', first_param: :one
|
107
|
+
expected_result = { script: { script: 'your_script_here', params: { first_param: :one } } }
|
108
|
+
expect(qc.build).to eq expected_result
|
109
|
+
end
|
110
|
+
|
111
|
+
it "should build a custom 'must' condition" do
|
112
|
+
qc.must{ custom term: { field: :value } }
|
113
|
+
expected_result = { term: { field: :value } }
|
114
|
+
expect(qc.build).to eq expected_result
|
115
|
+
end
|
116
|
+
|
117
|
+
it "should build a custom 'must_not' condition" do
|
118
|
+
qc.must_not{ custom term: { field: :value } }
|
119
|
+
expected_result = { bool: { must_not: [ { term: { field: :value } } ] } }
|
120
|
+
expect(qc.build).to eq expected_result
|
121
|
+
end
|
122
|
+
|
123
|
+
it "should build a 'nested' condition" do
|
124
|
+
qc.nested :hash do |n|
|
125
|
+
n.equal :field, :value
|
126
|
+
end
|
127
|
+
expected_result = { nested: { path: :hash, filter: { terms: { field: [:value] } } } }
|
128
|
+
expect(qc.build).to eq expected_result
|
129
|
+
end
|
130
|
+
|
131
|
+
it "should build a 'nested' condition (with params)" do
|
132
|
+
qc.nested :hash, _cache: true do |n|
|
133
|
+
n.equal :field, :value
|
134
|
+
end
|
135
|
+
expected_result = { nested: { path: :hash, _cache: true, filter: { terms: { field: [:value] } } } }
|
136
|
+
expect(qc.build).to eq expected_result
|
137
|
+
end
|
138
|
+
|
139
|
+
# it "should build a 'should_equal' condition" do
|
140
|
+
# qc.should_equal :field, :value
|
141
|
+
# expected_result = { bool: { should: [ { terms: { field: [:value] } } ] } }
|
142
|
+
# expect(qc.build).to eq expected_result
|
143
|
+
# end
|
144
|
+
|
145
|
+
# it "should build a 'should_wildcard' condition" do
|
146
|
+
# qc.should_wildcard :field, 'regex'
|
147
|
+
# expected_result = { bool: { should: [ { wildcard: { field: 'regex' } } ] } }
|
148
|
+
# expect(qc.build).to eq expected_result
|
149
|
+
# end
|
150
|
+
|
151
|
+
# it "should build a 'should_with' condition" do
|
152
|
+
# qc.should_with :field
|
153
|
+
# expected_result = { bool: { should: [ { wildcard: { field: '*' } } ] } }
|
154
|
+
# expect(qc.build).to eq expected_result
|
155
|
+
# end
|
156
|
+
|
157
|
+
it "should build a 'bool>must' condition" do
|
158
|
+
qc.exists :field
|
159
|
+
qc.equal :field, :value
|
160
|
+
expected_result = { bool: { must: [ { exists: { field: :field } }, { terms: { field: [:value] } } ] } }
|
161
|
+
expect(qc.build).to eq expected_result
|
162
|
+
end
|
163
|
+
|
164
|
+
it "should build a 'bool>must' cached condition" do
|
165
|
+
qc.exists :field
|
166
|
+
qc.equal :field, :value
|
167
|
+
qc.cache
|
168
|
+
expected_result = { bool: { must: [ { exists: { field: :field } }, { terms: { field: [:value] } } ], _cache: true } }
|
169
|
+
expect(qc.build).to eq expected_result
|
170
|
+
end
|
171
|
+
|
172
|
+
it "should build a 'bool>must+must_not+should' condition" do
|
173
|
+
qc.equal :field_one, :value_one
|
174
|
+
qc.not_equal :field_two, :value_two
|
175
|
+
qc.should{ equal :field_three, :value_three }
|
176
|
+
qc.minimum_should_match 2
|
177
|
+
expected_result = { bool: {
|
178
|
+
must: [ {terms: { field_one: [:value_one] } } ],
|
179
|
+
must_not: [ { terms: { field_two: [:value_two] } } ],
|
180
|
+
should: [ { terms: { field_three: [:value_three] } } ],
|
181
|
+
minimum_should_match: 2
|
182
|
+
} }
|
183
|
+
expect(qc.build).to eq expected_result
|
184
|
+
end
|
185
|
+
|
186
|
+
it "should build nested bool conditions" do
|
187
|
+
qc.must{ equal :age, 19 }
|
188
|
+
qc.should{ equal :name, 'Pablo' }
|
189
|
+
qc.should{ equal :name, 'Santiago' }
|
190
|
+
expected_result = {
|
191
|
+
bool: {
|
192
|
+
must: [
|
193
|
+
{ terms: { age: [19] } }
|
194
|
+
],
|
195
|
+
should: [
|
196
|
+
{ terms: { name: ['Pablo'] } },
|
197
|
+
{ terms: { name: ['Santiago'] } }
|
198
|
+
]
|
199
|
+
}
|
200
|
+
}
|
201
|
+
expect(qc.build).to eq expected_result
|
202
|
+
end
|
203
|
+
|
204
|
+
it "should build nested bools" do
|
205
|
+
qc.should do
|
206
|
+
equal :first_name, 'Pablo'
|
207
|
+
equal :last_name, 'Fernandez'
|
208
|
+
bool do
|
209
|
+
equal :age, 24
|
210
|
+
equal :country, 'Argentina'
|
211
|
+
end
|
212
|
+
end
|
213
|
+
expected_result = {
|
214
|
+
bool: {
|
215
|
+
should: [
|
216
|
+
{ terms: { first_name: ['Pablo'] } },
|
217
|
+
{ terms: { last_name: ['Fernandez'] } },
|
218
|
+
{
|
219
|
+
bool: {
|
220
|
+
must: [
|
221
|
+
{ terms: { age: [24] } },
|
222
|
+
{ terms: { country: ['Argentina'] } }
|
223
|
+
]
|
224
|
+
}
|
225
|
+
}
|
226
|
+
]
|
227
|
+
}
|
228
|
+
}
|
229
|
+
expect(qc.build).to eq expected_result
|
230
|
+
end
|
231
|
+
|
232
|
+
end
|
233
|
+
|
234
|
+
describe "the clone method" do
|
235
|
+
|
236
|
+
it 'should clone the must and must_not collections' do
|
237
|
+
qc.equal :field_one, :value_one
|
238
|
+
qc.not_equal :field_two, :value_two
|
239
|
+
qc.should{ equal :field_three, :value_three }
|
240
|
+
new_qc = qc.clone
|
241
|
+
qc.equal :field_four, :value_four
|
242
|
+
qc.not_equal :field_five, :value_five
|
243
|
+
qc.should{ equal :field_six, :value_six }
|
244
|
+
expected_result = { bool: {
|
245
|
+
must: [ {terms: { field_one: [:value_one] } } ],
|
246
|
+
must_not: [ { terms: { field_two: [:value_two] } } ],
|
247
|
+
should: [ { terms: { field_three: [:value_three] } } ]
|
248
|
+
} }
|
249
|
+
expect(new_qc.build).to eq expected_result
|
250
|
+
end
|
251
|
+
|
252
|
+
end
|
253
|
+
|
254
|
+
describe "the term delimiter" do
|
255
|
+
|
256
|
+
let :delimiter do
|
257
|
+
Delimiters::TermFieldDelimiter.new field: :account_id, as: :account
|
258
|
+
end
|
259
|
+
|
260
|
+
it "should not delimit anything" do
|
261
|
+
qc.equal :other_field, 68
|
262
|
+
qc.fill_delimiter delimiter
|
263
|
+
params = delimiter.build_strategy_params
|
264
|
+
expect(params).to be_empty
|
265
|
+
end
|
266
|
+
|
267
|
+
it "should delimit a single condition" do
|
268
|
+
qc.equal :account_id, 68
|
269
|
+
qc.fill_delimiter delimiter
|
270
|
+
params = delimiter.build_strategy_params
|
271
|
+
expect(params).to eq account: [68]
|
272
|
+
end
|
273
|
+
|
274
|
+
it "should delimit by multiple conditions (part 1)" do
|
275
|
+
qc.equal :account_id, [68, 31]
|
276
|
+
qc.fill_delimiter delimiter
|
277
|
+
params = delimiter.build_strategy_params
|
278
|
+
expect(params).to eq account: [68, 31]
|
279
|
+
end
|
280
|
+
|
281
|
+
it "should delimit a multiple conditions (part 2)" do
|
282
|
+
qc.equal :account_id, 68
|
283
|
+
qc.equal :account_id, 31
|
284
|
+
qc.fill_delimiter delimiter
|
285
|
+
params = delimiter.build_strategy_params
|
286
|
+
expect(params).to eq account: [68, 31]
|
287
|
+
end
|
288
|
+
|
289
|
+
it "should delimit by nested conditions" do
|
290
|
+
qc.equal :account_id, 68
|
291
|
+
qc.bool do
|
292
|
+
equal :account_id, 31
|
293
|
+
end
|
294
|
+
qc.fill_delimiter delimiter
|
295
|
+
params = delimiter.build_strategy_params
|
296
|
+
expect(params).to eq account: [68, 31]
|
297
|
+
end
|
298
|
+
|
299
|
+
it "should delimit only by the 'must' part of nested conditions" do
|
300
|
+
qc.equal :account_id, 68
|
301
|
+
qc.bool do
|
302
|
+
must{ equal :account_id, 31 }
|
303
|
+
must_not{ equal :account_id, 85 }
|
304
|
+
should{ equal :account_id, 58 }
|
305
|
+
end
|
306
|
+
qc.fill_delimiter delimiter
|
307
|
+
params = delimiter.build_strategy_params
|
308
|
+
expect(params).to eq account: [68, 31]
|
309
|
+
end
|
310
|
+
|
311
|
+
end
|
312
|
+
|
313
|
+
end
|
314
|
+
end
|