srl_ruby 0.4.13 → 0.4.14

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.
@@ -5,208 +5,208 @@ require_relative '../lib/srl_ruby'
5
5
 
6
6
  describe SrlRuby do
7
7
  context 'Parsing character ranges:' do
8
- it "should parse 'letter from ... to ...' syntax" do
9
- regexp = SrlRuby.parse('letter from a to f')
8
+ it "parses 'letter from ... to ...' syntax" do
9
+ regexp = described_class.parse('letter from a to f')
10
10
  expect(regexp.source).to eq('[a-f]')
11
11
  end
12
12
 
13
- it "should parse 'uppercase letter from ... to ...' syntax" do
14
- regexp = SrlRuby.parse('UPPERCASE letter from A to F')
13
+ it "parses 'uppercase letter from ... to ...' syntax" do
14
+ regexp = described_class.parse('UPPERCASE letter from A to F')
15
15
  expect(regexp.source).to eq('[A-F]')
16
16
  end
17
17
 
18
- it "should parse 'letter' syntax" do
19
- regexp = SrlRuby.parse('letter')
18
+ it "parses 'letter' syntax" do
19
+ regexp = described_class.parse('letter')
20
20
  expect(regexp.source).to eq('[a-z]')
21
21
  end
22
22
 
23
- it "should parse 'uppercase letter' syntax" do
24
- regexp = SrlRuby.parse('uppercase letter')
23
+ it "parses 'uppercase letter' syntax" do
24
+ regexp = described_class.parse('uppercase letter')
25
25
  expect(regexp.source).to eq('[A-Z]')
26
26
  end
27
27
 
28
- it "should parse 'digit from ... to ...' syntax" do
29
- regexp = SrlRuby.parse('digit from 1 to 4')
28
+ it "parses 'digit from ... to ...' syntax" do
29
+ regexp = described_class.parse('digit from 1 to 4')
30
30
  expect(regexp.source).to eq('[1-4]')
31
31
  end
32
32
  end # context
33
33
 
34
34
  context 'Parsing string literals:' do
35
- it 'should parse double quotes literal string' do
36
- regexp = SrlRuby.parse('literally "hello"')
35
+ it 'parses double quotes literal string' do
36
+ regexp = described_class.parse('literally "hello"')
37
37
  expect(regexp.source).to eq('hello')
38
38
  end
39
39
 
40
- it 'should parse single quotes literal string' do
41
- regexp = SrlRuby.parse("literally 'hello'")
40
+ it 'parses single quotes literal string' do
41
+ regexp = described_class.parse("literally 'hello'")
42
42
  expect(regexp.source).to eq('hello')
43
43
  end
44
44
 
45
- it 'should escape special characters' do
46
- regexp = SrlRuby.parse("literally '.'")
45
+ it 'Escapes special characters' do
46
+ regexp = described_class.parse("literally '.'")
47
47
  expect(regexp.source).to eq('\.')
48
48
  end
49
49
 
50
- it 'should parse single quotes literal string' do
51
- regexp = SrlRuby.parse('literally "an", whitespace, raw "[a-zA-Z]"')
50
+ it 'parses single quotes literal string' do
51
+ regexp = described_class.parse('literally "an", whitespace, raw "[a-zA-Z]"')
52
52
  expect(regexp.source).to eq('an\s[a-zA-Z]')
53
53
  end
54
54
  end # context
55
55
 
56
56
  context 'Parsing character classes:' do
57
- it "should parse 'digit' syntax" do
58
- regexp = SrlRuby.parse('digit')
57
+ it "parses 'digit' syntax" do
58
+ regexp = described_class.parse('digit')
59
59
  expect(regexp.source).to eq('\d')
60
60
  end
61
61
 
62
- it "should parse 'number' syntax" do
63
- regexp = SrlRuby.parse('number')
62
+ it "parses 'number' syntax" do
63
+ regexp = described_class.parse('number')
64
64
  expect(regexp.source).to eq('\d')
65
65
  end
66
66
 
67
- it "should parse 'no digit' syntax" do
68
- regexp = SrlRuby.parse('no digit')
67
+ it "parses 'no digit' syntax" do
68
+ regexp = described_class.parse('no digit')
69
69
  expect(regexp.source).to eq('\D')
70
70
  end
