msfl_visitors 0.3.0.dev8 → 0.3.0.dev9

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: 2451ca5f2e764e7b6d1f2afddbba1309663713ff
4
- data.tar.gz: 20f9c5f6bbbad4739051d8fcd9eac7347eac6cdc
3
+ metadata.gz: 25bf9ac107d3a11cf34fc2f6b968d08e5947070b
4
+ data.tar.gz: 4d055af609779f8f3d835032ef5c0115183d0129
5
5
  SHA512:
6
- metadata.gz: 48617b447fa24532e232eb9ddfeb9ca362d63d4828f4b4f1b78542c9f6369ec81e57d6bed14d97b86a27f4e4e72d9a94940c0d4b69776ce5f4e344f28911480b
7
- data.tar.gz: 1a34854010135959f64e505b5a099a8a2c76f0c821fe660cb5df233875463fa6a56459ed534028fa68bafb1d78080b05c89a0692055d55d16b248d18c8f7b9e1
6
+ metadata.gz: 87dd45f5d5f705e93d0fa8bde238ff5d33e9981f557bf808ff4486ce9f91cc1b6cf6c15ed2337f53ee1f611cf69a47539fd216be4df49733a738b4d13f8cc24b
7
+ data.tar.gz: b78adea265db2e39583223f802415468df7c48e909de379cea531b2ee0acf345097b8524081a3dc013bc1e29c08114e66f2475d6b0322d358417e23f267f3c6a
data/Gemfile CHANGED
@@ -3,4 +3,4 @@ gem 'simplecov', :require => false, :group => :test # MIT https://gith
3
3
  gem 'yard' # MIT https://github.com/lsegal/yard/blob/master/LICENSE + Ruby license for one file from the Ruby source lib/parser/ruby/legacy/ruby_lex.rb
4
4
  gem 'rspec' # MIT https://github.com/rspec/rspec/blob/master/License.txt
5
5
  gem 'byebug'
6
- gem 'msfl', "~> 1.2"
6
+ gem 'msfl', "~> 1.2", ">=1.2.1"
data/Gemfile.lock CHANGED
@@ -7,7 +7,7 @@ GEM
7
7
  diff-lcs (1.2.5)
8
8
  docile (1.1.5)
9
9
  json (1.8.2)
10
- msfl (1.2.0)
10
+ msfl (1.2.1)
11
11
  json (~> 1.7)
12
12
  rspec (3.2.0)
13
13
  rspec-core (~> 3.2.0)
@@ -34,7 +34,7 @@ PLATFORMS
34
34
 
35
35
  DEPENDENCIES
36
36
  byebug
37
- msfl (~> 1.2)
37
+ msfl (~> 1.2, >= 1.2.1)
38
38
  rspec
39
39
  simplecov
40
40
  yard
data/README.md CHANGED
@@ -37,7 +37,44 @@ dataset = MSFL::Datasets::Car.new
37
37
 
38
38
  MSFLVisitors.get_chewy_clauses dataset, filter
39
39
 
40
- => [{:clause=>{partial: {terms: {make: 'Toyota'}, aggregations: { filter: { range: { avg_age: { gt: 10 }}} }}}}]
40
+ => [{:clause=>{:agg_field_name=>:avg_age, :operator=>:eq, :test_value=>10}, :method_to_execute=>:aggregations}, {:clause=>"make == \"Toyota\""}]
41
+
42
+ ```
43
+
44
+ ## An example of a Foreign
45
+
46
+ ```ruby
47
+ require 'msfl'
48
+ # Load one of the test datasets
49
+ require 'msfl/datasets/car'
50
+ require 'msfl_visitors'
51
+
52
+ filter = { foreign: { dataset: 'person', filter: { gender: 'female' } } }
53
+
54
+ dataset = MSFL::Datasets::Car.new
55
+
56
+ MSFLVisitors.get_chewy_clauses dataset, filter
57
+
58
+ => [{:clause=>"has_child( :person ).filter { gender == \"female\" }"}]
59
+
60
+ ```
61
+
62
+ ## An example in which a Foreign is nested in the Given of a Partial
63
+ ```ruby
64
+ require 'msfl'
65
+ # Load one of the test datasets
66
+ require 'msfl/datasets/car'
67
+ require 'msfl_visitors'
68
+ # Given the set of cars where the person that is the owner is male, filter the set to only include those cars that
69
+ # were manufactured in 2010
70
+ filter = { partial: { given: { foreign: { dataset: 'person', filter: { gender: 'male' } } }, filter: { year: '2010' } } }
71
+
72
+ dataset = MSFL::Datasets::Car.new
73
+
74
+ MSFLVisitors.get_chewy_clauses dataset, filter
75
+
76
+ => [{:clause=>{:agg_field_name=>:year, :operator=>:eq, :test_value=>"2010"}, :method_to_execute=>:aggregations},
77
+ {:clause=>"has_child( :person ).filter { gender == \"male\" }"}]
41
78
 
