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 +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
|