71
71
 
72
- it "should parse 'any character' syntax" do
73
- regexp = SrlRuby.parse('any character')
72
+ it "parses 'any character' syntax" do
73
+ regexp = described_class.parse('any character')
74
74
  expect(regexp.source).to eq('\w')
75
75
  end
76
76
 
77
- it "should parse 'no character' syntax" do
78
- regexp = SrlRuby.parse('no character')
77
+ it "parses 'no character' syntax" do
78
+ regexp = described_class.parse('no character')
79
79
  expect(regexp.source).to eq('\W')
80
80
  end
81
81
 
82
- it "should parse 'whitespace' syntax" do
83
- regexp = SrlRuby.parse('whitespace')
82
+ it "parses 'whitespace' syntax" do
83
+ regexp = described_class.parse('whitespace')
84
84
  expect(regexp.source).to eq('\s')
85
85
  end
86
86
 
87
- it "should parse 'no whitespace' syntax" do
88
- regexp = SrlRuby.parse('no whitespace')
87
+ it "parses 'no whitespace' syntax" do
88
+ regexp = described_class.parse('no whitespace')
89
89
  expect(regexp.source).to eq('\S')
90
90
  end
91
91
 
92
- it "should parse 'anything' syntax" do
93
- regexp = SrlRuby.parse('anything')
92
+ it "parses 'anything' syntax" do
93
+ regexp = described_class.parse('anything')
94
94
  expect(regexp.source).to eq('.')
95
95
  end
96
96
 
97
- it "should parse 'one of' syntax" do
98
- regexp = SrlRuby.parse('one of "._%+-"')
97
+ it "parses 'one of' syntax" do
98
+ regexp = described_class.parse('one of "._%+-"')
99
99
  # Remark: reference implementation less readable
100
100
  # (escapes more characters than required)
101
101
  expect(regexp.source).to eq('[._%+\-]')
102
102
  end
103
103
 
104
- it "should parse 'one of' with unquoted character class syntax" do
104
+ it "parses 'one of' with unquoted character class syntax" do
105
105
  # Case of digit sequence
106
- regexp = SrlRuby.parse('one of 13579, must end')
106
+ regexp = described_class.parse('one of 13579, must end')
107
107
  expect(regexp.source).to eq('[13579]$')
108
108
 
109
109
  # Case of identifier-like character class
110
- regexp = SrlRuby.parse('one of abcd, must end')
110
+ regexp = described_class.parse('one of abcd, must end')
111
111
  expect(regexp.source).to eq('[abcd]$')
112
112
 
113
113
  # Case of arbitrary character class
114
- regexp = SrlRuby.parse('one of 12hms:, must end')
114
+ regexp = described_class.parse('one of 12hms:, must end')
115
115
  expect(regexp.source).to eq('[12hms:]$')
116
116
  end
117
117
 
118
- it "should parse 'none of' syntax" do
119
- regexp = SrlRuby.parse('none of "._%+-"')
118
+ it "parses 'none of' syntax" do
119
+ regexp = described_class.parse('none of "._%+-"')
120
120
  # Remark: reference implementation less readable
121
121
  # (escapes more characters than required)
122
122
  expect(regexp.source).to eq('[^._%+\-]')
123
123
  end
124
124
 
125
- it "should parse 'none of' with unquoted character class syntax" do
125
+ it "parses 'none of' with unquoted character class syntax" do
126
126
  # Case of digit sequence
127
- regexp = SrlRuby.parse('none of 13579, must end')
127
+ regexp = described_class.parse('none of 13579, must end')
128
128
  expect(regexp.source).to eq('[^13579]$')
129
129
 
130
130
  # Case of identifier-like character class
131
- regexp = SrlRuby.parse('none of abcd, must end')
131
+ regexp = described_class.parse('none of abcd, must end')
132
132
  expect(regexp.source).to eq('[^abcd]$')
133
133
 
134
134
  # Case of arbitrary character class
135
- regexp = SrlRuby.parse('none of 12hms:^, must end')
135
+ regexp = described_class.parse('none of 12hms:^, must end')
136
136
  expect(regexp.source).to eq('[^12hms:\^]$')
137
137
  end
138
138
  end # context
139
139
 
140
140
  context 'Parsing special character declarations:' do
