msfl_visitors 0.0.2 → 0.0.3
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/.gitignore +4 -1
- data/lib/msfl_visitors.rb +3 -2
- data/lib/msfl_visitors/ast.rb +1 -1
- data/lib/msfl_visitors/nodes/date_time.rb +1 -1
- data/lib/msfl_visitors/parsers/msfl_parser.rb +1 -1
- data/lib/msfl_visitors/renderers/chewy/term_filter.rb +42 -0
- data/lib/msfl_visitors/visitor.rb +16 -0
- data/msfl_visitors.gemspec +1 -1
- data/spec/visitors/chewy_term_filter_spec.rb +175 -0
- metadata +5 -11
- data/lib/msfl_visitors/visitors/base.rb +0 -15
- data/lib/msfl_visitors/visitors/chewy_term_filter.rb +0 -70
- data/spec/visitors/chewy_term_filter/visit_binary_spec.rb +0 -26
- data/spec/visitors/chewy_term_filter/visit_comparison_spec.rb +0 -61
- data/spec/visitors/chewy_term_filter/visit_range_value_spec.rb +0 -63
- data/spec/visitors/chewy_term_filter/visit_value_spec.rb +0 -44
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: daf42029b9bfc45fc7203e2c07543dbbc069b3d5
|
4
|
+
data.tar.gz: 361efbee8a9055be3acec9862b9723630a9d8da8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 01f65645a30000fba50046a1200339561ec8da9d645202db7cb3ec3e8887f072e62e079aad75dffaaa198e4f6aac8c13edc394766c7f3ffe68e2c8b3fc171f60
|
7
|
+
data.tar.gz: 68a70c23d76380d4ceb58db76672c1fe34bb9d0969a42205cfa8570a9f5f1c51325694dd9eb4861125940be008d5f8f05e49ba015f991381f14aa8df25050634
|
data/.gitignore
CHANGED
data/lib/msfl_visitors.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
require_relative 'msfl_visitors/ast'
|
2
|
-
require_relative 'msfl_visitors/visitors/base'
|
3
2
|
require_relative 'msfl_visitors/nodes'
|
4
|
-
require_relative 'msfl_visitors/
|
3
|
+
require_relative 'msfl_visitors/visitor'
|
4
|
+
require_relative 'msfl_visitors/renderers/chewy/term_filter'
|
5
5
|
require_relative 'msfl_visitors/parsers/msfl_parser'
|
6
|
+
|
6
7
|
module MSFLVisitors
|
7
8
|
end
|
data/lib/msfl_visitors/ast.rb
CHANGED
@@ -0,0 +1,42 @@
|
|
1
|
+
module MSFLVisitors
|
2
|
+
module Renderers
|
3
|
+
module Chewy
|
4
|
+
class TermFilter
|
5
|
+
BINARY_OPERATORS = {
|
6
|
+
Nodes::And => ' & ',
|
7
|
+
Nodes::GreaterThan => ' > ',
|
8
|
+
Nodes::LessThan => ' < ',
|
9
|
+
Nodes::GreaterThanEqual => ' >= ',
|
10
|
+
Nodes::LessThanEqual => ' <= ',
|
11
|
+
Nodes::Equal => ' == ',
|
12
|
+
}
|
13
|
+
|
14
|
+
def render(node)
|
15
|
+
case node
|
16
|
+
|
17
|
+
when Nodes::Comparison, Nodes::And
|
18
|
+
BINARY_OPERATORS[node.class]
|
19
|
+
|
20
|
+
when Nodes::Date, Nodes::Time
|
21
|
+
node.value.iso8601
|
22
|
+
|
23
|
+
when Nodes::Boolean, Nodes::Number
|
24
|
+
node.value
|
25
|
+
|
26
|
+
when Nodes::Word
|
27
|
+
node.value.to_s
|
28
|
+
|
29
|
+
when Nodes::Grouping::Close
|
30
|
+
' )'
|
31
|
+
|
32
|
+
when Nodes::Grouping::Open
|
33
|
+
'( '
|
34
|
+
|
35
|
+
else
|
36
|
+
fail ArgumentError.new("Unrecognized node type: #{node.class}")
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module MSFLVisitors
|
2
|
+
class Visitor
|
3
|
+
def initialize(collector, renderer)
|
4
|
+
@collector = collector
|
5
|
+
@renderer = renderer
|
6
|
+
end
|
7
|
+
|
8
|
+
def visit(obj)
|
9
|
+
collector << renderer.render(obj)
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
attr_reader :collector, :renderer
|
15
|
+
end
|
16
|
+
end
|
data/msfl_visitors.gemspec
CHANGED
@@ -0,0 +1,175 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MSFLVisitors::Visitor do
|
4
|
+
|
5
|
+
let(:node) { fail ArgumentError, "You must define the node variable in each scope." }
|
6
|
+
|
7
|
+
let(:collector) { String.new }
|
8
|
+
|
9
|
+
let(:renderer) { MSFLVisitors::Renderers::Chewy::TermFilter.new }
|
10
|
+
|
11
|
+
let(:visitor) { described_class.new collector, renderer }
|
12
|
+
|
13
|
+
let(:left) { MSFLVisitors::Nodes::Word.new "lhs" }
|
14
|
+
|
15
|
+
let(:right) { MSFLVisitors::Nodes::Word.new "rhs" }
|
16
|
+
|
17
|
+
subject(:result) { node.accept visitor }
|
18
|
+
|
19
|
+
context "when visiting" do
|
20
|
+
|
21
|
+
describe "an Equal node" do
|
22
|
+
|
23
|
+
let(:node) { MSFLVisitors::Nodes::Equal.new left, right }
|
24
|
+
|
25
|
+
it "results in: 'left == right'" do
|
26
|
+
expect(result).to eq "lhs == rhs"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "a GreaterThan node" do
|
31
|
+
|
32
|
+
let(:node) { MSFLVisitors::Nodes::GreaterThan.new left, right }
|
33
|
+
|
34
|
+
it "returns: 'left > right'" do
|
35
|
+
expect(result).to eq "lhs > rhs"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "a GreaterThanEqual node" do
|
40
|
+
|
41
|
+
let(:node) { MSFLVisitors::Nodes::GreaterThanEqual.new left, right }
|
42
|
+
|
43
|
+
it "returns: 'left >= right'" do
|
44
|
+
expect(result).to eq "lhs >= rhs"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe "a LessThan node" do
|
49
|
+
|
50
|
+
let(:node) { MSFLVisitors::Nodes::LessThan.new left, right }
|
51
|
+
|
52
|
+
it "returns: 'left < right'" do
|
53
|
+
expect(result).to eq "lhs < rhs"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe "a LessThanEqual node" do
|
58
|
+
|
59
|
+
let(:node) { MSFLVisitors::Nodes::LessThanEqual.new left, right }
|
60
|
+
|
61
|
+
it "returns: 'left <= right'" do
|
62
|
+
expect(result).to eq "lhs <= rhs"
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe "an And node" do
|
67
|
+
|
68
|
+
let(:node) { MSFLVisitors::Nodes::And.new left, right }
|
69
|
+
|
70
|
+
it "returns: '( left ) & ( right )'" do
|
71
|
+
expect(result).to eq "( lhs ) & ( rhs )"
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
describe "value nodes" do
|
76
|
+
describe "a Boolean node" do
|
77
|
+
|
78
|
+
let(:collector) { Array.new }
|
79
|
+
|
80
|
+
let(:node) { MSFLVisitors::Nodes::Boolean.new value }
|
81
|
+
|
82
|
+
subject(:result) { node.accept(visitor).first }
|
83
|
+
|
84
|
+
context "with a value of true" do
|
85
|
+
|
86
|
+
let(:value) { true }
|
87
|
+
|
88
|
+
it "returns: true" do
|
89
|
+
expect(result).to be true
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
context "with a value of false" do
|
94
|
+
|
95
|
+
let(:value) { false }
|
96
|
+
|
97
|
+
it "returns: false" do
|
98
|
+
expect(result).to be false
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
describe "a Word node" do
|
104
|
+
|
105
|
+
let(:word) { "node_content" }
|
106
|
+
|
107
|
+
let(:node) { MSFLVisitors::Nodes::Word.new word }
|
108
|
+
|
109
|
+
it "is a literal string" do
|
110
|
+
expect(result).to eq word
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
describe "range value nodes" do
|
116
|
+
|
117
|
+
let(:collector) { Array.new }
|
118
|
+
|
119
|
+
subject(:result) { node.accept(visitor).first }
|
120
|
+
|
121
|
+
describe "a Date node" do
|
122
|
+
|
123
|
+
let(:today) { Date.today }
|
124
|
+
|
125
|
+
let(:node) { MSFLVisitors::Nodes::Date.new today }
|
126
|
+
|
127
|
+
it "returns: the date using iso8601 formatting" do
|
128
|
+
expect(result).to eq today.iso8601
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
describe "a Time node" do
|
133
|
+
|
134
|
+
let(:now) { Time.now }
|
135
|
+
|
136
|
+
let(:node) { MSFLVisitors::Nodes::Time.new now }
|
137
|
+
|
138
|
+
it "returns: the time using iso8601 formatting" do
|
139
|
+
expect(result).to eq now.iso8601
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
describe "a DateTime node" do
|
144
|
+
|
145
|
+
let(:now) { DateTime.now }
|
146
|
+
|
147
|
+
let(:node) { MSFLVisitors::Nodes::DateTime.new now }
|
148
|
+
|
149
|
+
it "returns: the date and time using iso8601 formatting" do
|
150
|
+
expect(result).to eq now.iso8601
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
describe "a Number node" do
|
155
|
+
|
156
|
+
let(:number) { 123 }
|
157
|
+
|
158
|
+
let(:node) { MSFLVisitors::Nodes::Number.new number }
|
159
|
+
|
160
|
+
it "returns: the number" do
|
161
|
+
expect(result).to eq number
|
162
|
+
end
|
163
|
+
|
164
|
+
context "when the number is a float" do
|
165
|
+
|
166
|
+
let(:number) { 123.456 }
|
167
|
+
|
168
|
+
it "returns: the number with the same precision" do
|
169
|
+
expect(result).to eq number
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
175
|
+
end
|
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.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Courtland Caldwell
|
@@ -139,16 +139,13 @@ files:
|
|
139
139
|
- lib/msfl_visitors/nodes/value.rb
|
140
140
|
- lib/msfl_visitors/nodes/word.rb
|
141
141
|
- lib/msfl_visitors/parsers/msfl_parser.rb
|
142
|
-
- lib/msfl_visitors/
|
143
|
-
- lib/msfl_visitors/
|
142
|
+
- lib/msfl_visitors/renderers/chewy/term_filter.rb
|
143
|
+
- lib/msfl_visitors/visitor.rb
|
144
144
|
- msfl_visitors.gemspec
|
145
145
|
- simplecov_custom_profiles.rb
|
146
146
|
- spec/parsers/parse_msfl_spec.rb
|
147
147
|
- spec/spec_helper.rb
|
148
|
-
- spec/visitors/
|
149
|
-
- spec/visitors/chewy_term_filter/visit_comparison_spec.rb
|
150
|
-
- spec/visitors/chewy_term_filter/visit_range_value_spec.rb
|
151
|
-
- spec/visitors/chewy_term_filter/visit_value_spec.rb
|
148
|
+
- spec/visitors/chewy_term_filter_spec.rb
|
152
149
|
homepage: https://github.com/Referly/msfl_visitors
|
153
150
|
licenses:
|
154
151
|
- MIT
|
@@ -176,8 +173,5 @@ summary: Convert MSFL to other forms
|
|
176
173
|
test_files:
|
177
174
|
- spec/parsers/parse_msfl_spec.rb
|
178
175
|
- spec/spec_helper.rb
|
179
|
-
- spec/visitors/
|
180
|
-
- spec/visitors/chewy_term_filter/visit_comparison_spec.rb
|
181
|
-
- spec/visitors/chewy_term_filter/visit_range_value_spec.rb
|
182
|
-
- spec/visitors/chewy_term_filter/visit_value_spec.rb
|
176
|
+
- spec/visitors/chewy_term_filter_spec.rb
|
183
177
|
has_rdoc:
|
@@ -1,15 +0,0 @@
|
|
1
|
-
module MSFLVisitors
|
2
|
-
module Visitors
|
3
|
-
class Base
|
4
|
-
attr_accessor :collector
|
5
|
-
|
6
|
-
def visit(obj)
|
7
|
-
send("visit_#{obj.class.to_s.gsub('::', '_')}", obj, collector)
|
8
|
-
end
|
9
|
-
|
10
|
-
def initialize(collector)
|
11
|
-
self.collector = collector
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
@@ -1,70 +0,0 @@
|
|
1
|
-
module MSFLVisitors
|
2
|
-
module Visitors
|
3
|
-
class ChewyTermFilter < Base
|
4
|
-
|
5
|
-
# Instead of using string interpolation only supported operators are enabled
|
6
|
-
BINARY_OPERATORS = { eq: "==", gt: ">", gte: ">=", lt: "<", lte: "<=", and: "&" }
|
7
|
-
|
8
|
-
def visit_MSFLVisitors_Nodes_And(obj, collector)
|
9
|
-
binary_helper :and, collector
|
10
|
-
end
|
11
|
-
|
12
|
-
def visit_MSFLVisitors_Nodes_Boolean(obj, collector)
|
13
|
-
collector << obj.value
|
14
|
-
end
|
15
|
-
|
16
|
-
def visit_MSFLVisitors_Nodes_Date(obj, collector)
|
17
|
-
collector << obj.value.iso8601
|
18
|
-
end
|
19
|
-
|
20
|
-
def visit_MSFLVisitors_Nodes_DateTime(obj, collector)
|
21
|
-
collector << obj.value.iso8601
|
22
|
-
end
|
23
|
-
|
24
|
-
def visit_MSFLVisitors_Nodes_Equal(obj, collector)
|
25
|
-
binary_helper :eq, collector
|
26
|
-
end
|
27
|
-
|
28
|
-
def visit_MSFLVisitors_Nodes_GreaterThan(obj, collector)
|
29
|
-
binary_helper :gt, collector
|
30
|
-
end
|
31
|
-
|
32
|
-
def visit_MSFLVisitors_Nodes_GreaterThanEqual(obj, collector)
|
33
|
-
binary_helper :gte, collector
|
34
|
-
end
|
35
|
-
|
36
|
-
def visit_MSFLVisitors_Nodes_Grouping_Close(obj, collector)
|
37
|
-
collector << " )"
|
38
|
-
end
|
39
|
-
|
40
|
-
def visit_MSFLVisitors_Nodes_Grouping_Open(obj, collector)
|
41
|
-
collector << "( "
|
42
|
-
end
|
43
|
-
|
44
|
-
def visit_MSFLVisitors_Nodes_LessThan(obj, collector)
|
45
|
-
binary_helper :lt, collector
|
46
|
-
end
|
47
|
-
|
48
|
-
def visit_MSFLVisitors_Nodes_LessThanEqual(obj, collector)
|
49
|
-
binary_helper :lte, collector
|
50
|
-
end
|
51
|
-
|
52
|
-
def visit_MSFLVisitors_Nodes_Number(obj, collector)
|
53
|
-
collector << obj.value
|
54
|
-
end
|
55
|
-
|
56
|
-
def visit_MSFLVisitors_Nodes_Time(obj, collector)
|
57
|
-
collector << obj.value.iso8601
|
58
|
-
end
|
59
|
-
|
60
|
-
def visit_MSFLVisitors_Nodes_Word(obj, collector)
|
61
|
-
collector << "#{obj.value.to_s}"
|
62
|
-
end
|
63
|
-
|
64
|
-
private
|
65
|
-
def binary_helper(operator, collector)
|
66
|
-
collector << " #{BINARY_OPERATORS.fetch(operator.to_sym)} "
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe MSFLVisitors::Visitors::ChewyTermFilter do
|
4
|
-
|
5
|
-
subject { node.accept visitor }
|
6
|
-
|
7
|
-
let(:node) { fail ArgumentError, "You must define the node variable in each scope." }
|
8
|
-
|
9
|
-
let(:visitor) { described_class.new collector }
|
10
|
-
|
11
|
-
let(:collector) { String.new }
|
12
|
-
|
13
|
-
let(:left) { MSFLVisitors::Nodes::Word.new "lhs" }
|
14
|
-
|
15
|
-
let(:right) { MSFLVisitors::Nodes::Word.new "rhs" }
|
16
|
-
|
17
|
-
describe "visiting an And node" do
|
18
|
-
|
19
|
-
let(:node) { MSFLVisitors::Nodes::And.new left, right }
|
20
|
-
|
21
|
-
it "matches ( left ) & ( right )" do
|
22
|
-
expect(subject).to match "( lhs ) & ( rhs )"
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
end
|
@@ -1,61 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe MSFLVisitors::Visitors::ChewyTermFilter do
|
4
|
-
|
5
|
-
subject { node.accept visitor }
|
6
|
-
|
7
|
-
let(:node) { fail ArgumentError, "You must define the node variable in each scope." }
|
8
|
-
|
9
|
-
let(:visitor) { described_class.new collector }
|
10
|
-
|
11
|
-
let(:collector) { String.new }
|
12
|
-
|
13
|
-
let(:left) { MSFLVisitors::Nodes::Word.new "lhs" }
|
14
|
-
|
15
|
-
let(:right) { MSFLVisitors::Nodes::Word.new "rhs" }
|
16
|
-
|
17
|
-
describe "visiting an Equal node" do
|
18
|
-
|
19
|
-
let(:node) { MSFLVisitors::Nodes::Equal.new left, right }
|
20
|
-
|
21
|
-
it "matches left == right" do
|
22
|
-
expect(subject).to match "lhs == rhs"
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
describe "visiting a GreaterThan node" do
|
27
|
-
|
28
|
-
let(:node) { MSFLVisitors::Nodes::GreaterThan.new left, right }
|
29
|
-
|
30
|
-
it "matches left > right" do
|
31
|
-
expect(subject).to match "lhs > rhs"
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
describe "visiting a GreaterThanEqual node" do
|
36
|
-
|
37
|
-
let(:node) { MSFLVisitors::Nodes::GreaterThanEqual.new left, right }
|
38
|
-
|
39
|
-
it "matches left >= right" do
|
40
|
-
expect(subject).to match "lhs >= rhs"
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
describe "visiting a LessThan node" do
|
45
|
-
|
46
|
-
let(:node) { MSFLVisitors::Nodes::LessThan.new left, right }
|
47
|
-
|
48
|
-
it "matches left < right" do
|
49
|
-
expect(subject).to match "lhs < rhs"
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
describe "visiting a LessThanEqual node" do
|
54
|
-
|
55
|
-
let(:node) { MSFLVisitors::Nodes::LessThanEqual.new left, right }
|
56
|
-
|
57
|
-
it "matches left <= right" do
|
58
|
-
expect(subject).to match "lhs <= rhs"
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
@@ -1,63 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe MSFLVisitors::Visitors::ChewyTermFilter do
|
4
|
-
|
5
|
-
subject { node.accept visitor }
|
6
|
-
|
7
|
-
let(:node) { fail ArgumentError, "You must define the node variable in each scope." }
|
8
|
-
|
9
|
-
let(:visitor) { described_class.new collector }
|
10
|
-
|
11
|
-
let(:collector) { Array.new }
|
12
|
-
|
13
|
-
describe "visiting a Date node" do
|
14
|
-
|
15
|
-
let(:node) { MSFLVisitors::Nodes::Date.new Date.today }
|
16
|
-
|
17
|
-
it "is today's date using iso8601 formatting" do
|
18
|
-
expect(subject.first).to eq Date.today.iso8601
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
describe "visiting a DateTime node" do
|
23
|
-
|
24
|
-
let(:now) { DateTime.now }
|
25
|
-
|
26
|
-
let(:node) { MSFLVisitors::Nodes::DateTime.new now }
|
27
|
-
|
28
|
-
it "is the current date and time using iso8601 formatting" do
|
29
|
-
expect(subject.first).to eq now.iso8601
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
describe "visiting a Number node" do
|
34
|
-
|
35
|
-
let(:node) { MSFLVisitors::Nodes::Number.new number }
|
36
|
-
|
37
|
-
let(:number) { 123 }
|
38
|
-
|
39
|
-
it "is the number" do
|
40
|
-
expect(subject.first).to eq number
|
41
|
-
end
|
42
|
-
|
43
|
-
context "when the number is a float" do
|
44
|
-
|
45
|
-
let(:number) { 123.456 }
|
46
|
-
|
47
|
-
it "is the number with the same precision" do
|
48
|
-
expect(subject.first).to eq number
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
describe "visiting a Time node" do
|
54
|
-
|
55
|
-
let(:node) { MSFLVisitors::Nodes::Time.new current_time }
|
56
|
-
|
57
|
-
let(:current_time) { Time.now }
|
58
|
-
|
59
|
-
it "is the current time using iso8601 formatting" do
|
60
|
-
expect(subject.first).to eq current_time.iso8601
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
@@ -1,44 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe MSFLVisitors::Visitors::ChewyTermFilter do
|
4
|
-
|
5
|
-
subject { node.accept visitor }
|
6
|
-
|
7
|
-
let(:node) { fail ArgumentError, "You must define the node variable in each scope." }
|
8
|
-
|
9
|
-
let(:visitor) { described_class.new collector }
|
10
|
-
|
11
|
-
let(:collector) { Array.new }
|
12
|
-
|
13
|
-
describe "visiting a Boolean node" do
|
14
|
-
|
15
|
-
let(:node) { MSFLVisitors::Nodes::Boolean.new value }
|
16
|
-
|
17
|
-
context "when the node has a value of true" do
|
18
|
-
|
19
|
-
let(:value) { true }
|
20
|
-
|
21
|
-
it "is true" do
|
22
|
-
expect(subject.first).to be true
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
context "when the node has a value of false" do
|
27
|
-
|
28
|
-
let(:value) { false }
|
29
|
-
|
30
|
-
it "is false" do
|
31
|
-
expect(subject.first).to be false
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
describe "visiting a Word node" do
|
37
|
-
|
38
|
-
let(:node) { MSFLVisitors::Nodes::Word.new "node_content" }
|
39
|
-
|
40
|
-
it "is a literal string" do
|
41
|
-
expect(subject.first).to match /node_content/
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|