cisco_acl_intp 0.0.3 → 0.0.4
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 +3 -0
- data/.rubocop.yml +2 -2
- data/.travis.yml +4 -2
- data/Gemfile +7 -6
- data/README.md +23 -18
- data/Rakefile +11 -13
- data/cisco_acl_intp.gemspec +7 -7
- data/lib/cisco_acl_intp/acc.rb +111 -0
- data/lib/cisco_acl_intp/{ace.rb → ace_base.rb} +9 -8
- data/lib/cisco_acl_intp/{extended_ace.rb → ace_extended.rb} +8 -10
- data/lib/cisco_acl_intp/{standard_ace.rb → ace_standard.rb} +5 -5
- data/lib/cisco_acl_intp/acespec_base.rb +15 -0
- data/lib/cisco_acl_intp/{ace_ip.rb → acespec_ip.rb} +14 -22
- data/lib/cisco_acl_intp/{ace_other_qualifiers.rb → acespec_other_qualifiers.rb} +7 -7
- data/lib/cisco_acl_intp/{ace_port.rb → acespec_port.rb} +10 -13
- data/lib/cisco_acl_intp/{ace_port_opr.rb → acespec_port_opr.rb} +75 -73
- data/lib/cisco_acl_intp/{ace_port_opr_base.rb → acespec_port_opr_base.rb} +49 -34
- data/lib/cisco_acl_intp/{ace_proto.rb → acespec_proto.rb} +4 -4
- data/lib/cisco_acl_intp/{ace_proto_base.rb → acespec_proto_base.rb} +8 -8
- data/lib/cisco_acl_intp/{ace_srcdst.rb → acespec_srcdst.rb} +9 -8
- data/lib/cisco_acl_intp/{ace_tcp_flags.rb → acespec_tcp_flags.rb} +4 -4
- data/lib/cisco_acl_intp/acl.rb +1 -1
- data/lib/cisco_acl_intp/acl_base.rb +108 -80
- data/lib/cisco_acl_intp/{mono_function_acl.rb → acl_category_base.rb} +5 -5
- data/lib/cisco_acl_intp/acl_utils.rb +1 -1
- data/lib/cisco_acl_intp/parser.rb +388 -406
- data/lib/cisco_acl_intp/parser.ry +8 -3
- data/lib/cisco_acl_intp/parser_api.rb +4 -4
- data/lib/cisco_acl_intp/scanner.rb +8 -10
- data/lib/cisco_acl_intp/scanner_special_token_handler.rb +3 -3
- data/lib/cisco_acl_intp/version.rb +1 -1
- data/spec/cisco_acl_intp/{extended_ace_spec.rb → ace_extended_spec.rb} +157 -128
- data/spec/cisco_acl_intp/ace_spec.rb +21 -19
- data/spec/cisco_acl_intp/{standard_ace_spec.rb → ace_standard_spec.rb} +7 -11
- data/spec/cisco_acl_intp/{ace_ip_spec.rb → acespec_ip_spec.rb} +34 -34
- data/spec/cisco_acl_intp/{ace_other_qualifier_spec.rb → acespec_other_qualifier_spec.rb} +18 -18
- data/spec/cisco_acl_intp/acespec_port_operator_spec.rb +331 -0
- data/spec/cisco_acl_intp/{ace_port_spec.rb → acespec_port_spec.rb} +33 -33
- data/spec/cisco_acl_intp/{ace_proto_spec.rb → acespec_proto_spec.rb} +61 -61
- data/spec/cisco_acl_intp/{ace_srcdst_spec.rb → acespec_srcdst_spec.rb} +113 -54
- data/spec/cisco_acl_intp/{ace_tcp_flags_spec.rb → acespec_tcp_flags_spec.rb} +10 -10
- data/spec/cisco_acl_intp/acl_base_spec.rb +14 -12
- data/spec/cisco_acl_intp/{extended_acl_spec.rb → acl_extended_spec.rb} +28 -28
- data/spec/cisco_acl_intp/{standard_acl_spec.rb → acl_standard_spec.rb} +24 -23
- data/spec/cisco_acl_intp/cisco_acl_intp_spec.rb +1 -1
- data/spec/cisco_acl_intp/parser_spec.rb +12 -12
- data/spec/cisco_acl_intp/scanner_spec.rb +31 -36
- data/spec/parser_fullfill_patterns.rb +6 -7
- data/spec/spec_helper.rb +6 -6
- data/tools/check_acl.rb +1 -1
- metadata +60 -59
- data/lib/cisco_acl_intp/single_acl_base.rb +0 -137
- data/spec/cisco_acl_intp/ace_port_operator_spec.rb +0 -340
@@ -1,340 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
require 'spec_helper'
|
3
|
-
|
4
|
-
describe 'AcePortOpAny' do
|
5
|
-
describe '#contains' do
|
6
|
-
before(:all) do
|
7
|
-
@aclop = AcePortOpAny.new
|
8
|
-
@port1 = AceTcpProtoSpec.new(10)
|
9
|
-
@port2 = AceTcpProtoSpec.new('www')
|
10
|
-
end
|
11
|
-
|
12
|
-
it 'should be true all conditions' do
|
13
|
-
@aclop.contains?(AcePortOpAny.new).should be_true
|
14
|
-
@aclop.contains?(AcePortOpStrictAny.new).should be_true
|
15
|
-
@aclop.contains?(AcePortOpEq.new(@port1)).should be_true
|
16
|
-
@aclop.contains?(AcePortOpNeq.new(@port1)).should be_true
|
17
|
-
@aclop.contains?(AcePortOpLt.new(@port1)).should be_true
|
18
|
-
@aclop.contains?(AcePortOpGt.new(@port1)).should be_true
|
19
|
-
@aclop.contains?(AcePortOpRange.new(@port1, @port2)).should be_true
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
describe 'AcePortOpStrictAny' do
|
25
|
-
describe '#contains' do
|
26
|
-
before(:all) do
|
27
|
-
@aclop = AcePortOpStrictAny.new
|
28
|
-
@port1 = AceTcpProtoSpec.new(10)
|
29
|
-
@port2 = AceTcpProtoSpec.new('www')
|
30
|
-
end
|
31
|
-
|
32
|
-
it 'should be true when only ANY conditions' do
|
33
|
-
@aclop.contains?(AcePortOpAny.new).should be_true
|
34
|
-
@aclop.contains?(AcePortOpStrictAny.new).should be_true
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'should be false with other operators' do
|
38
|
-
@aclop.contains?(AcePortOpEq.new(@port1)).should be_false
|
39
|
-
@aclop.contains?(AcePortOpNeq.new(@port1)).should be_false
|
40
|
-
@aclop.contains?(AcePortOpLt.new(@port1)).should be_false
|
41
|
-
@aclop.contains?(AcePortOpGt.new(@port1)).should be_false
|
42
|
-
@aclop.contains?(AcePortOpRange.new(@port1, @port2)).should be_false
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
describe 'AcePortOpEq' do
|
48
|
-
describe '#contains' do
|
49
|
-
before(:all) do
|
50
|
-
@port1 = AceTcpProtoSpec.new(10)
|
51
|
-
@port2 = AceTcpProtoSpec.new('www')
|
52
|
-
@aclop = AcePortOpEq.new(@port1)
|
53
|
-
end
|
54
|
-
|
55
|
-
it 'should be true with ANY' do
|
56
|
-
@aclop.contains?(AcePortOpAny.new).should be_true
|
57
|
-
end
|
58
|
-
|
59
|
-
it 'should be false with STRICT_ANY' do
|
60
|
-
@aclop.contains?(AcePortOpStrictAny.new).should be_true
|
61
|
-
end
|
62
|
-
|
63
|
-
it 'should be true when same eq/port operator' do
|
64
|
-
@aclop.contains?(AcePortOpEq.new(@port1)).should be_true
|
65
|
-
@aclop.contains?(AcePortOpEq.new(@port2)).should be_false
|
66
|
-
end
|
67
|
-
|
68
|
-
it 'should be false with other operator' do
|
69
|
-
@aclop.contains?(AcePortOpNeq.new(@port1)).should be_false
|
70
|
-
@aclop.contains?(AcePortOpLt.new(@port1)).should be_false
|
71
|
-
@aclop.contains?(AcePortOpGt.new(@port1)).should be_false
|
72
|
-
@aclop.contains?(AcePortOpRange.new(@port1, @port2)).should be_false
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
describe 'AcePortOpNeq' do
|
78
|
-
describe '#contains' do
|
79
|
-
before(:all) do
|
80
|
-
@port1 = AceTcpProtoSpec.new(10)
|
81
|
-
@port2 = AceTcpProtoSpec.new('www')
|
82
|
-
@port3 = AceTcpProtoSpec.new(443)
|
83
|
-
@aclop = AcePortOpNeq.new(@port2)
|
84
|
-
end
|
85
|
-
|
86
|
-
it 'should be true with ANY' do
|
87
|
-
@aclop.contains?(AcePortOpAny.new).should be_true
|
88
|
-
end
|
89
|
-
|
90
|
-
it 'should be false with STRICT_ANY' do
|
91
|
-
@aclop.contains?(AcePortOpStrictAny.new).should be_true
|
92
|
-
end
|
93
|
-
|
94
|
-
it 'should be checked with EQUAL' do
|
95
|
-
@aclop.contains?(AcePortOpEq.new(@port1)).should be_true
|
96
|
-
@aclop.contains?(AcePortOpEq.new(@port2)).should be_false
|
97
|
-
@aclop.contains?(AcePortOpEq.new(@port3)).should be_true
|
98
|
-
end
|
99
|
-
|
100
|
-
it 'should be checked with NOT_EQUAL' do
|
101
|
-
@aclop.contains?(AcePortOpNeq.new(@port1)).should be_false
|
102
|
-
@aclop.contains?(AcePortOpNeq.new(@port2)).should be_true
|
103
|
-
@aclop.contains?(AcePortOpNeq.new(@port3)).should be_false
|
104
|
-
end
|
105
|
-
|
106
|
-
it 'should be checked with LOWER_THAN' do
|
107
|
-
@aclop.contains?(AcePortOpLt.new(@port1)).should be_true
|
108
|
-
@aclop.contains?(AcePortOpLt.new(@port2)).should be_true
|
109
|
-
@aclop.contains?(AcePortOpLt.new(@port3)).should be_false
|
110
|
-
end
|
111
|
-
|
112
|
-
it 'should be checked with GRATER_THAN' do
|
113
|
-
@aclop.contains?(AcePortOpGt.new(@port1)).should be_false
|
114
|
-
@aclop.contains?(AcePortOpGt.new(@port2)).should be_true
|
115
|
-
@aclop.contains?(AcePortOpGt.new(@port3)).should be_true
|
116
|
-
end
|
117
|
-
|
118
|
-
it 'should be checked with RANGE' do
|
119
|
-
port2a = AceTcpProtoSpec.new(79)
|
120
|
-
port2b = AceTcpProtoSpec.new(81)
|
121
|
-
@aclop.contains?(AcePortOpRange.new(@port1, port2a)).should be_true
|
122
|
-
@aclop.contains?(AcePortOpRange.new(@port1, @port2)).should be_false
|
123
|
-
@aclop.contains?(AcePortOpRange.new(@port2, @port3)).should be_false
|
124
|
-
@aclop.contains?(AcePortOpRange.new(port2b, @port3)).should be_true
|
125
|
-
@aclop.contains?(AcePortOpRange.new(@port1, @port3)).should be_false
|
126
|
-
end
|
127
|
-
end
|
128
|
-
end
|
129
|
-
|
130
|
-
describe 'AcePortOpLt' do
|
131
|
-
describe '#contains' do
|
132
|
-
before(:all) do
|
133
|
-
@port1 = AceTcpProtoSpec.new(10)
|
134
|
-
@port2 = AceTcpProtoSpec.new('www')
|
135
|
-
@port3 = AceTcpProtoSpec.new(443)
|
136
|
-
@port_max = AceTcpProtoSpec.new(65_535)
|
137
|
-
@aclop = AcePortOpLt.new(@port2)
|
138
|
-
end
|
139
|
-
|
140
|
-
it 'should be true with ANY' do
|
141
|
-
@aclop.contains?(AcePortOpAny.new).should be_true
|
142
|
-
end
|
143
|
-
|
144
|
-
it 'should be false with STRICT_ANY' do
|
145
|
-
@aclop.contains?(AcePortOpStrictAny.new).should be_true
|
146
|
-
end
|
147
|
-
|
148
|
-
it 'should be checked with EQUAL' do
|
149
|
-
@aclop.contains?(AcePortOpEq.new(@port1)).should be_true
|
150
|
-
@aclop.contains?(AcePortOpEq.new(@port2)).should be_false
|
151
|
-
@aclop.contains?(AcePortOpEq.new(@port3)).should be_false
|
152
|
-
end
|
153
|
-
|
154
|
-
it 'should be checked with NOT_EQUAL(1)' do
|
155
|
-
@aclop.contains?(AcePortOpNeq.new(@port1)).should be_false
|
156
|
-
@aclop.contains?(AcePortOpNeq.new(@port2)).should be_false
|
157
|
-
@aclop.contains?(AcePortOpNeq.new(@port3)).should be_false
|
158
|
-
end
|
159
|
-
|
160
|
-
it 'should be checked with NOT_EQUAL(2)' do
|
161
|
-
aclop = AcePortOpLt.new(@port_max)
|
162
|
-
aclop.contains?(AcePortOpNeq.new(@port_max)).should be_true
|
163
|
-
end
|
164
|
-
|
165
|
-
it 'should be checked with LOWER_THAN' do
|
166
|
-
@aclop.contains?(AcePortOpLt.new(@port1)).should be_true
|
167
|
-
@aclop.contains?(AcePortOpLt.new(@port2)).should be_true
|
168
|
-
@aclop.contains?(AcePortOpLt.new(@port3)).should be_false
|
169
|
-
end
|
170
|
-
|
171
|
-
it 'should be checked with GRATER_THAN' do
|
172
|
-
@aclop.contains?(AcePortOpGt.new(@port1)).should be_false
|
173
|
-
@aclop.contains?(AcePortOpGt.new(@port2)).should be_false
|
174
|
-
@aclop.contains?(AcePortOpGt.new(@port3)).should be_false
|
175
|
-
end
|
176
|
-
|
177
|
-
it 'should be checked with RANGE' do
|
178
|
-
port2a = AceTcpProtoSpec.new(79)
|
179
|
-
port2b = AceTcpProtoSpec.new(81)
|
180
|
-
@aclop.contains?(AcePortOpRange.new(@port1, port2a)).should be_true
|
181
|
-
@aclop.contains?(AcePortOpRange.new(@port1, @port2)).should be_false
|
182
|
-
@aclop.contains?(AcePortOpRange.new(@port2, @port3)).should be_false
|
183
|
-
@aclop.contains?(AcePortOpRange.new(port2b, @port3)).should be_false
|
184
|
-
@aclop.contains?(AcePortOpRange.new(@port1, @port3)).should be_false
|
185
|
-
end
|
186
|
-
end
|
187
|
-
end
|
188
|
-
|
189
|
-
describe 'AcePortOpGt' do
|
190
|
-
describe '#contains' do
|
191
|
-
before(:all) do
|
192
|
-
@port1 = AceTcpProtoSpec.new(10)
|
193
|
-
@port2 = AceTcpProtoSpec.new('www')
|
194
|
-
@port3 = AceTcpProtoSpec.new(443)
|
195
|
-
@port_min = AceTcpProtoSpec.new(0)
|
196
|
-
@aclop = AcePortOpGt.new(@port2)
|
197
|
-
end
|
198
|
-
|
199
|
-
it 'should be true with ANY' do
|
200
|
-
@aclop.contains?(AcePortOpAny.new).should be_true
|
201
|
-
end
|
202
|
-
|
203
|
-
it 'should be false with STRICT_ANY' do
|
204
|
-
@aclop.contains?(AcePortOpStrictAny.new).should be_true
|
205
|
-
end
|
206
|
-
|
207
|
-
it 'should be checked with EQUAL' do
|
208
|
-
@aclop.contains?(AcePortOpEq.new(@port1)).should be_false
|
209
|
-
@aclop.contains?(AcePortOpEq.new(@port2)).should be_false
|
210
|
-
@aclop.contains?(AcePortOpEq.new(@port3)).should be_true
|
211
|
-
end
|
212
|
-
|
213
|
-
it 'should be checked with NOT_EQUAL(1)' do
|
214
|
-
@aclop.contains?(AcePortOpNeq.new(@port1)).should be_false
|
215
|
-
@aclop.contains?(AcePortOpNeq.new(@port2)).should be_false
|
216
|
-
@aclop.contains?(AcePortOpNeq.new(@port3)).should be_false
|
217
|
-
end
|
218
|
-
|
219
|
-
it 'should be checked with NOT_EQUAL(2)' do
|
220
|
-
aclop = AcePortOpGt.new(@port_min)
|
221
|
-
aclop.contains?(AcePortOpNeq.new(@port_min)).should be_true
|
222
|
-
end
|
223
|
-
|
224
|
-
it 'should be checked with LOWER_THAN' do
|
225
|
-
@aclop.contains?(AcePortOpLt.new(@port1)).should be_false
|
226
|
-
@aclop.contains?(AcePortOpLt.new(@port2)).should be_false
|
227
|
-
@aclop.contains?(AcePortOpLt.new(@port3)).should be_false
|
228
|
-
end
|
229
|
-
|
230
|
-
it 'should be checked with GRATER_THAN' do
|
231
|
-
@aclop.contains?(AcePortOpGt.new(@port1)).should be_false
|
232
|
-
@aclop.contains?(AcePortOpGt.new(@port2)).should be_true
|
233
|
-
@aclop.contains?(AcePortOpGt.new(@port3)).should be_true
|
234
|
-
end
|
235
|
-
|
236
|
-
it 'should be checked with RANGE' do
|
237
|
-
port2a = AceTcpProtoSpec.new(79)
|
238
|
-
port2b = AceTcpProtoSpec.new(81)
|
239
|
-
@aclop.contains?(AcePortOpRange.new(@port1, port2a)).should be_false
|
240
|
-
@aclop.contains?(AcePortOpRange.new(@port1, @port2)).should be_false
|
241
|
-
@aclop.contains?(AcePortOpRange.new(@port2, @port3)).should be_false
|
242
|
-
@aclop.contains?(AcePortOpRange.new(port2b, @port3)).should be_true
|
243
|
-
@aclop.contains?(AcePortOpRange.new(@port1, @port3)).should be_false
|
244
|
-
end
|
245
|
-
end
|
246
|
-
end
|
247
|
-
|
248
|
-
describe 'AcePortOpRange' do
|
249
|
-
describe '#contains' do
|
250
|
-
before(:all) do
|
251
|
-
@port1 = AceTcpProtoSpec.new(10)
|
252
|
-
@port2 = AceTcpProtoSpec.new('www')
|
253
|
-
@port3 = AceTcpProtoSpec.new(443)
|
254
|
-
@port4 = AceTcpProtoSpec.new(8080)
|
255
|
-
|
256
|
-
@port2a = AceTcpProtoSpec.new(79)
|
257
|
-
@port2b = AceTcpProtoSpec.new(81)
|
258
|
-
@port3a = AceTcpProtoSpec.new(442)
|
259
|
-
@port3b = AceTcpProtoSpec.new(444)
|
260
|
-
|
261
|
-
@port_max = AceTcpProtoSpec.new(65_535)
|
262
|
-
@port_min = AceTcpProtoSpec.new(0)
|
263
|
-
|
264
|
-
@aclop = AcePortOpRange.new(@port2, @port3)
|
265
|
-
end
|
266
|
-
|
267
|
-
it 'should be true with ANY' do
|
268
|
-
@aclop.contains?(AcePortOpAny.new).should be_true
|
269
|
-
end
|
270
|
-
|
271
|
-
it 'should be false with STRICT_ANY' do
|
272
|
-
@aclop.contains?(AcePortOpStrictAny.new).should be_true
|
273
|
-
end
|
274
|
-
|
275
|
-
it 'should be checked with EQUAL' do
|
276
|
-
@aclop.contains?(AcePortOpEq.new(@port1)).should be_false
|
277
|
-
@aclop.contains?(AcePortOpEq.new(@port2)).should be_true
|
278
|
-
@aclop.contains?(AcePortOpEq.new(@port3)).should be_true
|
279
|
-
@aclop.contains?(AcePortOpEq.new(@port4)).should be_false
|
280
|
-
end
|
281
|
-
|
282
|
-
it 'should be checked with NOT_EQUAL(1)' do
|
283
|
-
@aclop.contains?(AcePortOpNeq.new(@port1)).should be_false
|
284
|
-
@aclop.contains?(AcePortOpNeq.new(@port2)).should be_false
|
285
|
-
@aclop.contains?(AcePortOpNeq.new(@port3)).should be_false
|
286
|
-
@aclop.contains?(AcePortOpNeq.new(@port4)).should be_false
|
287
|
-
end
|
288
|
-
|
289
|
-
it 'should be checked with NOT_EQUAL(2)' do
|
290
|
-
aclop = AcePortOpRange.new(@port_min, @port_max)
|
291
|
-
aclop.contains?(AcePortOpNeq.new(@port_min)).should be_true
|
292
|
-
aclop.contains?(AcePortOpNeq.new(@port_max)).should be_true
|
293
|
-
end
|
294
|
-
|
295
|
-
it 'should be checked with LOWER_THAN(1)' do
|
296
|
-
@aclop.contains?(AcePortOpLt.new(@port1)).should be_false
|
297
|
-
@aclop.contains?(AcePortOpLt.new(@port2)).should be_false
|
298
|
-
@aclop.contains?(AcePortOpLt.new(@port3)).should be_false
|
299
|
-
@aclop.contains?(AcePortOpLt.new(@port4)).should be_false
|
300
|
-
end
|
301
|
-
|
302
|
-
it 'should be checked with LOWER_THAN(2)' do
|
303
|
-
aclop = AcePortOpRange.new(@port_min, @port3)
|
304
|
-
aclop.contains?(AcePortOpLt.new(@port3a)).should be_true
|
305
|
-
aclop.contains?(AcePortOpLt.new(@port3)).should be_false
|
306
|
-
aclop.contains?(AcePortOpLt.new(@port3b)).should be_false
|
307
|
-
end
|
308
|
-
|
309
|
-
it 'should be checked with GRATER_THAN(1)' do
|
310
|
-
@aclop.contains?(AcePortOpGt.new(@port1)).should be_false
|
311
|
-
@aclop.contains?(AcePortOpGt.new(@port2)).should be_false
|
312
|
-
@aclop.contains?(AcePortOpGt.new(@port3)).should be_false
|
313
|
-
@aclop.contains?(AcePortOpGt.new(@port4)).should be_false
|
314
|
-
end
|
315
|
-
|
316
|
-
it 'should be checked with GRATER_THAN(2)' do
|
317
|
-
aclop = AcePortOpRange.new(@port2, @port_max)
|
318
|
-
aclop.contains?(AcePortOpGt.new(@port2a)).should be_false
|
319
|
-
aclop.contains?(AcePortOpGt.new(@port2)).should be_false
|
320
|
-
aclop.contains?(AcePortOpGt.new(@port2b)).should be_true
|
321
|
-
end
|
322
|
-
|
323
|
-
it 'should be checked with RANGE' do
|
324
|
-
@aclop.contains?(AcePortOpRange.new(@port1, @port2a)).should be_false
|
325
|
-
@aclop.contains?(AcePortOpRange.new(@port1, @port2)).should be_false
|
326
|
-
@aclop.contains?(AcePortOpRange.new(@port2, @port3a)).should be_true
|
327
|
-
@aclop.contains?(AcePortOpRange.new(@port2, @port3)).should be_true
|
328
|
-
@aclop.contains?(AcePortOpRange.new(@port2, @port3b)).should be_false
|
329
|
-
@aclop.contains?(AcePortOpRange.new(@port1, @port3)).should be_false
|
330
|
-
@aclop.contains?(AcePortOpRange.new(@port2, @port4)).should be_false
|
331
|
-
@aclop.contains?(AcePortOpRange.new(@port1, @port4)).should be_false
|
332
|
-
end
|
333
|
-
end
|
334
|
-
end
|
335
|
-
|
336
|
-
### Local variables:
|
337
|
-
### mode: Ruby
|
338
|
-
### coding: utf-8-unix
|
339
|
-
### indent-tabs-mode: nil
|
340
|
-
### End:
|