141
- it "should parse 'tab' syntax" do
142
- regexp = SrlRuby.parse('tab')
141
+ it "parses 'tab' syntax" do
142
+ regexp = described_class.parse('tab')
143
143
  expect(regexp.source).to eq('\t')
144
144
  end
145
145
 
146
- it "should parse 'vertical tab' syntax" do
147
- regexp = SrlRuby.parse('vertical tab')
146
+ it "parses 'vertical tab' syntax" do
147
+ regexp = described_class.parse('vertical tab')
148
148
  expect(regexp.source).to eq('\v')
149
149
  end
150
150
 
151
- it "should parse 'backslash' syntax" do
152
- regexp = SrlRuby.parse('backslash')
151
+ it "parses 'backslash' syntax" do
152
+ regexp = described_class.parse('backslash')
153
153
  expect(regexp.source).to eq('\\\\')
154
154
  end
155
155
 
156
- it "should parse 'new line' syntax" do
157
- regexp = SrlRuby.parse('new line')
156
+ it "parses 'new line' syntax" do
157
+ regexp = described_class.parse('new line')
158
158
  expect(regexp.source).to eq('\n')
159
159
  end
160
160
 
161
- it "should parse 'carriage return' syntax" do
162
- regexp = SrlRuby.parse('carriage return')
161
+ it "parses 'carriage return' syntax" do
162
+ regexp = described_class.parse('carriage return')
163
163
  expect(regexp.source).to eq('\r')
164
164
  end
165
165
 
166
- it "should parse 'word' syntax" do
167
- regexp = SrlRuby.parse('word, literally "is"')
166
+ it "parses 'word' syntax" do
167
+ regexp = described_class.parse('word, literally "is"')
168
168
  expect(regexp.source).to eq('\bis')
169
169
  end
170
170
 
171
- it "should parse 'no word' syntax" do
172
- regexp = SrlRuby.parse('no word, literally "is"')
171
+ it "parses 'no word' syntax" do
172
+ regexp = described_class.parse('no word, literally "is"')
173
173
  expect(regexp.source).to eq('\Bis')
174
174
  end
175
175
  end # context
176
176
 
177
177
  context 'Parsing alternations:' do
178
- it "should parse 'any of' syntax" do
178
+ it "parses 'any of' syntax" do
179
179
  source = 'any of (any character, one of "._%-+")'
180
- regexp = SrlRuby.parse(source)
180
+ regexp = described_class.parse(source)
181
181
  expect(regexp.source).to eq('(?:\w|[._%\-+])')
182
182
  end
183
183
 
184
- it "should parse 'either of' syntax" do
184
+ it "parses 'either of' syntax" do
185
185
  source = 'either of (any character, one of "._%-+")'
186
- regexp = SrlRuby.parse(source)
186
+ regexp = described_class.parse(source)
187
187
  expect(regexp.source).to eq('(?:\w|[._%\-+])')
188
188
  end
189
189
 
190
- it 'should anchor as alternative' do
191
- regexp = SrlRuby.parse('any of (literally "?", must end)')
190
+ it 'Anchors as alternative' do
191
+ regexp = described_class.parse('any of (literally "?", must end)')
192
192
  expect(regexp.source).to eq('(?:\\?|$)')
193
193
  end
194
194
  end # context
195
195
 
196
196
  context 'Parsing concatenation:' do
197
- it 'should reject dangling comma' do
197
+ it 'Rejects dangling comma' do
198
198
  source = 'literally "a",'
199
199
  err = StandardError
200
200
  msg_pattern = /Premature end of input after ',' at position line 1, column 14/
201
- expect { SrlRuby.parse(source) }.to raise_error(err, msg_pattern)
201
+ expect { described_class.parse(source) }.to raise_error(err, msg_pattern)
202
202
  end
203
203
 
204
- it 'should parse concatenation' do
205
- regexp = SrlRuby.parse('any of (literally "sample", (digit once or more))')
204
+ it 'parses concatenation' do
205
+ regexp = described_class.parse('any of (literally "sample", (digit once or more))')
206
206
  expect(regexp.source).to eq('(?:sample|(?:\d+))')
207
207
  end
208
208
 
209
- it 'should parse a long sequence of patterns' do
209
+ it 'parses a long sequence of patterns' do
210
210
  source = <<-SRL
