msfl_visitors 0.1.0.rc1 → 0.1.0.rc2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|