msfl_visitors 0.1.0.rc1 → 0.1.0.rc2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2156e94f555e526308eabb17c416c12883081b18
4
- data.tar.gz: 210369d1ba7954ad0132d189e8c0976845ca294a
3
+ metadata.gz: c0e61b7239950114bedf1b804c6447f5aa2527ae
4
+ data.tar.gz: 5faa08969fb85e6ea551cdc358cfa48f43e3a260
5
5
  SHA512:
6
- metadata.gz: 88dbf7a0b57600f139098d0a334f25d3b3404b9ebf8299d6fb97cda1e6c15db510f34fb62c0f4b2f098bb349dd1071b7ecef6e9b1ab9c2d71ffe71e3e729740f
7
- data.tar.gz: 11c609cbf7a04bd5a4fd2248e49b956384af7d758399d2ad1a3c9601fd192b9ef8062715625ff2064c1149be82a9de40fefbd1279ee031bc86aa396630f74279
6
+ metadata.gz: 982a97170e02f732d4b3fa12d0e362e54256ba6c729efa149e71f166b55df0750f41b631756b905b991892d8c156e10db29346d1aaba4de5f97e4df79f5bcd13
7
+ data.tar.gz: 6d1683a3a037a3ed7c4fe3107248e5877ffdc8be2e8426821d83b74fa004d1b304b5aa43ba7f8ed9dd69b8261d21c031ae0941b9f9724362f0f0f395ea0ee050
@@ -0,0 +1,12 @@
1
+ module MSFLVisitors
2
+ module Collectors
3
+ module Chewy
4
+ class TermFilter < String
5
+
6
+ def <<(obj)
7
+ super(obj.to_s)
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1 @@
1
+ require_relative 'collectors/chewy/term_filter'
@@ -5,14 +5,14 @@ module MSFLVisitors
5
5
 
6
6
  def accept(visitor)
7
7
  nodes = Array.new
8
- if items.count > 1
9
- items.each do |item|
8
+ if set.count > 1
9
+ set.each do |item|
10
10
  nodes << MSFLVisitors::Nodes::Grouping::Grouping.new(item)
11
11
  nodes << BinaryAnd.new
12
12
  end
13
13
  nodes.pop
14
- elsif items.count == 1
15
- nodes << items.first
14
+ elsif set.count == 1
15
+ nodes << set.first
16
16
  end
17
17
 
18
18
  nodes.each do |node|
@@ -3,15 +3,16 @@ module MSFLVisitors
3
3
  module Nodes
4
4
  class Iterator < Base
5
5
 
6
- attr_accessor :items
6
+ attr_accessor :set
7
7
 
8
- def initialize(nodes)
9
- self.items = nodes
8
+ # @param set [MSFLVisitors::Nodes::Set::Set] a set node that allows its elements to be iterated over
9
+ def initialize(set)
10
+ self.set = set
10
11
  end
11
12
 
12
13
  def ==(other)
13
14
  self.class == other.class &&
14
- items == other.items
15
+ set == other.set
15
16
  end
16
17
  end
17
18
  end
@@ -4,8 +4,12 @@ module MSFLVisitors
4
4
  module Set
5
5
  class Set < Base
6
6
 
7
+ extend Forwardable
8
+
7
9
  attr_accessor :contents
8
10
 
11
+ def_delegators :contents, :count, :first, :each
12
+
9
13
  def accept(visitor)
10
14
  nodes = Array.new
11
15
  nodes << Open.new
data/lib/msfl_visitors.rb CHANGED
@@ -3,6 +3,7 @@ require_relative 'msfl_visitors/nodes'
3
3
  require_relative 'msfl_visitors/visitor'
4
4
  require_relative 'msfl_visitors/renderers/chewy/term_filter'
5
5
  require_relative 'msfl_visitors/parsers/msfl_parser'
6
+ require_relative 'msfl_visitors/collectors'
6
7
 
7
8
  module MSFLVisitors
8
9
  end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'msfl_visitors'
3
- s.version = '0.1.0.rc1'
3
+ s.version = '0.1.0.rc2'
4
4
  s.date = '2015-05-08'
5
5
  s.summary = "Convert MSFL to other forms"
6
6
  s.description = "Visitor pattern approach to converting MSFL to other forms."
