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.
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'