kronk 1.6.1 → 1.6.2
Sign up to get free protection for your applications and to get access to all the features.
- data/History.rdoc +8 -0
- data/TODO.rdoc +13 -0
- data/lib/kronk.rb +15 -8
- data/lib/kronk/cmd.rb +9 -9
- data/lib/kronk/player/stream.rb +3 -1
- data/lib/kronk/player/suite.rb +1 -1
- data/lib/kronk/response.rb +50 -12
- data/lib/kronk/test/assertions.rb +2 -2
- data/test/test_cmd.rb +4 -4
- data/test/test_kronk.rb +24 -24
- data/test/test_response.rb +8 -8
- metadata +2 -2
data/History.rdoc
CHANGED
data/TODO.rdoc
CHANGED
@@ -1,5 +1,18 @@
|
|
1
1
|
= TODO
|
2
2
|
|
3
|
+
== Path
|
4
|
+
|
5
|
+
* Support move and map for path transactions.
|
6
|
+
|
7
|
+
== Player
|
8
|
+
|
9
|
+
* Read full URIs for player input but strip off the protocol and host.
|
10
|
+
|
11
|
+
* When using player and no host is given, support reading a full URI for
|
12
|
+
player input.
|
13
|
+
|
14
|
+
== Done
|
15
|
+
|
3
16
|
* Support data diffing for arrays (including data struct).
|
4
17
|
|
5
18
|
* Allow for showing diffed sections of a diff only.
|
data/lib/kronk.rb
CHANGED
@@ -14,7 +14,7 @@ require 'yaml'
|
|
14
14
|
class Kronk
|
15
15
|
|
16
16
|
# This gem's version.
|
17
|
-
VERSION = '1.6.
|
17
|
+
VERSION = '1.6.2'
|
18
18
|
|
19
19
|
require 'kronk/constants'
|
20
20
|
require 'kronk/player'
|
@@ -68,6 +68,8 @@ class Kronk
|
|
68
68
|
# Find a fully qualified ruby namespace/constant.
|
69
69
|
|
70
70
|
def self.find_const name_or_file, case_insensitive=false
|
71
|
+
return name_or_file unless String === name_or_file
|
72
|
+
|
71
73
|
if name_or_file =~ /[^:]:([^:]+)$/
|
72
74
|
req_file = $1
|
73
75
|
i = $1.length + 2
|
@@ -240,8 +242,8 @@ class Kronk
|
|
240
242
|
# :proxy:: Hash/String - http proxy to use; defaults to nil
|
241
243
|
# :only_data:: String/Array - extracts the data from given data paths
|
242
244
|
# :ignore_data:: String/Array - defines which data points to exclude
|
243
|
-
# :keep_indicies:: Boolean - indicies of modified arrays display as hashes
|
244
|
-
# :
|
245
|
+
# :keep_indicies:: Boolean - indicies of modified arrays display as hashes
|
246
|
+
# :show_headers:: Boolean/String/Array - which headers to show in output
|
245
247
|
# :parser:: Object/String - the parser to use for the body; default nil
|
246
248
|
# :raw:: Boolean - run diff on raw strings
|
247
249
|
|
@@ -266,12 +268,12 @@ class Kronk
|
|
266
268
|
|
267
269
|
t1 = Thread.new do
|
268
270
|
res1 = retrieve uri1
|
269
|
-
str1 = res1.stringify
|
271
|
+
str1 = res1.stringify
|
270
272
|
end
|
271
273
|
|
272
274
|
t2 = Thread.new do
|
273
275
|
res2 = retrieve uri2
|
274
|
-
str2 = res2.stringify
|
276
|
+
str2 = res2.stringify
|
275
277
|
end
|
276
278
|
|
277
279
|
t1.join
|
@@ -306,6 +308,9 @@ class Kronk
|
|
306
308
|
Kronk.history << uri
|
307
309
|
end
|
308
310
|
|
311
|
+
resp.parser = options[:parser] if options[:parser]
|
312
|
+
resp.stringify_opts = options
|
313
|
+
|
309
314
|
max_rdir = options[:follow_redirects]
|
310
315
|
while resp.redirect? && (max_rdir == true || max_rdir.to_s.to_i > 0)
|
311
316
|
Cmd.verbose "Following redirect..."
|
@@ -373,9 +378,11 @@ class Kronk
|
|
373
378
|
end
|
374
379
|
|
375
380
|
# Response headers - Boolean, String, or Array
|
376
|
-
when :
|
377
|
-
next if out_opts
|
378
|
-
|
381
|
+
when :show_headers
|
382
|
+
next if out_opts.has_key?(key) &&
|
383
|
+
(out_opts[key].class != Array || val == true || val == false)
|
384
|
+
out_opts[key] = (val == true || val == false) ? val :
|
385
|
+
[*out_opts[key]] | [*val]
|
379
386
|
|
380
387
|
# String or Array
|
381
388
|
when :only_data, :ignore_data
|
data/lib/kronk/cmd.rb
CHANGED
@@ -57,7 +57,7 @@ class Kronk
|
|
57
57
|
:player => {},
|
58
58
|
:proxy => {},
|
59
59
|
:uris => [],
|
60
|
-
:
|
60
|
+
:show_headers => false
|
61
61
|
}
|
62
62
|
|
63
63
|
options = parse_data_path_args options, argv
|
@@ -139,13 +139,13 @@ Parse and run diffs against data from live and cached http responses.
|
|
139
139
|
|
140
140
|
opt.on('-i', '--include [HEADER1,HEADER2]', Array,
|
141
141
|
'Include all or given headers in response') do |value|
|
142
|
-
options[:
|
142
|
+
options[:show_headers] ||= []
|
143
143
|
|
144
144
|
if value
|
145
|
-
options[:
|
146
|
-
Array === options[:
|
145
|
+
options[:show_headers].concat value if
|
146
|
+
Array === options[:show_headers]
|
147
147
|
else
|
148
|
-
options[:
|
148
|
+
options[:show_headers] = true
|
149
149
|
end
|
150
150
|
|
151
151
|
options[:no_body] = false
|
@@ -154,13 +154,13 @@ Parse and run diffs against data from live and cached http responses.
|
|
154
154
|
|
155
155
|
opt.on('-I', '--head [HEADER1,HEADER2]', Array,
|
156
156
|
'Use all or given headers only in the response') do |value|
|
157
|
-
options[:
|
157
|
+
options[:show_headers] ||= []
|
158
158
|
|
159
159
|
if value
|
160
|
-
options[:
|
161
|
-
Array === options[:
|
160
|
+
options[:show_headers].concat value if
|
161
|
+
Array === options[:show_headers]
|
162
162
|
else
|
163
|
-
options[:
|
163
|
+
options[:show_headers] = true
|
164
164
|
end
|
165
165
|
|
166
166
|
options[:no_body] = true
|
data/lib/kronk/player/stream.rb
CHANGED
data/lib/kronk/player/suite.rb
CHANGED
data/lib/kronk/response.rb
CHANGED
@@ -37,10 +37,10 @@ class Kronk
|
|
37
37
|
end
|
38
38
|
|
39
39
|
|
40
|
-
attr_accessor :body, :bytes, :byterate, :code, :headers,
|
41
|
-
:raw, :request, :uri
|
40
|
+
attr_accessor :body, :bytes, :byterate, :code, :headers,
|
41
|
+
:raw, :stringify_opts, :request, :uri
|
42
42
|
|
43
|
-
attr_reader :encoding, :time
|
43
|
+
attr_reader :encoding, :parser, :time
|
44
44
|
|
45
45
|
alias to_hash headers
|
46
46
|
alias to_s raw
|
@@ -89,6 +89,8 @@ class Kronk
|
|
89
89
|
@uri = URI.parse io.path if File === io
|
90
90
|
|
91
91
|
@byterate = 0
|
92
|
+
|
93
|
+
@stringify_opts = {}
|
92
94
|
end
|
93
95
|
|
94
96
|
|
@@ -155,14 +157,14 @@ class Kronk
|
|
155
157
|
|
156
158
|
return @parsed_body if @parsed_body && !parser
|
157
159
|
|
160
|
+
parser ||= @parser
|
161
|
+
|
158
162
|
begin
|
159
163
|
parser = Kronk.parser_for(parser) || Kronk.find_const(parser)
|
160
164
|
rescue NameError
|
161
165
|
raise InvalidParser, "No such parser: #{parser}"
|
162
166
|
end if String === parser
|
163
167
|
|
164
|
-
parser ||= @parser
|
165
|
-
|
166
168
|
raise MissingParser,
|
167
169
|
"No parser for Content-Type: #{@_res['Content-Type']}" unless parser
|
168
170
|
|
@@ -203,6 +205,16 @@ class Kronk
|
|
203
205
|
end
|
204
206
|
|
205
207
|
|
208
|
+
##
|
209
|
+
# Assign the parser.
|
210
|
+
|
211
|
+
def parser= parser
|
212
|
+
@parser = Kronk.parser_for(parser) || Kronk.find_const(parser)
|
213
|
+
rescue NameError
|
214
|
+
raise InvalidParser, "No such parser: #{parser}"
|
215
|
+
end
|
216
|
+
|
217
|
+
|
206
218
|
##
|
207
219
|
# Returns the header portion of the raw http response.
|
208
220
|
|
@@ -245,13 +257,13 @@ class Kronk
|
|
245
257
|
# Returns the raw response with selective headers and/or the body of
|
246
258
|
# the response. Supports the following options:
|
247
259
|
# :no_body:: Bool - Don't return the body; default nil
|
248
|
-
# :
|
260
|
+
# :show_headers:: Bool/String/Array - Return headers; default nil
|
249
261
|
|
250
262
|
def selective_string options={}
|
251
263
|
str = @body unless options[:no_body]
|
252
264
|
|
253
|
-
if options[:
|
254
|
-
header = raw_header(options[:
|
265
|
+
if options[:show_headers]
|
266
|
+
header = raw_header(options[:show_headers])
|
255
267
|
str = [header, str].compact.join "\r\n"
|
256
268
|
end
|
257
269
|
|
@@ -263,7 +275,7 @@ class Kronk
|
|
263
275
|
# Returns the parsed response with selective headers and/or the body of
|
264
276
|
# the response. Supports the following options:
|
265
277
|
# :no_body:: Bool - Don't return the body; default nil
|
266
|
-
# :
|
278
|
+
# :show_headers:: Bool/String/Array - Return headers; default nil
|
267
279
|
# :parser:: Object - The parser to use for the body; default nil
|
268
280
|
# :ignore_data:: String/Array - Removes the data from given data paths
|
269
281
|
# :only_data:: String/Array - Extracts the data from given data paths
|
@@ -275,8 +287,8 @@ class Kronk
|
|
275
287
|
data = parsed_body options[:parser]
|
276
288
|
end
|
277
289
|
|
278
|
-
if options[:
|
279
|
-
header_data = parsed_header(options[:
|
290
|
+
if options[:show_headers]
|
291
|
+
header_data = parsed_header(options[:show_headers])
|
280
292
|
data &&= [header_data, data]
|
281
293
|
data ||= header_data
|
282
294
|
end
|
@@ -298,9 +310,11 @@ class Kronk
|
|
298
310
|
# :ignore_data:: String/Array - defines which data points to exclude
|
299
311
|
# :raw:: Boolean - Force using the unparsed raw response
|
300
312
|
# :keep_indicies:: Boolean - indicies of modified arrays display as hashes.
|
301
|
-
# :
|
313
|
+
# :show_headers:: Boolean/String/Array - defines which headers to include
|
302
314
|
|
303
315
|
def stringify options={}
|
316
|
+
options = options.empty? ? @stringify_opts : merge_stringify_opts(options)
|
317
|
+
|
304
318
|
if !options[:raw] && (options[:parser] || @parser || options[:no_body])
|
305
319
|
data = selective_data options
|
306
320
|
Diff.ordered_data_string data, options[:struct]
|
@@ -314,6 +328,30 @@ class Kronk
|
|
314
328
|
end
|
315
329
|
|
316
330
|
|
331
|
+
def merge_stringify_opts options # :nodoc:
|
332
|
+
options = options.dup
|
333
|
+
@stringify_opts.each do |key, val|
|
334
|
+
case key
|
335
|
+
# Response headers - Boolean, String, or Array
|
336
|
+
when :show_headers
|
337
|
+
next if options.has_key?(key) &&
|
338
|
+
(options[key].class != Array || val == true || val == false)
|
339
|
+
|
340
|
+
options[key] = (val == true || val == false) ? val :
|
341
|
+
[*options[key]] | [*val]
|
342
|
+
|
343
|
+
# String or Array
|
344
|
+
when :only_data, :ignore_data
|
345
|
+
options[key] = [*options[key]] | [*val]
|
346
|
+
|
347
|
+
else
|
348
|
+
options[key] = val if options[key].nil?
|
349
|
+
end
|
350
|
+
end
|
351
|
+
options
|
352
|
+
end
|
353
|
+
|
354
|
+
|
317
355
|
##
|
318
356
|
# Check if this is a 2XX response.
|
319
357
|
|
@@ -83,8 +83,8 @@ class Kronk
|
|
83
83
|
# Supports all options of Kronk.compare.
|
84
84
|
|
85
85
|
def assert_equal_responses uri1, uri2, options={}
|
86
|
-
resp1 = Kronk.retrieve(uri1, options).stringify
|
87
|
-
resp2 = Kronk.retrieve(uri2, options).stringify
|
86
|
+
resp1 = Kronk.retrieve(uri1, options).stringify
|
87
|
+
resp2 = Kronk.retrieve(uri2, options).stringify
|
88
88
|
|
89
89
|
assert_equal resp1, resp2
|
90
90
|
end
|
data/test/test_cmd.rb
CHANGED
@@ -201,19 +201,19 @@ class TestCmd < Test::Unit::TestCase
|
|
201
201
|
|
202
202
|
def test_parse_args_http_headers
|
203
203
|
opts = Kronk::Cmd.parse_args %w{uri -i FOO -i BAR -iTWO,PART}
|
204
|
-
assert_equal %w{FOO BAR TWO PART}, opts[:
|
204
|
+
assert_equal %w{FOO BAR TWO PART}, opts[:show_headers]
|
205
205
|
assert_equal false, opts[:no_body]
|
206
206
|
|
207
207
|
opts = Kronk::Cmd.parse_args %w{uri -I}
|
208
|
-
assert_equal true, opts[:
|
208
|
+
assert_equal true, opts[:show_headers]
|
209
209
|
assert_equal true, opts[:no_body]
|
210
210
|
|
211
211
|
opts = Kronk::Cmd.parse_args %w{uri -I FOO -I BAR -ITWO,PART}
|
212
|
-
assert_equal %w{FOO BAR TWO PART}, opts[:
|
212
|
+
assert_equal %w{FOO BAR TWO PART}, opts[:show_headers]
|
213
213
|
assert_equal true, opts[:no_body]
|
214
214
|
|
215
215
|
opts = Kronk::Cmd.parse_args %w{uri -i}
|
216
|
-
assert_equal true, opts[:
|
216
|
+
assert_equal true, opts[:show_headers]
|
217
217
|
assert_equal false, opts[:no_body]
|
218
218
|
end
|
219
219
|
|
data/test/test_kronk.rb
CHANGED
@@ -313,31 +313,31 @@ class TestKronk < Test::Unit::TestCase
|
|
313
313
|
end
|
314
314
|
|
315
315
|
|
316
|
-
def
|
316
|
+
def test_options_for_uri_show_headers
|
317
317
|
with_uri_options do
|
318
318
|
%w{withhdrs withstrhdrs withtruehdrs}.each do |type|
|
319
|
-
opts = Kronk.new(:
|
319
|
+
opts = Kronk.new(:show_headers => true).
|
320
320
|
options_for_uri "http://#{type}.com"
|
321
321
|
|
322
|
-
assert_equal true, opts[:
|
322
|
+
assert_equal true, opts[:show_headers]
|
323
323
|
end
|
324
324
|
end
|
325
325
|
end
|
326
326
|
|
327
327
|
|
328
|
-
def
|
328
|
+
def test_options_for_uri_show_headers_arr
|
329
329
|
with_uri_options do
|
330
330
|
%w{withhdrs withstrhdrs}.each do |type|
|
331
|
-
opts = Kronk.new(:
|
331
|
+
opts = Kronk.new(:show_headers => %w{hdr2 hdr3}).
|
332
332
|
options_for_uri "http://#{type}.com"
|
333
333
|
|
334
|
-
assert_equal %w{hdr1 hdr2 hdr3}.sort, opts[:
|
334
|
+
assert_equal %w{hdr1 hdr2 hdr3}.sort, opts[:show_headers].sort
|
335
335
|
end
|
336
336
|
|
337
|
-
opts = Kronk.new(:
|
337
|
+
opts = Kronk.new(:show_headers => %w{hdr2 hdr3}).
|
338
338
|
options_for_uri "http://withtruehdrs.com"
|
339
339
|
|
340
|
-
assert_equal %w{hdr2 hdr3}, opts[:
|
340
|
+
assert_equal %w{hdr2 hdr3}, opts[:show_headers]
|
341
341
|
end
|
342
342
|
end
|
343
343
|
|
@@ -362,19 +362,19 @@ class TestKronk < Test::Unit::TestCase
|
|
362
362
|
def test_compare_raw
|
363
363
|
diff = Kronk.compare "test/mocks/200_response.json",
|
364
364
|
"test/mocks/200_response.xml",
|
365
|
-
:
|
365
|
+
:show_headers => true,
|
366
366
|
:raw => true
|
367
367
|
|
368
368
|
resp1 = Kronk.retrieve "test/mocks/200_response.json",
|
369
|
-
:
|
369
|
+
:show_headers => true,
|
370
370
|
:raw => true
|
371
371
|
|
372
372
|
resp2 = Kronk.retrieve "test/mocks/200_response.xml",
|
373
|
-
:
|
373
|
+
:show_headers => true,
|
374
374
|
:raw => true
|
375
375
|
|
376
|
-
exp_diff = Kronk::Diff.new resp1.selective_string(:
|
377
|
-
resp2.selective_string(:
|
376
|
+
exp_diff = Kronk::Diff.new resp1.selective_string(:show_headers => true),
|
377
|
+
resp2.selective_string(:show_headers => true),
|
378
378
|
:labels => [
|
379
379
|
"test/mocks/200_response.json",
|
380
380
|
"test/mocks/200_response.xml"
|
@@ -444,17 +444,17 @@ class TestKronk < Test::Unit::TestCase
|
|
444
444
|
def test_compare_data
|
445
445
|
diff = Kronk.compare "test/mocks/200_response.json",
|
446
446
|
"test/mocks/200_response.xml",
|
447
|
-
:
|
447
|
+
:show_headers => true
|
448
448
|
|
449
449
|
resp1 = Kronk.retrieve "test/mocks/200_response.json",
|
450
|
-
:
|
450
|
+
:show_headers => true
|
451
451
|
|
452
452
|
resp2 = Kronk.retrieve "test/mocks/200_response.xml",
|
453
|
-
:
|
453
|
+
:show_headers => true
|
454
454
|
|
455
455
|
exp_diff = Kronk::Diff.new_from_data \
|
456
|
-
resp1.selective_data(:
|
457
|
-
resp2.selective_data(:
|
456
|
+
resp1.selective_data(:show_headers => true),
|
457
|
+
resp2.selective_data(:show_headers => true),
|
458
458
|
:labels => [
|
459
459
|
"test/mocks/200_response.json",
|
460
460
|
"test/mocks/200_response.xml"
|
@@ -523,7 +523,7 @@ class TestKronk < Test::Unit::TestCase
|
|
523
523
|
|
524
524
|
|
525
525
|
def test_compare_data_inst
|
526
|
-
kronk = Kronk.new :
|
526
|
+
kronk = Kronk.new :show_headers => true
|
527
527
|
diff = kronk.compare "test/mocks/200_response.json",
|
528
528
|
"test/mocks/200_response.xml"
|
529
529
|
|
@@ -545,8 +545,8 @@ class TestKronk < Test::Unit::TestCase
|
|
545
545
|
assert_equal nil, kronk.diff
|
546
546
|
|
547
547
|
exp_diff = Kronk::Diff.new_from_data \
|
548
|
-
resp2.selective_data(:
|
549
|
-
resp1.selective_data(:
|
548
|
+
resp2.selective_data(:show_headers => true),
|
549
|
+
resp1.selective_data(:show_headers => true),
|
550
550
|
:labels => [
|
551
551
|
"test/mocks/200_response.json",
|
552
552
|
"test/mocks/200_response.xml"
|
@@ -618,13 +618,13 @@ class TestKronk < Test::Unit::TestCase
|
|
618
618
|
:proxy => "someproxy.com"
|
619
619
|
},
|
620
620
|
'withhdrs' => {
|
621
|
-
:
|
621
|
+
:show_headers => %w{hdr1 hdr2 hdr3}
|
622
622
|
},
|
623
623
|
'withstrhdrs' => {
|
624
|
-
:
|
624
|
+
:show_headers => "hdr1"
|
625
625
|
},
|
626
626
|
'withtruehdrs' => {
|
627
|
-
:
|
627
|
+
:show_headers => true
|
628
628
|
},
|
629
629
|
'focus_data' => {
|
630
630
|
:only_data => %w{path1 path2},
|
data/test/test_response.rb
CHANGED
@@ -208,7 +208,7 @@ class TestResponse < Test::Unit::TestCase
|
|
208
208
|
|
209
209
|
assert_equal "#{@json_resp.raw.split("\r\n\r\n")[0]}\r\n",
|
210
210
|
@json_resp.selective_string(:no_body => true,
|
211
|
-
:
|
211
|
+
:show_headers => true)
|
212
212
|
end
|
213
213
|
|
214
214
|
|
@@ -217,7 +217,7 @@ class TestResponse < Test::Unit::TestCase
|
|
217
217
|
|
218
218
|
expected = "Content-Type: application/json; charset=utf-8\r\n\r\n#{body}"
|
219
219
|
assert_equal expected,
|
220
|
-
@json_resp.selective_string(:
|
220
|
+
@json_resp.selective_string(:show_headers => "Content-Type")
|
221
221
|
end
|
222
222
|
|
223
223
|
|
@@ -227,12 +227,12 @@ class TestResponse < Test::Unit::TestCase
|
|
227
227
|
expected = "Date: Fri, 03 Dec 2010 21:49:00 GMT\r\nContent-Type: application/json; charset=utf-8\r\n\r\n#{body}"
|
228
228
|
assert_equal expected,
|
229
229
|
@json_resp.selective_string(
|
230
|
-
:
|
230
|
+
:show_headers => ["Content-Type", "Date"])
|
231
231
|
|
232
232
|
expected = "Date: Fri, 03 Dec 2010 21:49:00 GMT\r\nContent-Type: application/json; charset=utf-8\r\n"
|
233
233
|
assert_equal expected,
|
234
234
|
@json_resp.selective_string(:no_body => true,
|
235
|
-
:
|
235
|
+
:show_headers => ["Content-Type", "Date"])
|
236
236
|
end
|
237
237
|
|
238
238
|
|
@@ -246,7 +246,7 @@ class TestResponse < Test::Unit::TestCase
|
|
246
246
|
|
247
247
|
assert_equal "#{@json_resp.raw.split("\r\n\r\n")[0]}\r\n",
|
248
248
|
@json_resp.selective_string(:no_body => true,
|
249
|
-
:
|
249
|
+
:show_headers => true)
|
250
250
|
end
|
251
251
|
|
252
252
|
|
@@ -265,7 +265,7 @@ class TestResponse < Test::Unit::TestCase
|
|
265
265
|
[{'content-type' => 'application/json; charset=utf-8'}, body]
|
266
266
|
|
267
267
|
assert_equal expected,
|
268
|
-
@json_resp.selective_data(:
|
268
|
+
@json_resp.selective_data(:show_headers => "Content-Type")
|
269
269
|
end
|
270
270
|
|
271
271
|
|
@@ -278,7 +278,7 @@ class TestResponse < Test::Unit::TestCase
|
|
278
278
|
|
279
279
|
assert_equal expected,
|
280
280
|
@json_resp.selective_data(
|
281
|
-
:
|
281
|
+
:show_headers => ["Content-Type", "Date"])
|
282
282
|
end
|
283
283
|
|
284
284
|
|
@@ -291,7 +291,7 @@ class TestResponse < Test::Unit::TestCase
|
|
291
291
|
|
292
292
|
assert_equal expected,
|
293
293
|
@json_resp.selective_data(:no_body => true,
|
294
|
-
:
|
294
|
+
:show_headers => ["Content-Type", "Date"])
|
295
295
|
end
|
296
296
|
|
297
297
|
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: kronk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 1.6.
|
5
|
+
version: 1.6.2
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Jeremie Castagna
|
@@ -169,7 +169,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
169
169
|
requirements:
|
170
170
|
- - ">="
|
171
171
|
- !ruby/object:Gem::Version
|
172
|
-
hash:
|
172
|
+
hash: -3702389185383603132
|
173
173
|
segments:
|
174
174
|
- 0
|
175
175
|
version: "0"
|