42
79
  ```
43
80
 
@@ -90,7 +90,7 @@ module MSFLVisitors
90
90
  # Explicit Filter
91
91
  # ex { foreign: { dataset: "person", filter: { age: 25 } } }
92
92
  # ex { partial: { given: { make: "Toyota" }, filter: { avg_age: 10 } } }
93
- args = value.map { |k,v| hash_dispatch(k,v) }
93
+ args = value.map { |k,v| hash_dispatch(k,v) } # !!! THE CURRENT PROBLEM IS HERE!! need to test / update for a foreign in a partial's given
94
94
  else
95
95
  # fall back to a Filter Node
96
96
  args = [lhs, parse(value)] if lhs
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'msfl_visitors'
3
- s.version = '0.3.0.dev8'
3
+ s.version = '0.3.0.dev9'
4
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."
@@ -10,7 +10,7 @@ Gem::Specification.new do |s|
10
10
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
11
11
  s.homepage =
12
12
  'https://github.com/Referly/msfl_visitors'
13
- s.add_runtime_dependency "msfl", "~> 1.2"
13
+ s.add_runtime_dependency "msfl", "~> 1.2", ">=1.2.1"
14
14
  s.add_development_dependency "rake", "~> 10.3"
15
15
  s.add_development_dependency "simplecov", "~> 0.10"
16
16
  s.add_development_dependency "yard", "~> 0.8"
@@ -62,6 +62,41 @@ describe MSFLVisitors do
62
62
  ]
63
63
  end
64
64
  end
65
+
66
+ context "when the filter is { foreign: { dataset: 'person', filter: { gender: 'female' } } }" do
67
+
68
+ let(:msfl) { { foreign: { dataset: 'person', filter: { gender: 'female' } } } }
69
+
70
+ it "returns: [{:clause=>\"has_child( :person ).filter { gender == \"female\" }\"}]" do
71
+ expect(subject).to eq [{ clause: "has_child( :person ).filter { gender == \"female\" }" }]
72
+ end
73
+ end
74
+
75
+ context "when the filter is { partial: { given: { foreign: { dataset: 'person', filter: { gender: 'male' } } }, filter: { year: '2010' } } }" do
76
+
77
+ let(:msfl) { { partial: { given: { foreign: { dataset: 'person', filter: { gender: 'male' } } }, filter: { year: '2010' } } } }
78
+
79
+ it "returns [
80
+ {
81
+ clause: {
82
+ agg_field_name: :year,
83
+ operator: :eq,
84
+ test_value: \"2010\"
85
+ },
86
+ method_to_execute: :aggregations
87
+ }, {clause: \"has_child( :person ).filter { gender == \"male\" }\"}]" do
88
+
89
+ expect(subject).to eq [
90
+ {
91
+ clause: {
92
+ agg_field_name: :year,
93
+ operator: :eq,
94
+ test_value: "2010"
95
+ },
96
+ method_to_execute: :aggregations
97
+ }, {clause: "has_child( :person ).filter { gender == \"male\" }"}]
98
+ end
99
+ end
65
100
  end
66
101
  end
67
102
  end
@@ -146,8 +146,9 @@ describe MSFLVisitors::Parsers::MSFLParser do
146
146
 
147
147
  describe "parsing a partial" do
148
148
 
149
- let(:filter) { { partial: { given: { make: "Toyota" }, filter: { avg_age: 10 } } } }
149
+ let(:filter) { { partial: { given: given_filter, filter: { avg_age: 10 } } } }
150
150
 
151
+ let(:given_filter) { { make: "Toyota" } }
151
152
 
152
153
 
153
154
  let(:partial_node) { MSFLVisitors::Nodes::Partial.new given_node, named_value }
@@ -174,6 +175,29 @@ describe MSFLVisitors::Parsers::MSFLParser do
174
175
  it "is the expected Partial node" do
175
176
  expect(subject).to eq expected_node.call(partial_node)
176
177
  end
178
+
179
+ context "when the partial's given clause is a foreign" do
180
+
181
+ let(:given_filter) { { foreign: { dataset: "person", filter: { gender: 'male' } } } }
182
+
183
+ let(:given_node) { MSFLVisitors::Nodes::Given.new [foreign_node] }
184
+
185
+ let(:foreign_node) { MSFLVisitors::Nodes::Foreign.new dataset_node, given_explicit_filter_node }
186
+
187
+ let(:dataset_node) { MSFLVisitors::Nodes::Dataset.new "person" }
188
+
189
+ let(:given_explicit_filter_node) { MSFLVisitors::Nodes::ExplicitFilter.new [given_exp_fil_equal_node] }
190
+
191
+ let(:given_exp_fil_equal_node) { MSFLVisitors::Nodes::Equal.new given_exp_fil_field_node, given_exp_fil_value_node }
192
+
193
+ let(:given_exp_fil_field_node) { MSFLVisitors::Nodes::Field.new :gender }
194
+
195
+ let(:given_exp_fil_value_node) { MSFLVisitors::Nodes::Word.new 'male' }
196
+
197
+ it "is the expected Partial node with a Foreign node under the Given node" do
198
+ expect(subject).to eq expected_node.call(partial_node)
199
+ end
200
+ end
177
201
  end
178
202
  end
179
203
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: msfl_visitors
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0.dev8
4
+ version: 0.3.0.dev9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Courtland Caldwell
@@ -17,6 +17,9 @@ dependencies:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.2'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.2.1
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -24,6 +27,9 @@ dependencies:
24
27
  - - "~>"
25
28
  - !ruby/object:Gem::Version
26
29
  version: '1.2'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.2.1
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: rake
29
35
  requirement: !ruby/object:Gem::Requirement