msfl_visitors 0.3.0.dev5 → 0.3.0.dev6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 179b3ba53392e68b27a017eb798bf8f0035af481
4
- data.tar.gz: 2e2360d9f0103674394969e4a73553d572cc5618
3
+ metadata.gz: bf62249c0dac5ff2ae2537406f87989007141dbd
4
+ data.tar.gz: c98ec078a520735c4b64cefec4e04f6939f981fc
5
5
  SHA512:
6
- metadata.gz: 9dd78a8a9b6cad36b44c93d887f1cb765dc3783756c95231c9b4833c725542e6549ba44a2f4c1d5b6fe2c2e85a18cba2fb9a5baa206cbd64096e09f138a11b95
7
- data.tar.gz: 947ba05154658c97cebac6b5c9fd686d8a0ac2437ba17e402d493a5eca714e910efa4a269d9ce9907ed18cac100d441b067cd4309544172151f7db24ec04d65e
6
+ metadata.gz: 6a2607260acd278637f603c69a7f1c520126da9dd6ad0e777b5670a3ee54c2d9de77109bf55f650be7cf987516fc1cd0bb75af1a0338225da240cb1cd1222a0f
7
+ data.tar.gz: 6cf9d405e4bf47acf71cac765d04590734b9c266bc679c25a62b6f4ca73dbe57101c5379aca338a607cf4e119cf932b6b047037aa1b734ea8ba20668450d04e7
@@ -15,7 +15,7 @@ module MSFLVisitors
15
15
  case node
16
16
  when Nodes::Partial
17
17
  in_aggregation_mode do
18
- clauses << { clause: get_visitor.visit(node), method_to_execute: :aggregations }
18
+ clauses.concat get_visitor.visit(node)
19
19
  ""
20
20
  end
21
21
  else
@@ -120,10 +120,25 @@ module MSFLVisitors
120
120
  def visit(node)
121
121
  case node
122
122
  when Nodes::Partial
123
- { given: Hash[[node.left.accept(visitor), node.right.accept(visitor)]] }
123
+ # { given: Hash[[node.left.accept(visitor), node.right.accept(visitor)]] }
124
+
125
+ # build the aggregate criteria clause first
126
+ # agg_criteria_clause = { clause: { agg_field_name: :portfolio_size, operator: :gt, test_value: 2 }, method_to_execute: :aggregations }
127
+ agg_criteria_clause = { clause: node.right.accept(visitor), method_to_execute: :aggregations }
128
+ # switch to the term filter mode
129
+ visitor.mode = :term
130
+ given_clause = { clause: node.left.accept(visitor) }
131
+
132
+ # switch back to the aggregations mode
133
+ visitor.mode = :aggregations
134
+ # return the result of the visitation
135
+ [agg_criteria_clause, given_clause]
136
+
137
+
124
138
 
125
139
  when Nodes::Equal
126
- { term: { node.left.accept(visitor) => node.right.accept(visitor) } }
140
+ # { term: { node.left.accept(visitor) => node.right.accept(visitor) } }
141
+ { agg_field_name: node.left.accept(visitor), operator: :eq, test_value: node.right.accept(visitor) }
127
142
  # [{ clause: }]
128
143
  when Nodes::Field
129
144
  node.value.to_sym
@@ -138,13 +153,16 @@ module MSFLVisitors
138
153
  Nodes::GreaterThanEqual,
139
154
  Nodes::LessThan,
140
155
  Nodes::LessThanEqual
141
- { range: { node.left.accept(visitor) => { RANGE_OPERATORS[node.class] => node.right.accept(visitor) } } }
156
+ { agg_field_name: node.left.accept(visitor), operator: RANGE_OPERATORS[node.class], test_value: node.right.accept(visitor) }
157
+ # { range: { node.left.accept(visitor) => { RANGE_OPERATORS[node.class] => node.right.accept(visitor) } } }
142
158
  when Nodes::Given
143
159
  [:filter, node.contents.first.accept(visitor)]
144
160
  when Nodes::ExplicitFilter
145
- [:filter, node.contents.map { |n| n.accept(visitor) }.reduce({}) { |hsh, x| hsh.merge!(x); hsh } ]
161
+ # [:filter, node.contents.map { |n| n.accept(visitor) }.reduce({}) { |hsh, x| hsh.merge!(x); hsh } ]
162
+ node.contents.map { |n| n.accept(visitor) }
146
163
  when Nodes::NamedValue
