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 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