kronk 1.8.0 → 1.8.1

Sign up to get free protection for your applications and to get access to all the features.
data/History.rdoc CHANGED
@@ -1,4 +1,18 @@
1
- === 1.8.0 / 2011-12
1
+ === 1.8.1 / 2012-02-07
2
+
3
+ * Enhancements:
4
+
5
+ * Support max number of history items.
6
+
7
+ * Support --form option to set form-encoded content type.
8
+
9
+ * Support file uploads.
10
+
11
+ * Bugfixes:
12
+
13
+ * Don't override Cookies set via the -H option.
14
+
15
+ === 1.8.0 / 2012-01-05
2
16
 
3
17
  * Major Enhancements:
4
18
 
data/TODO.rdoc CHANGED
@@ -16,6 +16,12 @@
16
16
 
17
17
  == Done
18
18
 
19
+ * Support --form option and set Content-Type to application/x-www-form-urlencoded
20
+
21
+ * Support file/IO uploads
22
+
23
+ * Only record a limited number of history items.
24
+
19
25
  * GNU-Plot support.
20
26
 
21
27
  * Parsed cookie diffing.
data/bin/kronk CHANGED
@@ -2,5 +2,5 @@
2
2
 
3
3
  $: << File.join(File.dirname(__FILE__), "../lib") if $0 == "bin/kronk"
4
4
 
5
- require 'kronk'
5
+ require 'kronk/cmd'
6
6
  Kronk::Cmd.run
data/lib/kronk.rb CHANGED
@@ -1,21 +1,18 @@
1
- require 'rubygems'
1
+ require 'rubygems' if RUBY_VERSION =~ /1.8/
2
2
 
3
3
  require 'json'
4
4
  require 'cookiejar'
5
5
 
6
6
  require 'thread'
7
7
  require 'stringio'
8
- require 'base64'
9
8
 
10
- require 'net/https'
11
- require 'zlib'
12
- require 'optparse'
9
+ require 'net/http'
13
10
  require 'yaml'
14
11
 
15
12
  class Kronk
16
13
 
17
14
  # This gem's version.
18
- VERSION = '1.8.0'
15
+ VERSION = '1.8.1'
19
16
 
20
17
  require 'kronk/constants'
21
18
  require 'kronk/queue_runner'
@@ -26,7 +23,6 @@ class Kronk
26
23
  require 'kronk/player/tsv'
27
24
  require 'kronk/player/request_parser'
28
25
  require 'kronk/player/input_reader'
29
- require 'kronk/cmd'
30
26
  require 'kronk/path'
31
27
  require 'kronk/path/match'
32
28
  require 'kronk/path/matcher'
@@ -225,7 +221,7 @@ class Kronk
225
221
  # Writes the URL history to the history file.
226
222
 
227
223
  def self.save_history
228
- history_str = self.history.uniq.join($/)
224
+ history_str = self.history.uniq[0..self.config[:max_history]].join($/)
229
225
 
230
226
  File.open self.config[:history_file], "w" do |file|
231
227
  file.write history_str
@@ -342,7 +338,10 @@ class Kronk
342
338
  req = Request.new uri, options
343
339
  Cmd.verbose "Retrieving URL: #{req.uri}\n"
344
340
  resp = req.retrieve options
345
- Kronk.history << uri
341
+
342
+ hist_uri = req.uri.to_s[0..-req.uri.request_uri.length]
343
+ hist_uri = hist_uri[(req.uri.scheme.length + 3)..-1]
344
+ Kronk.history << hist_uri
346
345
  end
347
346
 
348
347
  resp.parser = options[:parser] if options[:parser]
data/lib/kronk/cmd.rb CHANGED
@@ -1,3 +1,6 @@
1
+ require 'kronk'
2
+ require 'optparse'
3
+
1
4
  class Kronk
2
5
 
3
6
  ##
@@ -185,6 +188,12 @@ Parse and run diffs against data from live and cached http responses.
185
188
  end
186
189
 
187
190
 
191
+ opt.on('-h', '--help', 'Print this help screen') do
192
+ puts opt
193
+ exit
194
+ end
195
+
196
+
188
197
  opt.on('-i', '--include [HEADER1,HEADER2]', Array,
189
198
  'Include all or given headers in response') do |value|
190
199
  options[:show_headers] ||= []
@@ -283,6 +292,12 @@ Parse and run diffs against data from live and cached http responses.
283
292
  end
284
293
 
285
294
 