147
- [:aggs, {node.name.accept(visitor).to_sym => Hash[[node.value.accept(visitor)]]}]
164
+ # [:aggs, {node.name.accept(visitor).to_sym => Hash[[node.value.accept(visitor)]]}]
165
+ node.value.accept(visitor)
148
166
  when Nodes::Containment
149
167
  { terms: {node.left.accept(visitor).to_sym => node.right.accept(visitor)} }
150
168
  when Nodes::Set
@@ -159,7 +177,7 @@ module MSFLVisitors
159
177
  { and: node.set.accept(visitor) }
160
178
 
161
179
  when Nodes::Foreign
162
- { has_child: Hash[[[:type, node.left.accept(visitor)], node.right.accept(visitor)]] }
180
+ { foreign: Hash[[[:type, node.left.accept(visitor)], [:filter, *node.right.accept(visitor)]]] }
163
181
 
164
182
  else
165
183
  fail ArgumentError, "AGGREGATIONS cannot visit: #{node.class.name}"
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'msfl_visitors'
3
- s.version = '0.3.0.dev5'
4
- s.date = '2015-05-15'
3
+ s.version = '0.3.0.dev6'
4
+ s.date = '2015-05-20'
5
5
  s.summary = "Convert MSFL to other forms"
6
6
  s.description = "Visitor pattern approach to converting MSFL to other forms."
7
7
  s.authors = ["Courtland Caldwell"]
@@ -39,19 +39,19 @@ describe MSFLVisitors do
39
39
 
40
40
  let(:msfl) { { partial: { given: { make: "Toyota" }, filter: { avg_age: 10 } } } }
41
41
 
42
- it "returns: [{:clause=>{partial: {terms: {make: \"Toyota\"}, aggs: { filter: { range: { avg_age: { gt: 10 }}} }}}}]" do
42
+ it "returns: [{:clause=>[{:agg_field_name=>:avg_age, :operator=>:eq, :test_value=>10}], :method_to_execute=>:aggregations}, {:clause=>\"make == \"Toyota\"\"}]" do
43
+
43
44
  expect(subject).to eq [
44
45
  {
45
- clause: {
46
- given: {
47
- filter: { term: { make: "Toyota"} },
48
- aggs: {
49
- partial: {
50
- filter: {
51
- term: { avg_age: 10 }
52
- }}}}},
46
+ clause: [
47
+ {
48
+ agg_field_name: :avg_age,
49
+ operator: :eq,
50
+ test_value: 10
51
+ }
52
+ ],
53
53
  method_to_execute: :aggregations
54
- }
54
+ }, {clause: "make == \"Toyota\""}
55
55
  ]
56
56
  end
57
57
  end
@@ -72,21 +72,8 @@ describe MSFLVisitors::Visitor do
72
72
  subject { visitor.visit_tree node }
73
73
 
74
74
  let(:expected) do
75
- [{
76
- clause: {
77
- given: {
78
- filter: {
79
- term: { make: "Toyota" }
80
- },
81
- aggs: {
82
- partial: {
83
- filter: { range: { age: { gt: 10 }}}
84
- }
85
- }
86
- }
87
- },
88
- method_to_execute: :aggregations
89
- }]
75
+ [{ clause: [{ agg_field_name: :age, operator: :gt, test_value: 10 }], method_to_execute: :aggregations },
76
+ { clause: "make == \"Toyota\"" }]
90
77
  end
91
78
 
92
79
  it "results in the appropriate aggregation clause" do
@@ -115,9 +102,9 @@ describe MSFLVisitors::Visitor do
115
102
  let(:given_value_node) { MSFLVisitors::Nodes::Word.new "Toyota" }
116
103
 
117
104
 
118
- it "results in: [:filter, { term: { make: \"Toyota\" } }]" do
105
+ it "results in: [:filter, { agg_field_name: :make, operator: :eq, test_value: \"Toyota\" }]" do
119
106
  visitor.mode = :aggregations
120
- expect(subject).to eq([:filter, { term: { make: "Toyota" } }])
107
+ expect(subject).to eq([:filter, { agg_field_name: :make, operator: :eq, test_value: "Toyota" }])
121
108
  end
122
109
  end
123
110
 
@@ -146,8 +133,8 @@ describe MSFLVisitors::Visitor do
146
133
 
147
134
  before { visitor.mode = :aggregations }
148
135
 
