msfl_visitors 0.3.0.dev8 → 0.3.0.dev9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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