msfl_visitors 0.1.0.rc3 → 0.3.0.dev
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 +9 -17
- data/lib/msfl_visitors/nodes/and.rb +0 -17
- data/lib/msfl_visitors/nodes/base.rb +3 -1
- data/lib/msfl_visitors/nodes/binary.rb +0 -7
- data/lib/msfl_visitors/nodes/dataset.rb +7 -0
- data/lib/msfl_visitors/nodes/equal.rb +17 -0
- data/lib/msfl_visitors/nodes/explicit_filter.rb +7 -0
- data/lib/msfl_visitors/nodes/filter.rb +16 -15
- data/lib/msfl_visitors/nodes/foreign.rb +7 -0
- data/lib/msfl_visitors/nodes/given.rb +7 -0
- data/lib/msfl_visitors/nodes/iterator.rb +7 -1
- data/lib/msfl_visitors/nodes/named_value.rb +16 -0
- data/lib/msfl_visitors/nodes/partial.rb +7 -0
- data/lib/msfl_visitors/nodes/set.rb +23 -0
- data/lib/msfl_visitors/nodes.rb +7 -9
- data/lib/msfl_visitors/parsers/msfl_parser.rb +33 -4
- data/lib/msfl_visitors/visitor.rb +165 -6
- data/lib/msfl_visitors.rb +0 -2
- data/msfl_visitors.gemspec +3 -3
- data/spec/nodes/iterator_spec.rb +21 -3
- data/spec/parsers/msfl_parser_spec.rb +61 -4
- data/spec/spec_helper.rb +5 -1
- data/spec/visitors/chewy_term_filter_spec.rb +460 -53
- metadata +11 -24
- data/lib/msfl_visitors/collectors/chewy/term_filter.rb +0 -19
- data/lib/msfl_visitors/collectors.rb +0 -1
- data/lib/msfl_visitors/nodes/binary_and.rb +0 -7
- data/lib/msfl_visitors/nodes/constant_value.rb +0 -11
- data/lib/msfl_visitors/nodes/grouping/close.rb +0 -9
- data/lib/msfl_visitors/nodes/grouping/grouping.rb +0 -24
- data/lib/msfl_visitors/nodes/grouping/open.rb +0 -9
- data/lib/msfl_visitors/nodes/set/close.rb +0 -9
- data/lib/msfl_visitors/nodes/set/delimiter.rb +0 -9
- data/lib/msfl_visitors/nodes/set/open.rb +0 -9
- data/lib/msfl_visitors/nodes/set/set.rb +0 -43
- data/lib/msfl_visitors/renderers/chewy/term_filter.rb +0 -59
- data/spec/renderers/chewy/term_filter_spec.rb +0 -24
@@ -32,7 +32,7 @@ describe MSFLVisitors::Parsers::MSFLParser do
|
|
32
32
|
|
33
33
|
let(:set_of_nodes) { set_of_values.map { |value| MSFLVisitors::Nodes::Number.new value } }
|
34
34
|
|
35
|
-
let(:set_node) { MSFLVisitors::Nodes::Set
|
35
|
+
let(:set_node) { MSFLVisitors::Nodes::Set.new set_of_nodes }
|
36
36
|
|
37
37
|
describe "parsing implicit equality" do
|
38
38
|
|
@@ -110,7 +110,7 @@ describe MSFLVisitors::Parsers::MSFLParser do
|
|
110
110
|
# { value: { in: [50, 250, 20000] } }
|
111
111
|
#
|
112
112
|
# => Nodes::Containment.new(Nodes::Field.new(:value),
|
113
|
-
# Nodes::Set
|
113
|
+
# Nodes::Set.new([
|
114
114
|
# Nodes::Number.new(50),
|
115
115
|
# Nodes::Number.new(250),
|
116
116
|
# Nodes::Number.new(20000)]))
|
@@ -119,6 +119,63 @@ describe MSFLVisitors::Parsers::MSFLParser do
|
|
119
119
|
end
|
120
120
|
end
|
121
121
|
|
122
|
+
describe "parsing filters that contain explicit filters" do
|
123
|
+
|
124
|
+
let(:explicit_filter_node) { MSFLVisitors::Nodes::ExplicitFilter.new [equal_node] }
|
125
|
+
|
126
|
+
let(:equal_node) { MSFLVisitors::Nodes::Equal.new field_node, value_node }
|
127
|
+
|
128
|
+
describe "parsing a foreign filter" do
|
129
|
+
|
130
|
+
let(:filter) { { foreign: { dataset: "person", filter: { age: 25 } } } }
|
131
|
+
|
132
|
+
let(:foreign_node) { MSFLVisitors::Nodes::Foreign.new dataset_node, explicit_filter_node }
|
133
|
+
|
134
|
+
let(:field_node) { MSFLVisitors::Nodes::Field.new :age }
|
135
|
+
|
136
|
+
let(:value_node) { MSFLVisitors::Nodes::Number.new 25 }
|
137
|
+
|
138
|
+
let(:dataset_node) { MSFLVisitors::Nodes::Dataset.new "person" }
|
139
|
+
|
140
|
+
subject { described_class.new(MSFL::Datasets::Car.new).parse(filter) }
|
141
|
+
|
142
|
+
it "is the expected Foreign node" do
|
143
|
+
expect(subject).to eq expected_node.call(foreign_node)
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
describe "parsing a partial" do
|
148
|
+
|
149
|
+
let(:filter) { { partial: { given: { make: "Toyota" }, filter: { avg_age: 10 } } } }
|
150
|
+
|
151
|
+
|
152
|
+
|
153
|
+
let(:partial_node) { MSFLVisitors::Nodes::Partial.new given_node, explicit_filter_node }
|
154
|
+
|
155
|
+
let(:given_node) { MSFLVisitors::Nodes::Given.new [given_equal_node] }
|
156
|
+
|
157
|
+
let(:given_equal_node) { MSFLVisitors::Nodes::Equal.new given_field_node, given_value_node }
|
158
|
+
|
159
|
+
let(:given_field_node) { MSFLVisitors::Nodes::Field.new :make }
|
160
|
+
|
161
|
+
let(:given_value_node) { MSFLVisitors::Nodes::Word.new "Toyota" }
|
162
|
+
|
163
|
+
|
164
|
+
# explicit_filter_node already defined
|
165
|
+
|
166
|
+
# equal_node already defined
|
167
|
+
|
168
|
+
let(:field_node) { MSFLVisitors::Nodes::Field.new :avg_age }
|
169
|
+
|
170
|
+
let(:value_node) { MSFLVisitors::Nodes::Number.new 10 }
|
171
|
+
|
172
|
+
|
173
|
+
it "is the expected Partial node" do
|
174
|
+
expect(subject).to eq expected_node.call(partial_node)
|
175
|
+
end
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
122
179
|
describe "parsing an and filter" do
|
123
180
|
|
124
181
|
let(:filter) { { and: set_of_values } }
|
@@ -143,13 +200,13 @@ describe MSFLVisitors::Parsers::MSFLParser do
|
|
143
200
|
|
144
201
|
let(:and_node) do
|
145
202
|
MSFLVisitors::Nodes::And.new(
|
146
|
-
MSFLVisitors::Nodes::Set
|
203
|
+
MSFLVisitors::Nodes::Set.new(
|
147
204
|
[
|
148
205
|
MSFLVisitors::Nodes::Filter.new(
|
149
206
|
[
|
150
207
|
MSFLVisitors::Nodes::Containment.new(
|
151
208
|
MSFLVisitors::Nodes::Field.new(:make),
|
152
|
-
MSFLVisitors::Nodes::Set
|
209
|
+
MSFLVisitors::Nodes::Set.new(
|
153
210
|
[
|
154
211
|
MSFLVisitors::Nodes::Word.new("Honda"),
|
155
212
|
MSFLVisitors::Nodes::Word.new("Chevy"),
|
data/spec/spec_helper.rb
CHANGED
@@ -2,4 +2,8 @@ require_relative '../simplecov_custom_profiles'
|
|
2
2
|
SimpleCov.start 'msfl-visitors'
|
3
3
|
require 'rspec/support/spec'
|
4
4
|
require 'byebug'
|
5
|
-
require 'msfl_visitors'
|
5
|
+
require 'msfl_visitors'
|
6
|
+
# require the test datasets from the msfl gem
|
7
|
+
require 'msfl/datasets/car'
|
8
|
+
require 'msfl/datasets/movie'
|
9
|
+
require 'msfl/datasets/person'
|