211
211
  any of (any character, one of "._%-+") once or more,
212
212
  literally "@",
@@ -215,7 +215,7 @@ describe SrlRuby do
215
215
  letter at least 2 times
216
216
  SRL
217
217
 
218
- regexp = SrlRuby.parse(source)
218
+ regexp = described_class.parse(source)
219
219
  # SRL: (?:\w|[\._%\-\+])+(?:@)(?:[0-9]|[a-z]|[\.\-])+(?:\.)[a-z]{2,}
220
220
  expectation = '(?:\w|[._%\-+])+@(?:\d|[a-z]|[.\-])+\.[a-z]{2,}'
221
221
  expect(regexp.source).to eq(expectation)
@@ -225,182 +225,182 @@ SRL
225
225
  context 'Parsing quantifiers:' do
226
226
  let(:prefix) { 'letter from p to t ' }
227
227
 
228
- it "should parse 'once' syntax" do
229
- regexp = SrlRuby.parse("#{prefix}once")
228
+ it "parses 'once' syntax" do
229
+ regexp = described_class.parse("#{prefix}once")
230
230
  expect(regexp.source).to eq('[p-t]{1}')
231
231
  end
232
232
 
233
- it "should parse 'twice' syntax" do
234
- regexp = SrlRuby.parse('digit twice')
233
+ it "parses 'twice' syntax" do
234
+ regexp = described_class.parse('digit twice')
235
235
  expect(regexp.source).to eq('\d{2}')
236
236
  end
237
237
 
238
- it "should parse 'optional' syntax" do
239
- regexp = SrlRuby.parse('anything optional')
238
+ it "parses 'optional' syntax" do
239
+ regexp = described_class.parse('anything optional')
240
240
  expect(regexp.source).to eq('.?')
241
241
  end
242
242
 
243
- it "should parse 'exactly ... times' syntax" do
244
- regexp = SrlRuby.parse('letter from a to f exactly 4 times')
243
+ it "parses 'exactly ... times' syntax" do
244
+ regexp = described_class.parse('letter from a to f exactly 4 times')
245
245
  expect(regexp.source).to eq('[a-f]{4}')
246
246
  end
247
247
 
248
- it "should parse 'between ... and ... times' syntax" do
249
- regexp = SrlRuby.parse("#{prefix}between 2 and 4 times")
248
+ it "parses 'between ... and ... times' syntax" do
249
+ regexp = described_class.parse("#{prefix}between 2 and 4 times")
250
250
  expect(regexp.source).to eq('[p-t]{2,4}')
251
251
 
252
252
  # Dropping 'times' keyword is a shorter alternative syntax
253
- regexp = SrlRuby.parse("#{prefix}between 2 and 4")
253
+ regexp = described_class.parse("#{prefix}between 2 and 4")
254
254
  expect(regexp.source).to eq('[p-t]{2,4}')
255
255
  end
256
256
 
257
- it "should parse 'once or more' syntax" do
258
- regexp = SrlRuby.parse("#{prefix}once or more")
257
+ it "parses 'once or more' syntax" do
258
+ regexp = described_class.parse("#{prefix}once or more")
259
259
  expect(regexp.source).to eq('[p-t]+')
260
260
  end
261
261
 
262
- it "should parse 'never or more' syntax" do
263
- regexp = SrlRuby.parse("#{prefix}never or more")
262
+ it "parses 'never or more' syntax" do
263
+ regexp = described_class.parse("#{prefix}never or more")
264
264
  expect(regexp.source).to eq('[p-t]*')
265
265
  end
266
266
 
267
- it "should parse 'at least ... times' syntax" do
268
- regexp = SrlRuby.parse("#{prefix}at least 10 times")
267
+ it "parses 'at least ... times' syntax" do
268
+ regexp = described_class.parse("#{prefix}at least 10 times")
269
269
  expect(regexp.source).to eq('[p-t]{10,}')
270
270
  end
271
271
  end # context
272
272
 
273
273
  context 'Parsing lookaround:' do
274
- it 'should parse positive lookahead' do
275
- regexp = SrlRuby.parse('letter if followed by (anything once or more, digit)')
274
+ it 'parses positive lookahead' do
275
+ regexp = described_class.parse('letter if followed by (anything once or more, digit)')
276
276
  expect(regexp.source).to eq('[a-z](?=(?:.+\d))')