295
+ opt.on('-v', '--version', 'Output Kronk version and exit') do
296
+ puts Kronk::VERSION
297
+ exit
298
+ end
299
+
300
+
286
301
  opt.separator <<-STR
287
302
 
288
303
  Player Options:
@@ -363,6 +378,12 @@ Parse and run diffs against data from live and cached http responses.
363
378
  end
364
379
 
365
380
 
381
+ opt.on('-F', '--form STR', String,
382
+ 'Set request body with form headers; overrides -d') do |value|
383
+ options[:form] = value
384
+ end
385
+
386
+
366
387
  opt.on('-H', '--header STR', String,
367
388
  'Header to pass to the server request') do |value|
368
389
  options[:headers] ||= {}
@@ -372,12 +393,6 @@ Parse and run diffs against data from live and cached http responses.
372
393
  end
373
394
 
374
395
 
375
- opt.on('-A', '--user-agent STR', String,
376
- 'User-Agent to send to server or a valid alias') do |value|
377
- options[:user_agent] = value
378
- end
379
-
380
-
381
396
  opt.on('-L', '--location [NUM]', Integer,
382
397
  'Follow the location header always or num times') do |value|
383
398
  options[:follow_redirects] = value || true
@@ -396,12 +411,27 @@ Parse and run diffs against data from live and cached http responses.
396
411
  end
397
412
 
398
413
 
414
+ opt.on('-U', '--proxy-user STR', String,
415
+ 'Set proxy user and/or password: usr[:pass]') do |value|
416
+ options[:proxy][:username], options[:proxy][:password] =
417
+ value.split ":", 2
418
+
419
+ options[:proxy][:password] ||= query_password "Proxy password:"
420
+ end
421
+
422
+
399
423
  opt.on('-?', '--query STR', String,
400
424
  'Append query to URLs') do |value|
401
425
  options[:query] = value
402
426
  end
403
427
 
404
428
 
429
+ opt.on('-X', '--request STR', String,
430
+ 'The HTTP request method to use') do |value|
431
+ options[:http_method] = value
432
+ end
433
+
434
+
405
435
  opt.on('--suff STR', String,
406
436
  'Add common path items to the end of each URL') do |value|
407
437
  options[:uri_suffix] = value
@@ -414,12 +444,10 @@ Parse and run diffs against data from live and cached http responses.
414
444
  end
415
445
 
416
446
 
417
- opt.on('-U', '--proxy-user STR', String,
418
- 'Set proxy user and/or password: usr[:pass]') do |value|
419
- options[:proxy][:username], options[:proxy][:password] =
420
- value.split ":", 2
421
-
422
- options[:proxy][:password] ||= query_password "Proxy password:"
447
+ opt.on('-T', '--upload-file FILE', String,
448
+ 'Transfer file in HTTP body') do |file|
449
+ options[:data] = File.open(file, 'rb')
450
+ options[:http_method] ||= 'POST'
423
451
  end
424
452
 
425
453
 
@@ -432,9 +460,9 @@ Parse and run diffs against data from live and cached http responses.
432
460
  end
433
461
 
434
462
 
435
- opt.on('-X', '--request STR', String,
436
- 'The HTTP request method to use') do |value|
437
- options[:http_method] = value
463
+ opt.on('-A', '--user-agent STR', String,
464
+ 'User-Agent to send to server or a valid alias') do |value|
465
+ options[:user_agent] = value
438
466
  end
439
467
 
440
468
 
@@ -88,6 +88,7 @@ class Kronk
88
88
  :diff_format => 'ascii',
89
89
  :history_file => DEFAULT_HISTORY_FILE,
90
90
  :indentation => 1,
91
+ :max_history => 100,
91
92
  :requires => [],
92
93
  :show_lines => false,
93
94
  :uri_options => {},
data/lib/kronk/request.rb CHANGED
@@ -199,14 +199,15 @@ class Kronk
199
199
  end
200
200
 
201
201
 
202
- attr_accessor :body, :headers, :proxy, :response, :timeout
202
+ attr_accessor :headers, :proxy, :response, :timeout
203
203
 
204
- attr_reader :http_method, :uri, :use_cookies
204
+ attr_reader :body, :http_method, :uri, :use_cookies
205
205
 
206
206
  ##
207
207
  # Build an http request to the given uri and return a Response instance.
208
208
  # Supports the following options:
209
- # :data:: Hash/String - the data to pass to the http request
209
+ # :data:: Hash/String - the data to pass to the http request body
210
+ # :form:: Hash/String - similar to :data but sets content-type header
210
211
  # :query:: Hash/String - the data to append to the http request path
211
212
  # :user_agent:: String - user agent string or alias; defaults to 'kronk'
212
213
  # :auth:: Hash - must contain :username and :password; defaults to nil
@@ -221,12 +222,10 @@ class Kronk
221
222
  def initialize uri, opts={}
222
223
  @auth = opts[:auth]
223
224
 
224
- @body = nil
225
- @body = self.class.build_query opts[:data] if opts[:data]
226
-
227
225
  @connection = nil
228
- @response = nil
229
- @_req = nil
226
+ @response = nil
227
+ @body = nil
228
+ @_req = nil
230
229
 
231
230
  @headers = opts[:headers] || {}
232
231
 
@@ -243,6 +242,9 @@ class Kronk
243
242
  @proxy = opts[:proxy] || {}
244
243
  @proxy = {:host => @proxy} unless Hash === @proxy
245
244
 
245
+ self.body = opts[:data] if opts[:data]
246
+ self.form_data = opts[:form] if opts[:form]
247
+
246
248
  self.user_agent ||= opts[:user_agent]
247
249
 
248
250
  self.http_method = opts[:http_method] || (@body ? "POST" : "GET")
@@ -259,6 +261,7 @@ class Kronk
259
261
  @auth ||= Hash.new
260
262
 
261
263
  if !@auth[:username] && @headers['Authorization']
264
+ require 'base64'
262
265
  str = Base64.decode64 @headers['Authorization'].split[1]
263
266
  username, password = str.split(":", 2)
264
267
  @auth = {:username => username, :password => password}.merge @auth
@@ -268,6 +271,30 @@ class Kronk
268
271
  end
269
272
 
270
273
 
274
+ ##
275
+ # Assign request body. Supports String, Hash, and IO.
276
+
277
+ def body= data
278
+ case data
279
+ when Hash
280
+ self.form_data = data
281
+
282
+ when String
283
+ dont_chunk!
284
+ @body = data
285
+
286
+ else
287
+ if data.respond_to?(:read)
288
+ @headers['Transfer-Encoding'] = 'chunked'
289
+ @body = data
290
+ else
291
+ dont_chunk!
292
+ @body = data.to_s
293
+ end
294
+ end
295
+ end
296
+
297
+
271
298
  ##
272
299
  # Reference to the HTTP connection instance.
273
300
 
@@ -277,7 +304,11 @@ class Kronk
277
304
 
278
305
  @connection = http_class.new @uri.host, @uri.port
279
306
  @connection.open_timeout = @connection.read_timeout = @timeout if @timeout
280
- @connection.use_ssl = true if @uri.scheme =~ /^https$/
307
+
308
+ if @uri.scheme =~ /^https$/
309
+ require 'net/https'
310
+ @connection.use_ssl = true
311
+ end
281
312
 
282
313
  @connection
283
314
  end
@@ -291,6 +322,16 @@ class Kronk
291
322
  end
292
323
 
293
324
 
325
+ ##
326
+ # Assigns body of the request with form headers.
327
+
328
+ def form_data= data
329
+ dont_chunk!
330
+ @headers['Content-Type'] = "application/x-www-form-urlencoded"
331
+ @body = self.class.build_query data
332
+ end
333
+
334
+
294
335
  ##
295
336
  # Assigns the http method.
296
337
 
@@ -307,7 +348,7 @@ class Kronk
307
348
  cookie = Kronk.cookie_jar.get_cookie_header @uri.to_s
308
349
  @headers['Cookie'] = cookie unless cookie.empty?
309
350
 
310
- else
351
+ elsif !bool
311
352
  @headers.delete 'Cookie'
312
353
  end
313
354
 
@@ -365,7 +406,7 @@ class Kronk
365
406
 
366
407
  @response = connection.start do |http|
367
408
  start_time = Time.now
368
- res = http.request http_request, @body, opts, &block
409
+ res = http.request http_request, nil, opts, &block
369
410
  res.body # make sure to read the full body from io
370
411
  res.time = Time.now - start_time
371
412
  res.request = self
@@ -442,7 +483,7 @@ class Kronk
442
483
 
443
484
 
444
485
  ##
445
- # Returns the HTTP request object.
486
+ # Returns the Net::HTTPRequest subclass instance.
446
487
 
447
488
  def http_request