@@ -128,6 +128,55 @@ describe MSFLVisitors::Parsers::MSFLParser do
128
128
  it "is the expected And node" do
129
129
  expect(subject).to eq expected_node.call(and_node)
130
130
  end
131
+
132
+ context "when it contains a containment filter" do
133
+
134
+ let(:makes) { MSFL::Types::Set.new(["Honda", "Chevy", "Volvo"]) }
135
+
136
+ let(:containment_filter) { { make: { in: makes } } }
137
+
138
+ let(:gte_filter) { { value: { gte: one_thousand } } }
139
+
140
+ let(:and_set) { MSFL::Types::Set.new([containment_filter, gte_filter]) }
141
+
142
+ let(:filter) { { and: and_set } }
143
+
144
+ let(:and_node) do
145
+ MSFLVisitors::Nodes::And.new(
146
+ MSFLVisitors::Nodes::Set::Set.new(
147
+ [
148
+ MSFLVisitors::Nodes::Filter.new(
149
+ [
150
+ MSFLVisitors::Nodes::Containment.new(
151
+ MSFLVisitors::Nodes::Field.new(:make),
152
+ MSFLVisitors::Nodes::Set::Set.new(
153
+ [
154
+ MSFLVisitors::Nodes::Word.new("Honda"),
155
+ MSFLVisitors::Nodes::Word.new("Chevy"),
156
+ MSFLVisitors::Nodes::Word.new("Volvo")
157
+ ]
158
+ )
159
+ )
160
+ ]
161
+ ),
162
+ MSFLVisitors::Nodes::Filter.new(
163
+ [
164
+ MSFLVisitors::Nodes::GreaterThanEqual.new(
165
+ MSFLVisitors::Nodes::Field.new(:value),
166
+ MSFLVisitors::Nodes::Number.new(one_thousand)
167
+ )
168
+ ]
169
+ )
170
+ ]
171
+ )
172
+ )
173
+ end
174
+
175
+ it "is the expected And node" do
176
+ expect(subject).to eq expected_node.call(and_node)
177
+ end
178
+
179
+ end
131
180
  end
132
181
 
133
182
  context "when the filter contains an unsupported type" do
@@ -4,7 +4,7 @@ describe MSFLVisitors::Visitor do
4
4
 
5
5
  let(:node) { fail ArgumentError, "You must define the node variable in each scope." }
6
6
 
7
- let(:collector) { String.new }
7
+ let(:collector) { MSFLVisitors::Collectors::Chewy::TermFilter.new }
8
8
 
9
9
  let(:renderer) { MSFLVisitors::Renderers::Chewy::TermFilter.new }
10
10
 
@@ -153,6 +153,44 @@ describe MSFLVisitors::Visitor do
153
153
  expect(result).to eq '( first_field == "first_word" ) & ( second_field == "second_word" ) & ( third_field == "third_word" )'
154
154
  end
155
155
  end
156
+
157
+ context "when one of the node's items is a containment node" do
158
+
159
+ let(:node) do
160
+ MSFLVisitors::Nodes::And.new(
161
+ MSFLVisitors::Nodes::Set::Set.new(
162
+ [
163
+ MSFLVisitors::Nodes::Filter.new(
164
+ [
165
+ MSFLVisitors::Nodes::Containment.new(
166
+ MSFLVisitors::Nodes::Field.new(:make),
167
+ MSFLVisitors::Nodes::Set::Set.new(
168
+ [
169
+ MSFLVisitors::Nodes::Word.new("Honda"),
170
+ MSFLVisitors::Nodes::Word.new("Chevy"),
171
+ MSFLVisitors::Nodes::Word.new("Volvo")
172
+ ]
173
+ )
174
+ )
175
+ ]
176
+ ),
177
+ MSFLVisitors::Nodes::Filter.new(
178
+ [
179
+ MSFLVisitors::Nodes::GreaterThanEqual.new(
180
+ MSFLVisitors::Nodes::Field.new(:value),
181
+ MSFLVisitors::Nodes::Number.new(1000)
182
+ )
183
+ ]
184
+ )
185
+ ]
186
+ )
187
+ )
188
+ end
189
+
190
+ it "returns: '( make == [ \"Honda\", \"Chevy\", \"Volvo\" ] ) & ( value >= 1000 )'" do
191
+ expect(result).to eq '( make == [ "Honda", "Chevy", "Volvo" ] ) & ( value >= 1000 )'
192
+ end
193
+ end
156
194
  end