277
277
  end
278
278
 
279
- it 'should parse negative lookahead' do
280
- regexp = SrlRuby.parse('letter if not followed by (anything once or more, digit)')
279
+ it 'parses negative lookahead' do
280
+ regexp = described_class.parse('letter if not followed by (anything once or more, digit)')
281
281
  expect(regexp.source).to eq('[a-z](?!(?:.+\d))')
282
282
  end
283
283
 
284
- it 'should parse positive lookbehind' do
285
- regexp = SrlRuby.parse('literally "bar" if already had literally "foo"')
284
+ it 'parses positive lookbehind' do
285
+ regexp = described_class.parse('literally "bar" if already had literally "foo"')
286
286
  expect(regexp.source).to eq('(?<=foo)bar')
287
287
  end
288
288
 
289
- it 'should parse negative lookbehind' do
290
- regexp = SrlRuby.parse('literally "bar" if not already had literally "foo"')
289
+ it 'parses negative lookbehind' do
290
+ regexp = described_class.parse('literally "bar" if not already had literally "foo"')
291
291
  expect(regexp.source).to eq('(?<!foo)bar')
292
292
  end
293
293
  end # context
294
294
 
295
295
  context 'Parsing capturing group:' do
296
- it 'should parse simple anonymous capturing group' do
297
- regexp = SrlRuby.parse('capture(literally "sample")')
296
+ it 'parses simple anonymous capturing group' do
297
+ regexp = described_class.parse('capture(literally "sample")')
298
298
  expect(regexp.source).to eq('(sample)')
299
299
  end
300
300
 
301
- it 'should parse complex anonymous capturing group' do
301
+ it 'parses complex anonymous capturing group' do
302
302
  source = 'capture(any of (literally "sample", (digit once or more)))'
303
- regexp = SrlRuby.parse(source)
303
+ regexp = described_class.parse(source)
304
304
  expect(regexp.source).to eq('((?:sample|(?:\d+)))')
305
305
  end
306
306
 
307
- it 'should parse simple anonymous until capturing group' do
308
- regexp = SrlRuby.parse('capture anything once or more until literally "!"')
307
+ it 'parses simple anonymous until capturing group' do
308
+ regexp = described_class.parse('capture anything once or more until literally "!"')
309
309
  expect(regexp.source).to eq('(.+?)!')
310
310
  end
311
311
 
312
- it 'should parse unquoted named capturing group' do
312
+ it 'parses unquoted named capturing group' do
313
313
  source = 'capture (anything once or more) as first, must end'
314
- regexp = SrlRuby.parse(source)
314
+ regexp = described_class.parse(source)
315
315
  expect(regexp.source).to eq('(?<first>.+)$')
316
316
  end
317
317
 
318
- it 'should parse complex named capturing group' do
318
+ it 'parses complex named capturing group' do
319
319
  source = <<-SRL
320
320
  capture(any of (literally "sample", (digit once or more)))
321
321
  as "foo"
322
322
  SRL
323
- regexp = SrlRuby.parse(source)
323
+ regexp = described_class.parse(source)
324
324
  expect(regexp.source).to eq('(?<foo>(?:sample|(?:\d+)))')
325
325
  end
326
326
 
327
- it 'should parse a sequence with named capturing groups' do
327
+ it 'parses a sequence with named capturing groups' do
328
328
  source = <<-SRL
329
329
  capture (anything once or more) as "first",
330
330
  literally " - ",
331
331
  capture literally "second part" as "second"
332
332
  SRL
333
- regexp = SrlRuby.parse(source)
333
+ regexp = described_class.parse(source)
334
334
  expect(regexp.source).to eq('(?<first>.+) - (?<second>second part)')
335
335
  end
336
336
 
337
- it 'should parse complex named until capturing group' do
337
+ it 'parses complex named until capturing group' do
338
338
  source = 'capture (anything once or more) as "foo" until literally "m"'
339
- regexp = SrlRuby.parse(source)
339
+ regexp = described_class.parse(source)
340
340
  expect(regexp.source).to eq('(?<foo>.+?)m')
341
341
  end
342
342
  end # context
343
343
 
