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 +4 -4
- data/Gemfile +1 -1
- data/Gemfile.lock +2 -2
- data/README.md +38 -1
- data/lib/msfl_visitors/parsers/msfl_parser.rb +1 -1
- data/msfl_visitors.gemspec +2 -2
- data/spec/msfl_visitors_spec.rb +35 -0
- data/spec/parsers/msfl_parser_spec.rb +25 -1
- metadata +7 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 25bf9ac107d3a11cf34fc2f6b968d08e5947070b
|
4
|
+
data.tar.gz: 4d055af609779f8f3d835032ef5c0115183d0129
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
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=>{
|
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
|
data/msfl_visitors.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'msfl_visitors'
|
3
|
-
s.version = '0.3.0.
|
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"
|
data/spec/msfl_visitors_spec.rb
CHANGED
@@ -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:
|
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.
|
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
|