157
195
 
158
196
  describe "value nodes" do
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.1.0.rc1
4
+ version: 0.1.0.rc2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Courtland Caldwell
@@ -14,90 +14,90 @@ dependencies:
14
14
  name: msfl
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.1'
20
- - - '>='
20
+ - - ">="
21
21
  - !ruby/object:Gem::Version
22
22
  version: 1.1.6
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
- - - ~>
27
+ - - "~>"
28
28
  - !ruby/object:Gem::Version
29
29
  version: '1.1'
30
- - - '>='
30
+ - - ">="
31
31
  - !ruby/object:Gem::Version
32
32
  version: 1.1.6
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: rake
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - ~>
37
+ - - "~>"
38
38
  - !ruby/object:Gem::Version
39
39
  version: '10.3'
40
40
  type: :development
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
- - - ~>
44
+ - - "~>"
45
45
  - !ruby/object:Gem::Version
46
46
  version: '10.3'
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: simplecov
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
- - - ~>
51
+ - - "~>"
52
52
  - !ruby/object:Gem::Version
53
53
  version: '0.10'
54
54
  type: :development
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
- - - ~>
58
+ - - "~>"
59
59
  - !ruby/object:Gem::Version
60
60
  version: '0.10'
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: yard
63
63
  requirement: !ruby/object:Gem::Requirement
64
64
  requirements:
65
- - - ~>
65
+ - - "~>"
66
66
  - !ruby/object:Gem::Version
67
67
  version: '0.8'
68
68
  type: :development
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
- - - ~>
72
+ - - "~>"
73
73
  - !ruby/object:Gem::Version
74
74
  version: '0.8'
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: rspec
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
- - - ~>
79
+ - - "~>"
80
80
  - !ruby/object:Gem::Version
81
81
  version: '3.2'
82
82
  type: :development
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
- - - ~>
86
+ - - "~>"
87
87
  - !ruby/object:Gem::Version
88
88
  version: '3.2'
89
89
  - !ruby/object:Gem::Dependency
90
90
  name: byebug
91
91
  requirement: !ruby/object:Gem::Requirement
92
92
  requirements:
93
- - - ~>
93
+ - - "~>"
94
94
  - !ruby/object:Gem::Version
95
95
  version: '4.0'
96
96
  type: :development
97
97
  prerelease: false
98
98
  version_requirements: !ruby/object:Gem::Requirement
99
99
  requirements:
100
- - - ~>
100
+ - - "~>"
101
101
  - !ruby/object:Gem::Version
102
102
  version: '4.0'
103
103
  description: Visitor pattern approach to converting MSFL to other forms.
@@ -106,7 +106,7 @@ executables: []
106
106
  extensions: []
107
107
  extra_rdoc_files: []
108
108
  files:
109
- - .gitignore
109
+ - ".gitignore"
110
110
  - Gemfile
111
111
  - Gemfile.lock
112
112
  - LICENSE
@@ -115,6 +115,8 @@ files:
115
115
  - circle.yml
116
116
  - lib/msfl_visitors.rb
117
117
  - lib/msfl_visitors/ast.rb
118
+ - lib/msfl_visitors/collectors.rb
119
+ - lib/msfl_visitors/collectors/chewy/term_filter.rb
118
120
  - lib/msfl_visitors/nodes.rb
119
121
  - lib/msfl_visitors/nodes/and.rb
120
122
  - lib/msfl_visitors/nodes/base.rb
@@ -167,17 +169,17 @@ require_paths:
167
169
  - lib
168
170
  required_ruby_version: !ruby/object:Gem::Requirement
169
171
  requirements:
170
- - - '>='
172
+ - - ">="
171
173
  - !ruby/object:Gem::Version
172
174
  version: '0'
173
175
  required_rubygems_version: !ruby/object:Gem::Requirement
174
176
  requirements:
175
- - - '>'
177
+ - - ">"
176
178
  - !ruby/object:Gem::Version
177
179
  version: 1.3.1
178
180
  requirements: []
179
181
  rubyforge_project:
180
- rubygems_version: 2.4.2
182
+ rubygems_version: 2.2.2
181
183
  signing_key:
182
184
  specification_version: 4
183
185
  summary: Convert MSFL to other forms