msfl_visitors 0.1.0.rc3 → 0.3.0.dev
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 +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'
|