344
344
  context 'Parsing anchors:' do
345
- it 'should parse begin anchors' do
346
- regexp = SrlRuby.parse('starts with literally "match"')
345
+ it 'parses begin anchors' do
346
+ regexp = described_class.parse('starts with literally "match"')
347
347
  expect(regexp.source).to eq('^match')
348
348
  expect(regexp.to_s).to eq('(?-mix:^match)')
349
349
  end
350
350
 
351
- it 'should parse begin anchors (alternative syntax)' do
352
- regexp = SrlRuby.parse('begin with literally "match"')
351
+ it 'parses begin anchors (alternative syntax)' do
352
+ regexp = described_class.parse('begin with literally "match"')
353
353
  expect(regexp.source).to eq('^match')
354
354
  end
355
355
 
356
- it 'should parse end anchors' do
357
- regexp = SrlRuby.parse('literally "match" must end')
356
+ it 'parses end anchors' do
357
+ regexp = described_class.parse('literally "match" must end')
358
358
  expect(regexp.source).to eq('match$')
359
359
  end
360
360
 
361
- it 'should parse combination of begin and end anchors' do
362
- regexp = SrlRuby.parse('starts with literally "match" must end')
361
+ it 'parses combination of begin and end anchors' do
362
+ regexp = described_class.parse('starts with literally "match" must end')
363
363
  expect(regexp.source).to eq('^match$')
364
364
  end
365
365
 
366
- it 'should accept anchor with a sequence of patterns' do
366
+ it 'Accepts anchor with a sequence of patterns' do
367
367
  source = <<-SRL
368
368
  begin with any of (digit, letter, one of ".-") once or more,
369
369
  literally ".",
370
370
  letter at least 2 times must end
371
371
  SRL
372
372
 
373
- regexp = SrlRuby.parse(source)
373
+ regexp = described_class.parse(source)
374
374
  # SRL: (?:\w|[\._%\-\+])+(?:@)(?:[0-9]|[a-z]|[\.\-])+(?:\.)[a-z]{2,}
375
375
  expect(regexp.source).to eq('^(?:\d|[a-z]|[.\-])+\.[a-z]{2,}$')
376
376
  end
377
377
  end # context
378
378
 
379
379
  context 'Parsing flags' do
380
- it "should parse 'case insensitive'" do
381
- regexp = SrlRuby.parse('starts with literally "hello", case insensitive')
380
+ it "parses 'case insensitive'" do
381
+ regexp = described_class.parse('starts with literally "hello", case insensitive')
382
382
  expect(regexp.source).to eq('^hello')
383
383
  expect(regexp.to_s).to eq('(?i-mx:^hello)')
384
384
  end
385
385
 
386
- it "should parse 'multi line'" do
387
- regexp = SrlRuby.parse('starts with literally "hello", multi line')
386
+ it "parses 'multi line'" do
387
+ regexp = described_class.parse('starts with literally "hello", multi line')
388
388
  expect(regexp.source).to eq('^hello')
389
389
  expect(regexp.to_s).to eq('(?m-ix:^hello)')
390
390
  end
391
391
 
392
- it 'should parse combined flags' do
392
+ it 'parses combined flags' do
393
393
  source = <<-SRL
394
394
  starts with literally "hello",
395
395
  multi line,
396
396
  case insensitive
397
397
  SRL
398
- regexp = SrlRuby.parse(source)
398
+ regexp = described_class.parse(source)
399
399
  expect(regexp.source).to eq('^hello')
400
400
  expect(regexp.to_s).to eq('(?mi-x:^hello)')
401
401
  end
402
402
 
403
- it "should parse 'all lazy' flag" do
403
+ it "parses 'all lazy' flag" do
404
404
  source = <<-SRL
405
405
  begin with any of (digit, letter, one of ".-") once or more,
406
406
  literally ".",
@@ -409,7 +409,7 @@ SRL
409
409
  all lazy
410
410
  SRL
411
411
 
412
- regexp = SrlRuby.parse(source)
412
+ regexp = described_class.parse(source)
413
413
  expect(regexp.source).to eq('^(?:\d|[a-z]|[.\-])+?\.[a-z]{2,}?$')
414
414
  end
415
415
  end # context
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: srl_ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.13
4
+ version: 0.4.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dimitri Geshef