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.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/Gemfile.lock +2 -2
  4. data/README.md +9 -17
  5. data/lib/msfl_visitors/nodes/and.rb +0 -17
  6. data/lib/msfl_visitors/nodes/base.rb +3 -1
  7. data/lib/msfl_visitors/nodes/binary.rb +0 -7
  8. data/lib/msfl_visitors/nodes/dataset.rb +7 -0
  9. data/lib/msfl_visitors/nodes/equal.rb +17 -0
  10. data/lib/msfl_visitors/nodes/explicit_filter.rb +7 -0
  11. data/lib/msfl_visitors/nodes/filter.rb +16 -15
  12. data/lib/msfl_visitors/nodes/foreign.rb +7 -0
  13. data/lib/msfl_visitors/nodes/given.rb +7 -0
  14. data/lib/msfl_visitors/nodes/iterator.rb +7 -1
  15. data/lib/msfl_visitors/nodes/named_value.rb +16 -0
  16. data/lib/msfl_visitors/nodes/partial.rb +7 -0
  17. data/lib/msfl_visitors/nodes/set.rb +23 -0
  18. data/lib/msfl_visitors/nodes.rb +7 -9
  19. data/lib/msfl_visitors/parsers/msfl_parser.rb +33 -4
  20. data/lib/msfl_visitors/visitor.rb +165 -6
  21. data/lib/msfl_visitors.rb +0 -2
  22. data/msfl_visitors.gemspec +3 -3
  23. data/spec/nodes/iterator_spec.rb +21 -3
  24. data/spec/parsers/msfl_parser_spec.rb +61 -4
  25. data/spec/spec_helper.rb +5 -1
  26. data/spec/visitors/chewy_term_filter_spec.rb +460 -53
  27. metadata +11 -24
  28. data/lib/msfl_visitors/collectors/chewy/term_filter.rb +0 -19
  29. data/lib/msfl_visitors/collectors.rb +0 -1
  30. data/lib/msfl_visitors/nodes/binary_and.rb +0 -7
  31. data/lib/msfl_visitors/nodes/constant_value.rb +0 -11
  32. data/lib/msfl_visitors/nodes/grouping/close.rb +0 -9
  33. data/lib/msfl_visitors/nodes/grouping/grouping.rb +0 -24
  34. data/lib/msfl_visitors/nodes/grouping/open.rb +0 -9
  35. data/lib/msfl_visitors/nodes/set/close.rb +0 -9
  36. data/lib/msfl_visitors/nodes/set/delimiter.rb +0 -9
  37. data/lib/msfl_visitors/nodes/set/open.rb +0 -9
  38. data/lib/msfl_visitors/nodes/set/set.rb +0 -43
  39. data/lib/msfl_visitors/renderers/chewy/term_filter.rb +0 -59
  40. 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::Set.new set_of_nodes }
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::Set.new([
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::Set.new(
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::Set.new(
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'