kronk 1.1.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/History.rdoc +14 -0
- data/README.rdoc +1 -1
- data/Rakefile +1 -0
- data/lib/kronk.rb +82 -14
- data/lib/kronk/data_set.rb +9 -2
- data/lib/kronk/diff.rb +4 -1
- data/test/test_data_set.rb +3 -3
- data/test/test_kronk.rb +247 -8
- data/test/test_response.rb +1 -1
- metadata +40 -21
data/History.rdoc
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
=== 1.1.1 / 2010-12-22
|
2
|
+
|
3
|
+
* Enhancements:
|
4
|
+
|
5
|
+
* Added diff-like brief option.
|
6
|
+
|
7
|
+
* Added support for loading alternate Kronk configs from the command line.
|
8
|
+
|
9
|
+
* Bugfixes:
|
10
|
+
|
11
|
+
* Changed uri options config to allow matching of multiple keys.
|
12
|
+
|
13
|
+
* Implementing smart merging of uri options with command line options.
|
14
|
+
|
1
15
|
=== 1.1.0 / 2010-12-12
|
2
16
|
|
3
17
|
* Enhancements:
|
data/README.rdoc
CHANGED
@@ -198,7 +198,7 @@ are supported:
|
|
198
198
|
|
199
199
|
* | effectively works as an "OR" character, matches /^val1|val2$/
|
200
200
|
|
201
|
-
*
|
201
|
+
* \= is used to match values and may be used in conjuction with a key or not.
|
202
202
|
|
203
203
|
* Parentheses are ok to use if in conjunction with other special characters
|
204
204
|
for a given path item, such as: /path(1|2)
|
data/Rakefile
CHANGED
data/lib/kronk.rb
CHANGED
@@ -3,6 +3,7 @@ require 'plist'
|
|
3
3
|
require 'json'
|
4
4
|
require 'nokogiri'
|
5
5
|
require 'cookiejar'
|
6
|
+
require 'rack'
|
6
7
|
|
7
8
|
# Support for new and old versions of ActiveSupport
|
8
9
|
begin
|
@@ -19,7 +20,7 @@ require 'yaml'
|
|
19
20
|
class Kronk
|
20
21
|
|
21
22
|
# This gem's version.
|
22
|
-
VERSION = '1.1.
|
23
|
+
VERSION = '1.1.1'
|
23
24
|
|
24
25
|
|
25
26
|
require 'kronk/data_set'
|
@@ -175,15 +176,64 @@ class Kronk
|
|
175
176
|
|
176
177
|
|
177
178
|
##
|
178
|
-
# Returns config-defined options for a given uri.
|
179
|
-
#
|
179
|
+
# Returns merged config-defined options for a given uri.
|
180
|
+
# Values in cmd_opts take precedence.
|
181
|
+
# Returns cmd_opts Hash if none found.
|
180
182
|
|
181
|
-
def self.
|
182
|
-
|
183
|
-
|
183
|
+
def self.merge_options_for_uri uri, cmd_opts={}
|
184
|
+
out_opts = Hash.new.merge cmd_opts
|
185
|
+
|
186
|
+
config[:uri_options].each do |matcher, options|
|
187
|
+
next unless (uri == matcher || uri =~ %r{#{matcher}}) && Hash === options
|
188
|
+
|
189
|
+
options.each do |key, val|
|
190
|
+
if !out_opts[key]
|
191
|
+
out_opts[key] = val
|
192
|
+
next
|
193
|
+
end
|
194
|
+
|
195
|
+
|
196
|
+
case key
|
197
|
+
|
198
|
+
# Hash or uri query String
|
199
|
+
when :data, :query
|
200
|
+
val = Rack::Utils.parse_nested_query val if String === val
|
201
|
+
|
202
|
+
out_opts[key] = Rack::Utils.parse_nested_query out_opts[key] if
|
203
|
+
String === out_opts[key]
|
204
|
+
|
205
|
+
out_opts[key] = val.merge out_opts[key], &DataSet::DEEP_MERGE
|
206
|
+
|
207
|
+
# Hashes
|
208
|
+
when :headers, :auth
|
209
|
+
out_opts[key] = val.merge out_opts[key]
|
210
|
+
|
211
|
+
# Proxy hash or String
|
212
|
+
when :proxy
|
213
|
+
if Hash === val && Hash === out_opts[key]
|
214
|
+
out_opts[key] = val.merge out_opts[key]
|
215
|
+
|
216
|
+
elsif Hash === val && String === out_opts[key]
|
217
|
+
val[:address] = out_opts[key]
|
218
|
+
out_opts[key] = val
|
219
|
+
|
220
|
+
elsif String === val && Hash === out_opts[key]
|
221
|
+
out_opts[key][:address] ||= val
|
222
|
+
end
|
223
|
+
|
224
|
+
# Response headers - Boolean, String, or Array
|
225
|
+
when :with_headers
|
226
|
+
next if out_opts[key] == true || out_opts[key] && val == true
|
227
|
+
out_opts[key] = [*out_opts[key]] | [*val]
|
228
|
+
|
229
|
+
# String or Array
|
230
|
+
when :only_data, :only_data_with, :ignore_data, :ignore_data_with
|
231
|
+
out_opts[key] = [*out_opts[key]] | [*val]
|
232
|
+
end
|
233
|
+
end
|
184
234
|
end
|
185
235
|
|
186
|
-
|
236
|
+
out_opts
|
187
237
|
end
|
188
238
|
|
189
239
|
|
@@ -218,8 +268,8 @@ class Kronk
|
|
218
268
|
|
219
269
|
def self.save_cookie_jar file=nil
|
220
270
|
file ||= config[:cookies_file]
|
221
|
-
File.open(file, "w") do |
|
222
|
-
|
271
|
+
File.open(file, "w") do |f|
|
272
|
+
f.write @cookie_jar.to_yaml
|
223
273
|
end
|
224
274
|
end
|
225
275
|
|
@@ -255,9 +305,11 @@ class Kronk
|
|
255
305
|
# :auth:: Hash - must contain :username and :password; defaults to nil
|
256
306
|
# :proxy:: Hash/String - http proxy to use; defaults to nil
|
257
307
|
# :only_data:: String/Array - extracts the data from given data paths
|
308
|
+
# :only_data_with:: String/Array - extracts the data from given parent paths
|
258
309
|
# :ignore_data:: String/Array - defines which data points to exclude
|
310
|
+
# :ignore_data_with:: String/Array - defines which parent data to exclude
|
259
311
|
# :with_headers:: Bool/String/Array - defines which headers to include
|
260
|
-
# :parser:: Object - The parser to use for the body; default nil
|
312
|
+
# :parser:: Object/String - The parser to use for the body; default nil
|
261
313
|
# :raw:: Bool - run diff on raw strings
|
262
314
|
#
|
263
315
|
# Returns a diff object.
|
@@ -275,7 +327,7 @@ class Kronk
|
|
275
327
|
# See Kronk.compare for supported options.
|
276
328
|
|
277
329
|
def self.retrieve_data_string query, options={}
|
278
|
-
options =
|
330
|
+
options = merge_options_for_uri query, options
|
279
331
|
|
280
332
|
resp = Request.retrieve query, options
|
281
333
|
|
@@ -306,7 +358,7 @@ class Kronk
|
|
306
358
|
$stderr << "\nNo config file was found.\n\n"
|
307
359
|
$stderr << "Created default config in #{DEFAULT_CONFIG_FILE}\n"
|
308
360
|
$stderr << "Edit file if necessary and try again.\n"
|
309
|
-
exit
|
361
|
+
exit 2
|
310
362
|
end
|
311
363
|
|
312
364
|
load_cookie_jar
|
@@ -325,8 +377,13 @@ class Kronk
|
|
325
377
|
|
326
378
|
if uri1 && uri2
|
327
379
|
diff = compare uri1, uri2, options
|
328
|
-
puts diff.formatted
|
329
|
-
|
380
|
+
puts "#{diff.formatted}\n" unless config[:brief]
|
381
|
+
|
382
|
+
if config[:verbose] || config[:brief]
|
383
|
+
$stdout << "Found #{diff.count} diff(s).\n"
|
384
|
+
end
|
385
|
+
|
386
|
+
exit 1 if diff.count > 0
|
330
387
|
|
331
388
|
else
|
332
389
|
out = retrieve_data_string uri1, options
|
@@ -399,6 +456,17 @@ Kronk runs diffs against data from live and cached http responses.
|
|
399
456
|
end
|
400
457
|
|
401
458
|
|
459
|
+
opt.on('--config STR', String,
|
460
|
+
'Load the given Kronk config file') do |value|
|
461
|
+
load_config value
|
462
|
+
end
|
463
|
+
|
464
|
+
|
465
|
+
opt.on('-q', '--brief', 'Output only whether URI responses differ') do
|
466
|
+
config[:brief] = true
|
467
|
+
end
|
468
|
+
|
469
|
+
|
402
470
|
opt.on('--format STR', String,
|
403
471
|
'Use a custom diff formatter') do |value|
|
404
472
|
config[:diff_format] = value
|
data/lib/kronk/data_set.rb
CHANGED
@@ -5,6 +5,13 @@ class Kronk
|
|
5
5
|
|
6
6
|
class DataSet
|
7
7
|
|
8
|
+
# Deep merge proc for recursive Hash merging.
|
9
|
+
DEEP_MERGE =
|
10
|
+
proc do |key,v1,v2|
|
11
|
+
Hash === v1 && Hash === v2 ? v1.merge(v2,&DEEP_MERGE) : v2
|
12
|
+
end
|
13
|
+
|
14
|
+
|
8
15
|
attr_accessor :data
|
9
16
|
|
10
17
|
def initialize data
|
@@ -31,9 +38,9 @@ class Kronk
|
|
31
38
|
##
|
32
39
|
# Modify the data object by passing inclusive or exclusive data paths.
|
33
40
|
# Supports the following options:
|
34
|
-
# :only_data:: String/Array - keep data
|
41
|
+
# :only_data:: String/Array - keep data that matches the paths
|
35
42
|
# :only_data_with:: String/Array - keep data with a matched child
|
36
|
-
# :ignore_data:: String/Array - remove data
|
43
|
+
# :ignore_data:: String/Array - remove data that matches the paths
|
37
44
|
# :ignore_data_with:: String/Array - remove data with a matched child
|
38
45
|
#
|
39
46
|
# Note: the data is processed in the following order:
|
data/lib/kronk/diff.rb
CHANGED
@@ -235,7 +235,10 @@ class Kronk
|
|
235
235
|
|
236
236
|
##
|
237
237
|
# Returns a formatted output as a string.
|
238
|
-
#
|
238
|
+
# Supported options are:
|
239
|
+
# :join_char:: String - The string used to join lines; default "\n"
|
240
|
+
# :show_lines:: Boolean - Insert line numbers or not; default @show_lines
|
241
|
+
# :formatter:: Object - The formatter to use; default @formatter
|
239
242
|
|
240
243
|
def formatted options={}
|
241
244
|
options = {
|
data/test/test_data_set.rb
CHANGED
@@ -47,9 +47,9 @@ class TestDataSet < Test::Unit::TestCase
|
|
47
47
|
end
|
48
48
|
|
49
49
|
|
50
|
-
def
|
51
|
-
data = @dataset_mock.modify :
|
52
|
-
assert_equal({"subs" => [
|
50
|
+
def test_modify_only_data_with
|
51
|
+
data = @dataset_mock.modify :only_data_with => "subs/1"
|
52
|
+
assert_equal({"subs" => ["a", "b"]}, data)
|
53
53
|
end
|
54
54
|
|
55
55
|
|
data/test/test_kronk.rb
CHANGED
@@ -119,17 +119,180 @@ class TestKronk < Test::Unit::TestCase
|
|
119
119
|
end
|
120
120
|
|
121
121
|
|
122
|
-
def
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
122
|
+
def test_merge_options_for_uri
|
123
|
+
with_uri_options do
|
124
|
+
assert_equal mock_uri_options['example'],
|
125
|
+
Kronk.merge_options_for_uri("http://example.com/path")
|
126
|
+
|
127
|
+
assert_equal Hash.new,
|
128
|
+
Kronk.merge_options_for_uri("http://thing.com/path")
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
|
133
|
+
def test_merge_options_for_uri_query
|
134
|
+
data = {
|
135
|
+
"add" => "this",
|
136
|
+
"foo" => {
|
137
|
+
"bar1" => "one",
|
138
|
+
"bar2" => 2,
|
139
|
+
"bar3" => "three"},
|
140
|
+
"key"=>"otherval"}
|
141
|
+
|
142
|
+
expected = {:query => data, :data => data}
|
143
|
+
|
144
|
+
with_uri_options do
|
145
|
+
new_data = {
|
146
|
+
"add" => "this",
|
147
|
+
"foo" => {'bar2' => 2, 'bar3' => "three"},
|
148
|
+
"key" => "otherval"
|
149
|
+
}
|
150
|
+
|
151
|
+
%w{uri_query hash_query}.each do |qtype|
|
152
|
+
opts = Kronk.merge_options_for_uri("http://#{qtype}.com",
|
153
|
+
:query => data, :data => data)
|
154
|
+
|
155
|
+
assert_equal expected, opts
|
156
|
+
end
|
157
|
+
|
158
|
+
opts = Kronk.merge_options_for_uri("http://uri_query.com")
|
159
|
+
assert_equal mock_uri_options['uri_query'], opts
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
|
164
|
+
def test_merge_options_for_uri_headers
|
165
|
+
with_uri_options do
|
166
|
+
opts = Kronk.merge_options_for_uri("http://headers.example.com",
|
167
|
+
:headers => {'hdr2' => 2, 'hdr3' => 3})
|
168
|
+
|
169
|
+
expected = {
|
170
|
+
:headers => {
|
171
|
+
'hdr1' => 'one',
|
172
|
+
'hdr2' => 2,
|
173
|
+
'hdr3' => 3
|
174
|
+
},
|
175
|
+
:parser => "XMLParser"
|
176
|
+
}
|
177
|
+
|
178
|
+
assert_equal expected, opts
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
|
183
|
+
def test_merge_options_for_uri_auth
|
184
|
+
with_uri_options do
|
185
|
+
opts = Kronk.merge_options_for_uri("http://auth.example.com",
|
186
|
+
:auth => {:username => "bob"})
|
187
|
+
|
188
|
+
expected = {
|
189
|
+
:auth => {
|
190
|
+
:username => "bob",
|
191
|
+
:password => "pass"
|
192
|
+
},
|
193
|
+
:parser => "XMLParser"
|
194
|
+
}
|
195
|
+
|
196
|
+
assert_equal expected, opts
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
|
201
|
+
def test_merge_options_for_uri_proxy
|
202
|
+
with_uri_options do
|
203
|
+
expected = {
|
204
|
+
:proxy => {
|
205
|
+
:address => "proxy.com",
|
206
|
+
:port => 1234,
|
207
|
+
:username => "user",
|
208
|
+
:password => "pass"
|
209
|
+
}
|
210
|
+
}
|
211
|
+
|
212
|
+
opts = Kronk.merge_options_for_uri("http://proxy.com",
|
213
|
+
:proxy => "proxy.com")
|
214
|
+
|
215
|
+
assert_equal expected, opts
|
216
|
+
|
217
|
+
opts = Kronk.merge_options_for_uri("http://proxy.com",
|
218
|
+
:proxy => {:address => "proxy.com"})
|
219
|
+
|
220
|
+
assert_equal expected, opts
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
|
225
|
+
def test_merge_options_for_uri_str_proxy
|
226
|
+
with_uri_options do
|
227
|
+
expected = {
|
228
|
+
:proxy => {
|
229
|
+
:address => "someproxy.com",
|
230
|
+
:username => "user",
|
231
|
+
:password => "pass"
|
232
|
+
}
|
233
|
+
}
|
234
|
+
|
235
|
+
opts = Kronk.merge_options_for_uri("http://strprox.com",
|
236
|
+
:proxy => {:username => "user", :password => "pass"})
|
237
|
+
|
238
|
+
assert_equal expected, opts
|
239
|
+
|
240
|
+
opts = Kronk.merge_options_for_uri("http://strprox.com",
|
241
|
+
:proxy => "proxy.com")
|
242
|
+
|
243
|
+
assert_equal "proxy.com", opts[:proxy]
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
247
|
+
|
248
|
+
def test_merge_options_for_uri_with_headers
|
249
|
+
with_uri_options do
|
250
|
+
%w{withhdrs withstrhdrs withtruehdrs}.each do |type|
|
251
|
+
opts = Kronk.merge_options_for_uri "http://#{type}.com",
|
252
|
+
:with_headers => true
|
253
|
+
|
254
|
+
assert_equal true, opts[:with_headers]
|
255
|
+
end
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
259
|
+
|
260
|
+
def test_merge_options_for_uri_with_headers_arr
|
261
|
+
with_uri_options do
|
262
|
+
%w{withhdrs withstrhdrs}.each do |type|
|
263
|
+
opts = Kronk.merge_options_for_uri "http://#{type}.com",
|
264
|
+
:with_headers => %w{hdr2 hdr3}
|
265
|
+
|
266
|
+
assert_equal %w{hdr1 hdr2 hdr3}.sort, opts[:with_headers].sort
|
267
|
+
end
|
268
|
+
|
269
|
+
opts = Kronk.merge_options_for_uri "http://withtruehdrs.com",
|
270
|
+
:with_headers => %w{hdr2 hdr3}
|
271
|
+
|
272
|
+
assert_equal %w{hdr2 hdr3}, opts[:with_headers]
|
273
|
+
end
|
274
|
+
end
|
275
|
+
|
276
|
+
|
277
|
+
def test_merge_options_for_uri_data_paths
|
278
|
+
expected = {
|
279
|
+
:only_data => %w{path1 path2 path3},
|
280
|
+
:only_data_with => %w{only1 only2},
|
281
|
+
:ignore_data => "ign1",
|
282
|
+
:ignore_data_with => %w{ign2 ign3}
|
127
283
|
}
|
128
284
|
|
129
|
-
|
130
|
-
|
285
|
+
with_uri_options do
|
286
|
+
opts = Kronk.merge_options_for_uri "http://focus_data.com",
|
287
|
+
:only_data => %w{path2 path3},
|
288
|
+
:only_data_with => "only2",
|
289
|
+
:ignore_data_with => %w{ign2 ign3}
|
131
290
|
|
132
|
-
|
291
|
+
opts[:only_data].sort!
|
292
|
+
opts[:only_data_with].sort!
|
293
|
+
|
294
|
+
assert_equal expected, opts
|
295
|
+
end
|
133
296
|
end
|
134
297
|
|
135
298
|
|
@@ -326,4 +489,80 @@ STR
|
|
326
489
|
|
327
490
|
assert_equal %w{this is --argv}, argv
|
328
491
|
end
|
492
|
+
|
493
|
+
|
494
|
+
private
|
495
|
+
|
496
|
+
def mock_uri_options
|
497
|
+
{
|
498
|
+
'example' => {
|
499
|
+
:parser => "XMLParser"
|
500
|
+
},
|
501
|
+
'example.com' => {
|
502
|
+
:parser => "PlistParser"
|
503
|
+
},
|
504
|
+
'uri_query' => {
|
505
|
+
:query => "foo[bar1]=one&foo[bar2]=two&key=val",
|
506
|
+
:data => "foo[bar1]=one&foo[bar2]=two&key=val"
|
507
|
+
},
|
508
|
+
'hash_query' => {
|
509
|
+
:query => {
|
510
|
+
'foo' => {'bar1'=>'one', 'bar2'=>'two'},
|
511
|
+
'key' => "val"
|
512
|
+
},
|
513
|
+
:data => {
|
514
|
+
'foo' => {'bar1'=>'one', 'bar2'=>'two'},
|
515
|
+
'key' => "val"
|
516
|
+
}
|
517
|
+
},
|
518
|
+
'headers' => {
|
519
|
+
:headers => {
|
520
|
+
'hdr1' => 'one',
|
521
|
+
'hdr2' => 'two'
|
522
|
+
}
|
523
|
+
},
|
524
|
+
'auth' => {
|
525
|
+
:auth => {
|
526
|
+
:username => "user",
|
527
|
+
:password => "pass"
|
528
|
+
}
|
529
|
+
},
|
530
|
+
'proxy' => {
|
531
|
+
:proxy => {
|
532
|
+
:username => "user",
|
533
|
+
:password => "pass",
|
534
|
+
:address => "someproxy.com",
|
535
|
+
:port => 1234
|
536
|
+
}
|
537
|
+
},
|
538
|
+
'strprox' => {
|
539
|
+
:proxy => "someproxy.com"
|
540
|
+
},
|
541
|
+
'withhdrs' => {
|
542
|
+
:with_headers => %w{hdr1 hdr2 hdr3}
|
543
|
+
},
|
544
|
+
'withstrhdrs' => {
|
545
|
+
:with_headers => "hdr1"
|
546
|
+
},
|
547
|
+
'withtruehdrs' => {
|
548
|
+
:with_headers => true
|
549
|
+
},
|
550
|
+
'focus_data' => {
|
551
|
+
:only_data => %w{path1 path2},
|
552
|
+
:only_data_with => "only1",
|
553
|
+
:ignore_data => "ign1"
|
554
|
+
}
|
555
|
+
}
|
556
|
+
end
|
557
|
+
|
558
|
+
|
559
|
+
def with_uri_options
|
560
|
+
old_uri_opts = Kronk.config[:uri_options].dup
|
561
|
+
Kronk.config[:uri_options] = mock_uri_options
|
562
|
+
|
563
|
+
yield if block_given?
|
564
|
+
|
565
|
+
ensure
|
566
|
+
Kronk.config[:uri_options] = old_uri_opts
|
567
|
+
end
|
329
568
|
end
|
data/test/test_response.rb
CHANGED
@@ -258,7 +258,7 @@ class TestResponse < Test::Unit::TestCase
|
|
258
258
|
end
|
259
259
|
|
260
260
|
|
261
|
-
def
|
261
|
+
def test_selective_data_multiple_ignore_data
|
262
262
|
expected = JSON.parse @json_resp.body
|
263
263
|
expected['business'].delete 'id'
|
264
264
|
expected.delete 'request_id'
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kronk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 19
|
5
4
|
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 1
|
8
7
|
- 1
|
9
|
-
-
|
10
|
-
version: 1.1.
|
8
|
+
- 1
|
9
|
+
version: 1.1.1
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Jeremie Castagna
|
@@ -15,7 +14,7 @@ autorequire:
|
|
15
14
|
bindir: bin
|
16
15
|
cert_chain: []
|
17
16
|
|
18
|
-
date: 2010-12-
|
17
|
+
date: 2010-12-22 00:00:00 -08:00
|
19
18
|
default_executable:
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
@@ -26,7 +25,6 @@ dependencies:
|
|
26
25
|
requirements:
|
27
26
|
- - ~>
|
28
27
|
- !ruby/object:Gem::Version
|
29
|
-
hash: 3
|
30
28
|
segments:
|
31
29
|
- 3
|
32
30
|
- 1
|
@@ -42,7 +40,6 @@ dependencies:
|
|
42
40
|
requirements:
|
43
41
|
- - ~>
|
44
42
|
- !ruby/object:Gem::Version
|
45
|
-
hash: 11
|
46
43
|
segments:
|
47
44
|
- 1
|
48
45
|
- 2
|
@@ -57,7 +54,6 @@ dependencies:
|
|
57
54
|
requirements:
|
58
55
|
- - ~>
|
59
56
|
- !ruby/object:Gem::Version
|
60
|
-
hash: 9
|
61
57
|
segments:
|
62
58
|
- 1
|
63
59
|
- 3
|
@@ -72,7 +68,6 @@ dependencies:
|
|
72
68
|
requirements:
|
73
69
|
- - ~>
|
74
70
|
- !ruby/object:Gem::Version
|
75
|
-
hash: 1
|
76
71
|
segments:
|
77
72
|
- 0
|
78
73
|
- 5
|
@@ -87,7 +82,6 @@ dependencies:
|
|
87
82
|
requirements:
|
88
83
|
- - ">="
|
89
84
|
- !ruby/object:Gem::Version
|
90
|
-
hash: 15
|
91
85
|
segments:
|
92
86
|
- 2
|
93
87
|
- 0
|
@@ -103,7 +97,6 @@ dependencies:
|
|
103
97
|
requirements:
|
104
98
|
- - ~>
|
105
99
|
- !ruby/object:Gem::Version
|
106
|
-
hash: 19
|
107
100
|
segments:
|
108
101
|
- 0
|
109
102
|
- 3
|
@@ -112,37 +105,64 @@ dependencies:
|
|
112
105
|
type: :runtime
|
113
106
|
version_requirements: *id006
|
114
107
|
- !ruby/object:Gem::Dependency
|
115
|
-
name:
|
108
|
+
name: rack
|
116
109
|
prerelease: false
|
117
110
|
requirement: &id007 !ruby/object:Gem::Requirement
|
118
111
|
none: false
|
119
112
|
requirements:
|
120
113
|
- - ~>
|
121
114
|
- !ruby/object:Gem::Version
|
122
|
-
|
115
|
+
segments:
|
116
|
+
- 1
|
117
|
+
- 0
|
118
|
+
version: "1.0"
|
119
|
+
type: :runtime
|
120
|
+
version_requirements: *id007
|
121
|
+
- !ruby/object:Gem::Dependency
|
122
|
+
name: rubyforge
|
123
|
+
prerelease: false
|
124
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
125
|
+
none: false
|
126
|
+
requirements:
|
127
|
+
- - ">="
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
segments:
|
130
|
+
- 2
|
131
|
+
- 0
|
132
|
+
- 4
|
133
|
+
version: 2.0.4
|
134
|
+
type: :development
|
135
|
+
version_requirements: *id008
|
136
|
+
- !ruby/object:Gem::Dependency
|
137
|
+
name: mocha
|
138
|
+
prerelease: false
|
139
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
140
|
+
none: false
|
141
|
+
requirements:
|
142
|
+
- - ~>
|
143
|
+
- !ruby/object:Gem::Version
|
123
144
|
segments:
|
124
145
|
- 0
|
125
146
|
- 9
|
126
147
|
- 10
|
127
148
|
version: 0.9.10
|
128
149
|
type: :development
|
129
|
-
version_requirements: *
|
150
|
+
version_requirements: *id009
|
130
151
|
- !ruby/object:Gem::Dependency
|
131
152
|
name: hoe
|
132
153
|
prerelease: false
|
133
|
-
requirement: &
|
154
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
134
155
|
none: false
|
135
156
|
requirements:
|
136
157
|
- - ">="
|
137
158
|
- !ruby/object:Gem::Version
|
138
|
-
hash: 47
|
139
159
|
segments:
|
140
160
|
- 2
|
141
|
-
-
|
142
|
-
-
|
143
|
-
version: 2.
|
161
|
+
- 6
|
162
|
+
- 2
|
163
|
+
version: 2.6.2
|
144
164
|
type: :development
|
145
|
-
version_requirements: *
|
165
|
+
version_requirements: *id010
|
146
166
|
description: |-
|
147
167
|
Kronk runs diffs against data from live and cached http responses.
|
148
168
|
Kronk was made possible by the sponsoring of AT&T Interactive.
|
@@ -198,7 +218,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
198
218
|
requirements:
|
199
219
|
- - ">="
|
200
220
|
- !ruby/object:Gem::Version
|
201
|
-
hash:
|
221
|
+
hash: -1939027826967097857
|
202
222
|
segments:
|
203
223
|
- 0
|
204
224
|
version: "0"
|
@@ -207,7 +227,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
207
227
|
requirements:
|
208
228
|
- - ">="
|
209
229
|
- !ruby/object:Gem::Version
|
210
|
-
hash: 3
|
211
230
|
segments:
|
212
231
|
- 0
|
213
232
|
version: "0"
|