448
489
  req = VanillaRequest.new @http_method, @uri.request_uri, @headers
@@ -450,6 +491,8 @@ class Kronk
450
491
  req.basic_auth @auth[:username], @auth[:password] if
451
492
  @auth && @auth[:username]
452
493
 
494
+ @body.respond_to?(:read) ? req.body_stream = @body : req.body = @body
495
+
453
496
  req
454
497
  end
455
498
 
@@ -473,6 +516,13 @@ class Kronk
473
516
  Kronk::HTTP::Proxy host, port, user, pass
474
517
  end
475
518
 
519
+ private
520
+
521
+
522
+ def dont_chunk!
523
+ @headers.delete('Transfer-Encoding') if
524
+ @headers['Transfer-Encoding'].to_s.downcase == 'chunked'
525
+ end
476
526
 
477
527
 
478
528
  ##
@@ -122,6 +122,8 @@ class Kronk
122
122
 
123
123
  raise IOError, 'Socket closed.' if @io.closed?
124
124
 
125
+ require 'zlib' if gzip? || deflated?
126
+
125
127
  error = false
126
128
  last_pos = 0
127
129
 
@@ -4,15 +4,23 @@ export COMP_WORDBREAKS=${COMP_WORDBREAKS/\:/}
4
4
 
5
5
  _kronk()
6
6
  {
7
- local cur kronk_keys
7
+ local cur kronk_keys kronk_words
8
8
 
9
9
  cur="${COMP_WORDS[COMP_CWORD]}"
10
10
 
11
11
  kronk_keys="$HOME/.kronk/history"
12
12
  test -f "$kronk_keys" || kronk_keys="$HOME/.kronk_history"
13
13
 
14
+ kronk_words="$(cat $kronk_keys | sed 's/^http*:\/\///')"
15
+
16
+ if [[ ${cur:0:1} == "h" ]]; then
17
+ kronk_words="$(echo "$kronk_words" | sed 's/^/http:\/\//')
18
+ $(echo "$kronk_words" | sed 's/^/https:\/\//')
19
+ $(echo "$kronk_words")"
20
+ fi
21
+
14
22
  if [ -f "$kronk_keys" ]; then
15
- COMPREPLY=( $(compgen -W "$(cat $kronk_keys $old_kronk_keys)" -- ${cur}) )
23
+ COMPREPLY=( $(compgen -W "$kronk_words" -- ${cur}) )
16
24
  return 0
17
25
  fi
18
26
 
data/test/test_cmd.rb CHANGED
@@ -352,14 +352,15 @@ class TestCmd < Test::Unit::TestCase
352
352
 
353
353
  def test_parse_args_http_options
354
354
  opts = Kronk::Cmd.parse_args %w{uri -A foo -L --no-cookies -? bar
355
- --suff /tail -X PUT -x example.com:2000}
356
-
357
- assert_equal "foo", opts[:user_agent]
358
- assert_equal true, opts[:follow_redirects]
359
- assert_equal true, opts[:no_cookies]
360
- assert_equal "bar", opts[:query]
361
- assert_equal "/tail", opts[:uri_suffix]
362
- assert_equal "PUT", opts[:http_method]
355
+ --suff /tail -X PUT -x example.com:2000 --form foo=bar}
356
+
357
+ assert_equal "foo", opts[:user_agent]
358
+ assert_equal true, opts[:follow_redirects]
359
+ assert_equal true, opts[:no_cookies]
360
+ assert_equal "bar", opts[:query]
361
+ assert_equal "/tail", opts[:uri_suffix]
362
+ assert_equal "PUT", opts[:http_method]
363
+ assert_equal "foo=bar", opts[:form]
363
364
  assert_equal({:host => "example.com", :port => "2000"}, opts[:proxy])
364
365
 
365
366
  opts = Kronk::Cmd.parse_args %w{uri -L 3}
data/test/test_helper.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require "test/unit"
2
2
  require "mocha"
3
- require "kronk"
3
+ require "kronk/cmd"
4
4
 
5
5
  Kronk.config[:context] = nil
6
6
 
@@ -176,6 +176,7 @@ def expect_request req_method, url, options={}
176
176
  headers['User-Agent'] ||= Kronk::DEFAULT_USER_AGENT
177
177
 
178
178
  req.expects(:start).yields(http).returns resp
179
+ req.expects(:body=).with(data)
179
180
 
180
181
  Kronk::Request::VanillaRequest.expects(:new).
