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 +4 -4
- data/lib/msfl_visitors/collectors/chewy/term_filter.rb +12 -0
- data/lib/msfl_visitors/collectors.rb +1 -0
- data/lib/msfl_visitors/nodes/and.rb +4 -4
- data/lib/msfl_visitors/nodes/iterator.rb +5 -4
- data/lib/msfl_visitors/nodes/set/set.rb +4 -0
- data/lib/msfl_visitors.rb +1 -0
- data/msfl_visitors.gemspec +1 -1
- data/spec/parsers/msfl_parser_spec.rb +49 -0
- data/spec/visitors/chewy_term_filter_spec.rb +39 -1
- metadata +21 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c0e61b7239950114bedf1b804c6447f5aa2527ae
|
4
|
+
data.tar.gz: 5faa08969fb85e6ea551cdc358cfa48f43e3a260
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 982a97170e02f732d4b3fa12d0e362e54256ba6c729efa149e71f166b55df0750f41b631756b905b991892d8c156e10db29346d1aaba4de5f97e4df79f5bcd13
|
7
|
+
data.tar.gz: 6d1683a3a037a3ed7c4fe3107248e5877ffdc8be2e8426821d83b74fa004d1b304b5aa43ba7f8ed9dd69b8261d21c031ae0941b9f9724362f0f0f395ea0ee050
|
@@ -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
|
9
|
-
|
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
|
15
|
-
nodes <<
|
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 :
|
6
|
+
attr_accessor :set
|
7
7
|
|
8
|
-
|
9
|
-
|
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
|
-
|
15
|
+
set == other.set
|
15
16
|
end
|
16
17
|
end
|
17
18
|
end
|
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
|
data/msfl_visitors.gemspec
CHANGED
@@ -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) {
|
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.
|
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.
|
182
|
+
rubygems_version: 2.2.2
|
181
183
|
signing_key:
|
182
184
|
specification_version: 4
|
183
185
|
summary: Convert MSFL to other forms
|