149
- it "results in: { has_child: { type: \"person\", filter: { term: { age: 25 } } } }" do
150
- expect(subject).to eq({ has_child: { type: "person", filter: { term: { age: 25 } } } })
136
+ it "results in: { foreign: { type: \"person\", filter: { agg_field_name: :age, operator: :eq, test_value: 25 } } }" do
137
+ expect(subject).to eq({ foreign: { type: "person", filter: { agg_field_name: :age, operator: :eq, test_value: 25 } } })
151
138
  end
152
139
  end
153
140
  end
@@ -225,8 +212,8 @@ describe MSFLVisitors::Visitor do
225
212
 
226
213
  before { visitor.mode = :aggregations }
227
214
 
228
- it "results in: { term: { lhs: \"rhs\" } }" do
229
- expect(result).to eq({ term: { lhs: "rhs" } })
215
+ it "results in: { agg_field_name: :lhs, operator: :eq, test_value: \"rhs\" }" do
216
+ expect(result).to eq({ agg_field_name: :lhs, operator: :eq, test_value: "rhs" })
230
217
  end
231
218
  end
232
219
  end
@@ -248,8 +235,8 @@ describe MSFLVisitors::Visitor do
248
235
 
249
236
  before { visitor.mode = :aggregations }
250
237
 
251
- it "results in: { range: { lhs: { gt: 1000 } } }" do
252
- expect(result).to eq({ range: { lhs: { gt: 1000 } } })
238
+ it "results in: { agg_field_name: :lhs, operator: :gt, test_value: 1000 }" do
239
+ expect(result).to eq({ agg_field_name: :lhs, operator: :gt, test_value: 1000 })
253
240
  end
254
241
  end
255
242
  end
@@ -271,8 +258,8 @@ describe MSFLVisitors::Visitor do
271
258
 
272
259
  before { visitor.mode = :aggregations }
273
260
 
274
- it "results in: { range: { lhs: { gte: 10.52 } } }" do
275
- expect(result).to eq({ range: { lhs: { gte: 10.52 } } })
261
+ it "results in: { agg_field_name: :lhs, operator: :gte, test_value: 10.52 }" do
262
+ expect(result).to eq({ agg_field_name: :lhs, operator: :gte, test_value: 10.52 })
276
263
  end
277
264
  end
278
265
  end
@@ -294,8 +281,8 @@ describe MSFLVisitors::Visitor do
294
281
 
295
282
  before { visitor.mode = :aggregations }
296
283
 
297
- it "returns: { range: { lhs: { lt: 133.7 } } }" do
298
- expect(result).to eq({ range: { lhs: { lt: 133.7 } } })
284
+ it "returns: { agg_field_name: :lhs, operator: :lt, test_value: 133.7 }" do
285
+ expect(result).to eq({ agg_field_name: :lhs, operator: :lt, test_value: 133.7 })
299
286
  end
300
287
  end
301
288
  end
@@ -317,8 +304,8 @@ describe MSFLVisitors::Visitor do
317
304
 
318
305
  before { visitor.mode = :aggregations }
319
306
 
320
- it "returns: { range: { lhs: { lte: \"#{Date.today}\" } } }" do
321
- expect(result).to eq({ range: { lhs: { lte: "#{Date.today}" } } })
307
+ it "returns: { agg_field_name: :lhs, operator: :lte, test_value: \"#{Date.today}\"}" do
308
+ expect(result).to eq({ agg_field_name: :lhs, operator: :lte, test_value: "#{Date.today}"})
322
309
  end
323
310
  end
324
311
  end
@@ -346,8 +333,8 @@ describe MSFLVisitors::Visitor do
346
333
 
347
334
  before { visitor.mode = :aggregations }
348
335
 
349
- it "returns: { range: { value: { gte: 1000 } } }" do
350
- expect(result).to eq({ range: { value: { gte: 1000 } } })
336
+ it "returns: { agg_field_name: :value, operator: :gte, test_value: 1000 }" do
337
+ expect(result).to eq({ agg_field_name: :value, operator: :gte, test_value: 1000 })
351
338
  end
352
339
  end
353
340
 
@@ -376,8 +363,12 @@ describe MSFLVisitors::Visitor do
376
363
 
377
364
  before { visitor.mode = :aggregations }
378
365
 