181
182
  with(req_method.to_s.upcase, uri.request_uri, headers).returns req
@@ -183,7 +184,7 @@ def expect_request req_method, url, options={}
183
184
  Kronk::HTTP.expects(:new).with(uri.host, uri.port).returns req
184
185
 
185
186
  http.expects(:request).
186
- with(req, data, has_entry(:request => instance_of(Kronk::Request))).
187
+ with(req, nil, has_entry(:request => instance_of(Kronk::Request))).
187
188
  returns resp
188
189
 
189
190
  yield http, req, resp if block_given?
@@ -10,8 +10,10 @@ class TestHelperMethods < Test::Unit::TestCase
10
10
  @mock_resp = Kronk::Response.new io
11
11
  @mock_resp2 = Kronk::Response.new \
12
12
  StringIO.new mock_resp("200_response.json")
13
- @mock_req = stub("mock_req", :retrieve => @mock_resp, :uri => "host.com")
14
- @mock_req2 = stub("mock_req", :retrieve => @mock_resp2, :uri => "host.com")
13
+ @mock_req = stub("mock_req", :retrieve => @mock_resp,
14
+ :uri => URI.parse("http://host.com"))
15
+ @mock_req2 = stub("mock_req", :retrieve => @mock_resp2,
16
+ :uri => URI.parse("http://host.com"))
15
17
 
16
18
  @mock_thread = stub("mock_thread", :join => true,
17
19
  :abort_on_exception= => true)
@@ -140,7 +142,8 @@ class TestHelperMethods < Test::Unit::TestCase
140
142
 
141
143
  def test_retrieve_unparsable
142
144
  mock_resp = Kronk::Response.new StringIO.new(mock_200_response)
143
- mock_req = stub("mock_req", :retrieve => mock_resp, :uri => "host.com")
145
+ mock_req = stub("mock_req", :retrieve => mock_resp,
146
+ :uri => URI.parse("http://host.com"))
144
147
 
145
148
  Kronk::Request.expects(:new).
146
149
  with("host.com", :foo => "bar").returns mock_req
data/test/test_kronk.rb CHANGED
@@ -16,9 +16,10 @@ class TestKronk < Test::Unit::TestCase
16
16
  :cache_file => Kronk::DEFAULT_CACHE_FILE,
17
17
  :cookies_file => Kronk::DEFAULT_COOKIES_FILE,
18
18
  :history_file => Kronk::DEFAULT_HISTORY_FILE,
19
- :indentation => 1,
19
+ :indentation => 1,
20
20
  :default_host => "http://localhost:3000",
21
21
  :diff_format => 'ascii',
22
+ :max_history => 100,
22
23
  :show_lines => false,
23
24
  :use_cookies => true,
24
25
  :requires => [],
@@ -43,6 +44,7 @@ class TestKronk < Test::Unit::TestCase
43
44
  :cookies_file => Kronk::DEFAULT_COOKIES_FILE,
44
45
  :history_file => Kronk::DEFAULT_HISTORY_FILE,
45
46
  :indentation => 1,
47
+ :max_history => 100,
46
48
  :show_lines => false,
47
49
  :use_cookies => true,
48
50
  :requires => [],
@@ -78,6 +80,7 @@ class TestKronk < Test::Unit::TestCase
78
80
  :cookies_file => Kronk::DEFAULT_COOKIES_FILE,
79
81
  :history_file => Kronk::DEFAULT_HISTORY_FILE,
80
82
  :indentation => 1,
83
+ :max_history => 100,
81
84
  :requires => [],
82
85
  :show_lines => false,
83
86
  :use_cookies => true,
data/test/test_player.rb CHANGED
@@ -522,11 +522,11 @@ class TestPlayer < Test::Unit::TestCase
522
522
  end
523
523
 
524
524
  req.each_with_index do |r, i|
525
- mock_req = "mock request"
526
525
  mock_res = Kronk::Response.new resp[i]
526
+ mock_req = stub("mock_req", :retrieve => mock_res,
527
+ :uri => URI.parse("http://host.com"))
528
+
527
529
  Kronk::Request.stubs(:new).with(req[i], opts).returns mock_req
528
- mock_req.stubs(:retrieve).returns mock_res
529
- mock_req.stubs(:uri).returns nil
530
530
  end
531
531
  end
532
532
  end
data/test/test_request.rb CHANGED
@@ -140,6 +140,51 @@ class TestRequest < Test::Unit::TestCase
140
140
  end
