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