379
- it "returns: { and: [{ term: { make: \"Chevy\" } },{ range: { value: { gte: 1000 } } }] }" do
380
- expect(result).to eq({ and: [{ term: { make: "Chevy" } },{ range: { value: { gte: 1000 } } }] })
366
+ it "returns: {
367
+ and: [{ agg_field_name: :make, operator: :eq, test_value: \"Chevy\" },
368
+ { agg_field_name: :value, operator: :gte, test_value: 1000 }]}" do
369
+ expect(result).to eq({
370
+ and: [{ agg_field_name: :make, operator: :eq, test_value: "Chevy" },
371
+ { agg_field_name: :value, operator: :gte, test_value: 1000 }]})
381
372
  end
382
373
  end
383
374
  end
@@ -441,8 +432,8 @@ describe MSFLVisitors::Visitor do
441
432
 
442
433
  before { visitor.mode = :aggregations }
443
434
 
444
- it "returns: { and: [{ term: { first_field: \"first_word\" }] }" do
445
- expect(result).to eq({ and: [{ term: { first_field: "first_word" } }] })
435
+ it "returns: { and: [{ agg_field_name: :first_field, operator: :eq, test_value: \"first_word\" }]}" do
436
+ expect(result).to eq({ and: [{ agg_field_name: :first_field, operator: :eq, test_value: "first_word" }]})
446
437
  end
447
438
  end
448
439
  end
@@ -462,8 +453,14 @@ describe MSFLVisitors::Visitor do
462
453
 
463
454
  before { visitor.mode = :aggregations }
464
455
 
465
- it "returns: { and: [{ term: { first_field: \"first_word\" } },{ term: { second_field: \"second_word\" } }] }" do
466
- expect(result).to eq({ and: [{ term: { first_field: "first_word" }}, { term: { second_field: "second_word" } }] })
456
+ it "returns: {
457
+ and: [{ agg_field_name: :first_field, operator: :eq, test_value: \"first_word\" },
458
+ { agg_field_name: :second_field, operator: :eq, test_value: \"second_word\" }
459
+ ]}" do
460
+ expect(result).to eq({
461
+ and: [{ agg_field_name: :first_field, operator: :eq, test_value: "first_word" },
462
+ { agg_field_name: :second_field, operator: :eq, test_value: "second_word" }
463
+ ]})
467
464
  end
468
465
  end
469
466
  end
@@ -483,8 +480,16 @@ describe MSFLVisitors::Visitor do
483
480
 
484
481
  before { visitor.mode = :aggregations }
485
482
 
486
- it "returns: { and: [{ term: { first_field: \"first_word\" } },{ term: { second_field: \"second_word\" } },{ term: { third_field: \"third_word\" } }] }" do
487
- expect(result).to eq({ and: [{ term: { first_field: "first_word" } },{ term: { second_field: "second_word" } },{ term: { third_field: "third_word" } }] })
483
+ it "returns: {
484
+ and: [{ agg_field_name: :first_field, operator: :eq, test_value: \"first_word\" },
485
+ { agg_field_name: :second_field, operator: :eq, test_value: \"second_word\"},
486
+ {agg_field_name: :third_field, operator: :eq, test_value: \"third_word\"}
487
+ ]}" do
488
+ expect(result).to eq({
489
+ and: [{ agg_field_name: :first_field, operator: :eq, test_value: "first_word" },
490
+ { agg_field_name: :second_field, operator: :eq, test_value: "second_word"},
491
+ {agg_field_name: :third_field, operator: :eq, test_value: "third_word"}
492
+ ]})
488
493
  end
489
494
  end
490
495
  end
@@ -533,8 +538,11 @@ describe MSFLVisitors::Visitor do
533
538
 
534
539
  before { visitor.mode = :aggregations }
535
540
 
536
- it "returns: { and: [{ terms: { make: [\"Honda\",\"Chevy\",\"Volvo\"]} }, { range: { value: { gte: 1000 } } }] }" do
537
- expected = { and: [{ terms: { make: ["Honda", "Chevy", "Volvo"]} }, { range: { value: { gte: 1000 } } }] }
541
+ it "returns: { and: [{ terms: { make: [\"Honda\",\"Chevy\",\"Volvo\"]} }, { agg_field_name: :value, operator: :gte, test_value: 1000 } }] }" do
542
+ expected = { and: [
543
+ { terms: { make: ["Honda", "Chevy", "Volvo"] } },
544
+ { agg_field_name: :value, operator: :gte, test_value: 1000}
545
+ ]}
538
546
  expect(result).to eq expected
539
547
  end
540
548
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: msfl_visitors
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0.dev5
4
+ version: 0.3.0.dev6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Courtland Caldwell
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-15 00:00:00.000000000 Z
11
+ date: 2015-05-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: msfl