141
141
 
142
142
 
143
+ def test_body_hash
144
+ req = Kronk::Request.new "foo.com"
145
+ req.headers['Transfer-Encoding'] = "chunked"
146
+ req.body = {:foo => :bar}
147
+
148
+ assert_equal "foo=bar", req.body
149
+ assert_equal nil, req.headers['Transfer-Encoding']
150
+ assert_equal "application/x-www-form-urlencoded",
151
+ req.headers['Content-Type']
152
+ end
153
+
154
+
155
+ def test_body_string
156
+ req = Kronk::Request.new "foo.com", :form => "blah"
157
+ req.headers['Transfer-Encoding'] = "chunked"
158
+ req.body = "foo=bar"
159
+
160
+ assert_equal "foo=bar", req.body
161
+ assert_equal nil, req.headers['Transfer-Encoding']
162
+ assert_equal "application/x-www-form-urlencoded",
163
+ req.headers['Content-Type']
164
+ end
165
+
166
+
167
+ def test_body_io
168
+ req = Kronk::Request.new "foo.com"
169
+ req.body = str_io = StringIO.new "foo=bar"
170
+
171
+ assert_equal str_io, req.body
172
+ assert_equal 'chunked', req.headers['Transfer-Encoding']
173
+ assert_equal nil, req.headers['Content-Type']
174
+ end
175
+
176
+
177
+ def test_body_other
178
+ req = Kronk::Request.new "foo.com"
179
+ req.headers['Transfer-Encoding'] = "chunked"
180
+ req.body = 12345
181
+
182
+ assert_equal "12345", req.body
183
+ assert_equal nil, req.headers['Transfer-Encoding']
184
+ assert_equal nil, req.headers['Content-Type']
185
+ end
186
+
187
+
143
188
  def test_retrieve_get
144
189
  expect_request "GET", "http://example.com/request/path?foo=bar"
145
190
  resp =
@@ -329,6 +374,26 @@ class TestRequest < Test::Unit::TestCase
329
374
  end
330
375
 
331
376
 
377
+ def test_form_option
378
+ req = Kronk::Request.new("http://example.com", :data => "foo",
379
+ :form => "bar")
380
+
381
+ assert_equal "bar", req.body
382
+ assert_equal "application/x-www-form-urlencoded",
383
+ req.headers['Content-Type']
384
+ end
385
+
386
+
387
+ def test_form_data
388
+ req = Kronk::Request.new("http://example.com", :data => "foo",
389
+ :form => "bar")
390
+
391
+ assert_equal "bar", req.body
392
+ assert_equal "application/x-www-form-urlencoded",
393
+ req.headers['Content-Type']
394
+ end
395
+
396
+
332
397
  def test_retrieve_user_agent_default
333
398
  expect_request "GET", "http://example.com",
334
399
  :headers => {
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kronk
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.0
4
+ version: 1.8.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-01-05 00:00:00.000000000 Z
12
+ date: 2012-02-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
16
- requirement: &70357826961820 !ruby/object:Gem::Requirement
16
+ requirement: &70313458309720 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '1.5'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70357826961820
24
+ version_requirements: *70313458309720
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: cookiejar
27
- requirement: &70357826961200 !ruby/object:Gem::Requirement
27
+ requirement: &70313459885080 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 0.3.0
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70357826961200
35
+ version_requirements: *70313459885080
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: plist
38
- requirement: &70357826960660 !ruby/object:Gem::Requirement
38
+ requirement: &70313459883680 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 3.1.0
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70357826960660
46
+ version_requirements: *70313459883680
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: nokogiri
49
- requirement: &70357826960080 !ruby/object:Gem::Requirement
49
+ requirement: &70313459881520 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '1.4'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70357826960080
57
+ version_requirements: *70313459881520
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: mocha
60
- requirement: &70357826959520 !ruby/object:Gem::Requirement
60
+ requirement: &70313459880540 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 0.9.12
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70357826959520
68
+ version_requirements: *70313459880540
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: hoe
71
- requirement: &70357826958980 !ruby/object:Gem::Requirement
71
+ requirement: &70313459878740 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,7 +76,7 @@ dependencies:
76
76
  version: '2.12'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70357826958980
79
+ version_requirements: *70313459878740
80
80
  description: ! 'Kronk runs diffs against data from live and cached http responses.
81
81
 
82
82
  Kronk was made possible by the sponsoring of AT&T Interactive.'