webmock 2.0.3 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +10 -0
  3. data/Gemfile +2 -7
  4. data/README.md +54 -53
  5. data/Rakefile +1 -1
  6. data/lib/webmock/callback_registry.rb +1 -1
  7. data/lib/webmock/http_lib_adapters/curb_adapter.rb +68 -6
  8. data/lib/webmock/http_lib_adapters/em_http_request_adapter.rb +4 -4
  9. data/lib/webmock/http_lib_adapters/excon_adapter.rb +9 -9
  10. data/lib/webmock/http_lib_adapters/http_rb/request.rb +2 -2
  11. data/lib/webmock/http_lib_adapters/http_rb/response.rb +5 -5
  12. data/lib/webmock/http_lib_adapters/http_rb/webmock.rb +3 -3
  13. data/lib/webmock/http_lib_adapters/httpclient_adapter.rb +5 -5
  14. data/lib/webmock/http_lib_adapters/manticore_adapter.rb +7 -7
  15. data/lib/webmock/http_lib_adapters/net_http.rb +3 -3
  16. data/lib/webmock/http_lib_adapters/patron_adapter.rb +4 -4
  17. data/lib/webmock/http_lib_adapters/typhoeus_hydra_adapter.rb +14 -14
  18. data/lib/webmock/matchers/hash_including_matcher.rb +1 -1
  19. data/lib/webmock/rack_response.rb +3 -3
  20. data/lib/webmock/request_pattern.rb +8 -8
  21. data/lib/webmock/request_stub.rb +5 -5
  22. data/lib/webmock/util/uri.rb +2 -2
  23. data/lib/webmock/version.rb +1 -1
  24. data/minitest/webmock_spec.rb +3 -3
  25. data/spec/acceptance/curb/curb_spec.rb +64 -47
  26. data/spec/acceptance/curb/curb_spec_helper.rb +4 -4
  27. data/spec/acceptance/em_http_request/em_http_request_spec.rb +32 -32
  28. data/spec/acceptance/em_http_request/em_http_request_spec_helper.rb +9 -9
  29. data/spec/acceptance/excon/excon_spec.rb +14 -14
  30. data/spec/acceptance/excon/excon_spec_helper.rb +6 -6
  31. data/spec/acceptance/http_rb/http_rb_spec.rb +1 -1
  32. data/spec/acceptance/http_rb/http_rb_spec_helper.rb +7 -7
  33. data/spec/acceptance/httpclient/httpclient_spec.rb +20 -20
  34. data/spec/acceptance/httpclient/httpclient_spec_helper.rb +5 -5
  35. data/spec/acceptance/manticore/manticore_spec.rb +11 -11
  36. data/spec/acceptance/manticore/manticore_spec_helper.rb +3 -3
  37. data/spec/acceptance/net_http/net_http_shared.rb +4 -4
  38. data/spec/acceptance/net_http/net_http_spec.rb +25 -25
  39. data/spec/acceptance/net_http/net_http_spec_helper.rb +4 -4
  40. data/spec/acceptance/net_http/real_net_http_spec.rb +1 -1
  41. data/spec/acceptance/patron/patron_spec.rb +10 -10
  42. data/spec/acceptance/patron/patron_spec_helper.rb +5 -5
  43. data/spec/acceptance/shared/allowing_and_disabling_net_connect.rb +36 -36
  44. data/spec/acceptance/shared/callbacks.rb +11 -11
  45. data/spec/acceptance/shared/complex_cross_concern_behaviors.rb +5 -5
  46. data/spec/acceptance/shared/enabling_and_disabling_webmock.rb +4 -4
  47. data/spec/acceptance/shared/precedence_of_stubs.rb +4 -4
  48. data/spec/acceptance/shared/request_expectations.rb +90 -90
  49. data/spec/acceptance/shared/returning_declared_responses.rb +49 -49
  50. data/spec/acceptance/shared/stubbing_requests.rb +78 -78
  51. data/spec/acceptance/typhoeus/typhoeus_hydra_spec.rb +11 -11
  52. data/spec/acceptance/typhoeus/typhoeus_hydra_spec_helper.rb +8 -8
  53. data/spec/spec_helper.rb +6 -3
  54. data/spec/support/webmock_server.rb +1 -1
  55. data/spec/unit/api_spec.rb +2 -2
  56. data/spec/unit/errors_spec.rb +3 -3
  57. data/spec/unit/matchers/hash_including_matcher_spec.rb +16 -16
  58. data/spec/unit/rack_response_spec.rb +2 -2
  59. data/spec/unit/request_body_diff_spec.rb +1 -1
  60. data/spec/unit/request_execution_verifier_spec.rb +1 -1
  61. data/spec/unit/request_pattern_spec.rb +115 -115
  62. data/spec/unit/request_signature_snippet_spec.rb +2 -2
  63. data/spec/unit/request_signature_spec.rb +16 -16
  64. data/spec/unit/request_stub_spec.rb +20 -20
  65. data/spec/unit/response_spec.rb +28 -28
  66. data/spec/unit/stub_registry_spec.rb +10 -10
  67. data/spec/unit/stub_request_snippet_spec.rb +6 -6
  68. data/spec/unit/util/hash_keys_stringifier_spec.rb +4 -4
  69. data/spec/unit/util/query_mapper_spec.rb +2 -2
  70. data/spec/unit/util/uri_spec.rb +1 -1
  71. data/test/http_request.rb +3 -3
  72. data/test/shared_test.rb +6 -6
  73. data/webmock.gemspec +4 -2
  74. metadata +32 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 20d5a309586539a993335a28d74d8fc43495ec27
4
- data.tar.gz: abfbec11bc296d461282f8698d18171b02a6c752
3
+ metadata.gz: e5ecaf79b30d292fbfa32412eb165fc1c2202e3c
4
+ data.tar.gz: 14f612738af09ebfd6ec02688da87e748d2886e3
5
5
  SHA512:
6
- metadata.gz: a76bd8f96fd204ec2cae1784cfedafebe96b261010d15531518bbbd81ebe2ddae765652c5c72a0f0d8cc7f9b423f4936751a4d738d0115417de116f819a45e93
7
- data.tar.gz: 3d1fc2113f0225f774e16406bb1fcd9ce1ee1067b26c8209737a761c7bb91737f083f721629e8ef37f8779653773ac879eec31155e05bfbde50bdf2a7b63374f
6
+ metadata.gz: 8784b972e18a3906ea6ce8a359bcdc9ea88fbc386753791770ef21d550b985dbcbe60e5758ccd330b840d49ef9b126b41389ac8b6a32062478ffb6a215817142
7
+ data.tar.gz: 0f35a48a6a7e3705a35b6ab546e45805dfb268448f959cbf4b99ebf0f9d65e1d05c7f96a8b13cdb6c83c8909bac0fd2f6eb82ecfa833c8b3d5d20ca1f1bacd69
@@ -1,5 +1,15 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.1.0
4
+
5
+ * Added support for `on_debug` callback in Curb.
6
+
7
+ Thanks to [Pavel Jurašek](https://github.com/pavel-jurasek-bcgdv-com)
8
+
9
+ * Added support for PATCH requests using Curb.
10
+
11
+ Thanks to [Pavel Jurašek](https://github.com/pavel-jurasek-bcgdv-com)
12
+
3
13
  ## 2.0.3
4
14
 
5
15
  * Handling headers passed as an Array to Curl::Easy
data/Gemfile CHANGED
@@ -2,13 +2,8 @@ source 'http://rubygems.org/'
2
2
 
3
3
  gemspec
4
4
 
5
- group :development do
6
- gem 'rake'
7
- end
8
-
9
- group :test do
10
- gem 'minitest_tu_shim', '1.3.2'
11
- end
5
+ gem 'rake'
6
+ gem 'curb', github: 'pavel-jurasek-bcgdv-com/curb', platforms: :ruby
12
7
 
13
8
  platforms :jruby do
14
9
  gem 'jruby-openssl'
data/README.md CHANGED
@@ -116,7 +116,7 @@ Net::HTTP.get("www.example.com", "/") # ===> Success
116
116
 
117
117
  ```ruby
118
118
  stub_request(:post, "www.example.com").
119
- with(:body => "abc", :headers => { 'Content-Length' => 3 })
119
+ with(body: "abc", headers: { 'Content-Length' => 3 })
120
120
 
121
121
  uri = URI.parse("http://www.example.com/")
122
122
  req = Net::HTTP::Post.new(uri.path)
@@ -131,8 +131,8 @@ end # ===> Success
131
131
 
132
132
  ```ruby
133
133
  stub_request(:post, "www.example.com").
134
- with(:body => /^.*world$/, :headers => {"Content-Type" => /image\/.+/}).
135
- to_return(:body => "abc")
134
+ with(body: /^.*world$/, headers: {"Content-Type" => /image\/.+/}).
135
+ to_return(body: "abc")
136
136
 
137
137
  uri = URI.parse('http://www.example.com/')
138
138
  req = Net::HTTP::Post.new(uri.path)
@@ -147,23 +147,23 @@ end # ===> Success
147
147
 
148
148
  ```ruby
149
149
  stub_request(:post, "www.example.com").
150
- with(:body => {:data => {:a => '1', :b => 'five'}})
150
+ with(body: {data: {a: '1', b: 'five'}})
151
151
 
152
152
  RestClient.post('www.example.com', "data[a]=1&data[b]=five",
153
- :content_type => 'application/x-www-form-urlencoded') # ===> Success
153
+ content_type: 'application/x-www-form-urlencoded') # ===> Success
154
154
 
155
155
  RestClient.post('www.example.com', '{"data":{"a":"1","b":"five"}}',
156
- :content_type => 'application/json') # ===> Success
156
+ content_type: 'application/json') # ===> Success
157
157
 
158
158
  RestClient.post('www.example.com', '<data a="1" b="five" />',
159
- :content_type => 'application/xml') # ===> Success
159
+ content_type: 'application/xml') # ===> Success
160
160
  ```
161
161
 
162
162
  ### Matching request body against partial hash.
163
163
 
164
164
  ```ruby
165
165
  stub_request(:post, "www.example.com").
166
- with(:body => hash_including({:data => {:a => '1', :b => 'five'}}))
166
+ with(body: hash_including({data: {a: '1', b: 'five'}}))
167
167
 
168
168
  RestClient.post('www.example.com', "data[a]=1&data[b]=five&x=1",
169
169
  :content_type => 'application/x-www-form-urlencoded') # ===> Success
@@ -173,7 +173,7 @@ RestClient.post('www.example.com', "data[a]=1&data[b]=five&x=1",
173
173
 
174
174
  ```ruby
175
175
  stub_request(:any, "www.example.com").
176
- with(:headers=>{ 'Header-Name' => 'Header-Value' })
176
+ with(headers:{ 'Header-Name' => 'Header-Value' })
177
177
 
178
178
  uri = URI.parse('http://www.example.com/')
179
179
  req = Net::HTTP::Post.new(uri.path)
@@ -188,7 +188,7 @@ end # ===> Success
188
188
 
189
189
  ```ruby
190
190
  stub_request(:get, 'www.example.com').
191
- with(:headers => {'Accept' => ['image/jpeg', 'image/png'] })
191
+ with(headers: {'Accept' => ['image/jpeg', 'image/png'] })
192
192
 
193
193
  req = Net::HTTP::Get.new("/")
194
194
  req['Accept'] = ['image/png']
@@ -259,7 +259,7 @@ Net::HTTP.get('www.example.com',
259
259
  ### Matching query params using hash
260
260
 
261
261
  ```ruby
262
- stub_request(:get, "www.example.com").with(:query => {"a" => ["b", "c"]})
262
+ stub_request(:get, "www.example.com").with(query: {"a" => ["b", "c"]})
263
263
 
264
264
  RestClient.get("http://www.example.com/?a[]=b&a[]=c") # ===> Success
265
265
  ```
@@ -268,7 +268,7 @@ RestClient.get("http://www.example.com/?a[]=b&a[]=c") # ===> Success
268
268
 
269
269
  ```ruby
270
270
  stub_request(:get, "www.example.com").
271
- with(:query => hash_including({"a" => ["b", "c"]}))
271
+ with(query: hash_including({"a" => ["b", "c"]}))
272
272
 
273
273
  RestClient.get("http://www.example.com/?a[]=b&a[]=c&x=1") # ===> Success
274
274
  ```
@@ -277,8 +277,8 @@ RestClient.get("http://www.example.com/?a[]=b&a[]=c&x=1") # ===> Success
277
277
 
278
278
  ```ruby
279
279
  stub_request(:any, "www.example.com").
280
- to_return(:body => "abc", :status => 200,
281
- :headers => { 'Content-Length' => 3 })
280
+ to_return(body: "abc", status: 200,
281
+ headers: { 'Content-Length' => 3 })
282
282
 
283
283
  Net::HTTP.get("www.example.com", '/') # ===> "abc"
284
284
  ```
@@ -289,7 +289,7 @@ Net::HTTP.get("www.example.com", '/') # ===> "abc"
289
289
  File.open('/tmp/response_body.txt', 'w') { |f| f.puts 'abc' }
290
290
 
291
291
  stub_request(:any, "www.example.com").
292
- to_return(:body => File.new('/tmp/response_body.txt'), :status => 200)
292
+ to_return(body: File.new('/tmp/response_body.txt'), status: 200)
293
293
 
294
294
  Net::HTTP.get('www.example.com', '/') # ===> "abc\n"
295
295
  ```
@@ -298,7 +298,7 @@ Net::HTTP.get('www.example.com', '/') # ===> "abc\n"
298
298
 
299
299
  ```ruby
300
300
  stub_request(:any, "www.example.com").
301
- to_return(:status => [500, "Internal Server Error"])
301
+ to_return(status: [500, "Internal Server Error"])
302
302
 
303
303
  req = Net::HTTP::Get.new("/")
304
304
  Net::HTTP.start("www.example.com") { |http| http.request(req) }.
@@ -331,7 +331,7 @@ stub_request(:get, "www.example.com").to_return(raw_response_file.read)
331
331
 
332
332
  ```ruby
333
333
  stub_request(:any, 'www.example.net').
334
- to_return { |request| {:body => request.body} }
334
+ to_return { |request| {body: request.body} }
335
335
 
336
336
  RestClient.post('www.example.net', 'abc') # ===> "abc\n"
337
337
  ```
@@ -340,7 +340,7 @@ RestClient.post('www.example.net', 'abc') # ===> "abc\n"
340
340
 
341
341
  ```ruby
342
342
  stub_request(:any, 'www.example.net').
343
- to_return(lambda { |request| {:body => request.body} })
343
+ to_return(lambda { |request| {body: request.body} })
344
344
 
345
345
  RestClient.post('www.example.net', 'abc') # ===> "abc\n"
346
346
  ```
@@ -357,7 +357,7 @@ stub_request(:get, "www.example.com").
357
357
 
358
358
  ```ruby
359
359
  stub_request(:any, 'www.example.net').
360
- to_return(:body => lambda { |request| request.body })
360
+ to_return(body: lambda { |request| request.body })
361
361
 
362
362
  RestClient.post('www.example.net', 'abc') # ===> "abc\n"
363
363
  ```
@@ -410,7 +410,7 @@ RestClient.post('www.example.net', 'abc') # ===> RestClient::RequestTimeout
410
410
 
411
411
  ```ruby
412
412
  stub_request(:get, "www.example.com").
413
- to_return({:body => "abc"}, {:body => "def"})
413
+ to_return({body: "abc"}, {body: "def"})
414
414
  Net::HTTP.get('www.example.com', '/') # ===> "abc\n"
415
415
  Net::HTTP.get('www.example.com', '/') # ===> "def\n"
416
416
 
@@ -423,8 +423,8 @@ Net::HTTP.get('www.example.com', '/') # ===> "def\n"
423
423
 
424
424
  ```ruby
425
425
  stub_request(:get, "www.example.com").
426
- to_return({:body => "abc"}).then. #then() is just a syntactic sugar
427
- to_return({:body => "def"}).then.
426
+ to_return({body: "abc"}).then. #then() is just a syntactic sugar
427
+ to_return({body: "def"}).then.
428
428
  to_raise(MyException)
429
429
 
430
430
  Net::HTTP.get('www.example.com', '/') # ===> "abc\n"
@@ -436,8 +436,8 @@ Net::HTTP.get('www.example.com', '/') # ===> MyException raised
436
436
 
437
437
  ```ruby
438
438
  stub_request(:get, "www.example.com").
439
- to_return({:body => "abc"}).times(2).then.
440
- to_return({:body => "def"})
439
+ to_return({body: "abc"}).times(2).then.
440
+ to_return({body: "def"})
441
441
 
442
442
  Net::HTTP.get('www.example.com', '/') # ===> "abc\n"
443
443
  Net::HTTP.get('www.example.com', '/') # ===> "abc\n"
@@ -456,7 +456,7 @@ remove_request_stub(stub_get)
456
456
  ```ruby
457
457
  WebMock.allow_net_connect!
458
458
 
459
- stub_request(:any, "www.example.com").to_return(:body => "abc")
459
+ stub_request(:any, "www.example.com").to_return(body: "abc")
460
460
 
461
461
  Net::HTTP.get('www.example.com', '/') # ===> "abc"
462
462
 
@@ -470,7 +470,7 @@ Net::HTTP.get('www.something.com', '/') # ===> Failure
470
470
  ### External requests can be disabled while allowing localhost
471
471
 
472
472
  ```ruby
473
- WebMock.disable_net_connect!(:allow_localhost => true)
473
+ WebMock.disable_net_connect!(allow_localhost: true)
474
474
 
475
475
  Net::HTTP.get('www.something.com', '/') # ===> Failure
476
476
 
@@ -484,7 +484,7 @@ Allowed requests can be specified in a number of ways.
484
484
  With a `String` specifying a host name:
485
485
 
486
486
  ```ruby
487
- WebMock.disable_net_connect!(:allow => 'www.example.org')
487
+ WebMock.disable_net_connect!(allow: 'www.example.org')
488
488
 
489
489
  RestClient.get('www.something.com', '/') # ===> Failure
490
490
  RestClient.get('www.example.org', '/') # ===> Allowed
@@ -494,7 +494,7 @@ RestClient.get('www.example.org:8080', '/') # ===> Allowed
494
494
  With a `String` specifying a host name and a port:
495
495
 
496
496
  ```ruby
497
- WebMock.disable_net_connect!(:allow => 'www.example.org:8080')
497
+ WebMock.disable_net_connect!(allow: 'www.example.org:8080')
498
498
 
499
499
  RestClient.get('www.something.com', '/') # ===> Failure
500
500
  RestClient.get('www.example.org', '/') # ===> Failure
@@ -504,7 +504,7 @@ RestClient.get('www.example.org:8080', '/') # ===> Allowed
504
504
  With a `Regexp` matching the URI:
505
505
 
506
506
  ```ruby
507
- WebMock.disable_net_connect!(:allow => %r{ample.org/foo})
507
+ WebMock.disable_net_connect!(allow: %r{ample.org/foo})
508
508
 
509
509
  RestClient.get('www.example.org', '/foo/bar') # ===> Allowed
510
510
  RestClient.get('sample.org', '/foo') # ===> Allowed
@@ -518,7 +518,7 @@ blacklist = ['google.com', 'facebook.com', 'apple.com']
518
518
  allowed_sites = lambda{|uri|
519
519
  blacklist.none?{|site| uri.host.include?(site) }
520
520
  }
521
- WebMock.disable_net_connect!(:allow => allowed_sites)
521
+ WebMock.disable_net_connect!(allow: allowed_sites)
522
522
 
523
523
  RestClient.get('www.example.org', '/') # ===> Allowed
524
524
  RestClient.get('www.facebook.com', '/') # ===> Failure
@@ -528,7 +528,7 @@ RestClient.get('apple.com', '/') # ===> Failure
528
528
  With an `Array` of any of the above:
529
529
 
530
530
  ```ruby
531
- WebMock.disable_net_connect!(:allow => [
531
+ WebMock.disable_net_connect!(allow: [
532
532
  lambda{|uri| uri.host.length % 2 == 0 },
533
533
  /ample.org/,
534
534
  'bbc.co.uk',
@@ -556,7 +556,7 @@ To workaround this issue, WebMock offers `:net_http_connect_on_start` option,
556
556
  which can be passed to `WebMock.allow_net_connect!` and `WebMock.disable_net_connect!` methods, i.e.
557
557
 
558
558
  ```ruby
559
- WebMock.allow_net_connect!(:net_http_connect_on_start => true)
559
+ WebMock.allow_net_connect!(net_http_connect_on_start: true)
560
560
  ```
561
561
 
562
562
  This forces WebMock Net::HTTP adapter to always connect on `Net::HTTP.start`.
@@ -579,13 +579,13 @@ res = Net::HTTP.start(uri.host, uri.port) do |http|
579
579
  end
580
580
 
581
581
  assert_requested :post, "http://www.example.com",
582
- :headers => {'Content-Length' => 3}, :body => "abc",
583
- :times => 1 # ===> Success
582
+ headers: {'Content-Length' => 3}, body: "abc",
583
+ times: 1 # ===> Success
584
584
 
585
585
  assert_not_requested :get, "http://www.something.com" # ===> Success
586
586
 
587
587
  assert_requested(:post, "http://www.example.com",
588
- :times => 1) { |req| req.body == "abc" }
588
+ times: 1) { |req| req.body == "abc" }
589
589
  ```
590
590
 
591
591
  ### Expecting real (not stubbed) requests
@@ -618,7 +618,7 @@ assert_not_requested(stub_post)
618
618
  require 'webmock/rspec'
619
619
 
620
620
  expect(WebMock).to have_requested(:get, "www.example.com").
621
- with(:body => "abc", :headers => {'Content-Length' => 3}).twice
621
+ with(body: "abc", headers: {'Content-Length' => 3}).twice
622
622
 
623
623
  expect(WebMock).not_to have_requested(:get, "www.something.com")
624
624
 
@@ -628,21 +628,21 @@ expect(WebMock).to have_requested(:post, "www.example.com").
628
628
  # Why? See this comment https://github.com/bblimke/webmock/issues/174#issuecomment-34908908
629
629
 
630
630
  expect(WebMock).to have_requested(:get, "www.example.com").
631
- with(:query => {"a" => ["b", "c"]})
631
+ with(query: {"a" => ["b", "c"]})
632
632
 
633
633
  expect(WebMock).to have_requested(:get, "www.example.com").
634
- with(:query => hash_including({"a" => ["b", "c"]}))
634
+ with(query: hash_including({"a" => ["b", "c"]}))
635
635
 
636
636
  expect(WebMock).to have_requested(:get, "www.example.com").
637
- with(:body => {"a" => ["b", "c"]},
638
- :headers => {'Content-Type' => 'application/json'})
637
+ with(body: {"a" => ["b", "c"]},
638
+ headers: {'Content-Type' => 'application/json'})
639
639
  ```
640
640
 
641
641
  ### Setting expectations in RSpec with `a_request`
642
642
 
643
643
  ```ruby
644
644
  expect(a_request(:post, "www.example.com").
645
- with(:body => "abc", :headers => {'Content-Length' => 3})).
645
+ with(body: "abc", headers: {'Content-Length' => 3})).
646
646
  to have_been_made.once
647
647
 
648
648
  expect(a_request(:post, "www.something.com")).to have_been_made.times(3)
@@ -661,15 +661,15 @@ expect(a_request(:any, "www.example.com")).not_to have_been_made
661
661
  expect(a_request(:post, "www.example.com").with { |req| req.body == "abc" }).
662
662
  to have_been_made
663
663
 
664
- expect(a_request(:get, "www.example.com").with(:query => {"a" => ["b", "c"]})).
664
+ expect(a_request(:get, "www.example.com").with(query: {"a" => ["b", "c"]})).
665
665
  to have_been_made
666
666
 
667
667
  expect(a_request(:get, "www.example.com").
668
- with(:query => hash_including({"a" => ["b", "c"]}))).to have_been_made
668
+ with(query: hash_including({"a" => ["b", "c"]}))).to have_been_made
669
669
 
670
670
  expect(a_request(:post, "www.example.com").
671
- with(:body => {"a" => ["b", "c"]},
672
- :headers => {'Content-Type' => 'application/json'})).to have_been_made
671
+ with(body: {"a" => ["b", "c"]},
672
+ headers: {'Content-Type' => 'application/json'})).to have_been_made
673
673
  ```
674
674
 
675
675
  ### Setting expectations in RSpec on the stub
@@ -703,13 +703,13 @@ assert_not_requested :get, "www.example.com" # ===> Success
703
703
  WebMock.disable!
704
704
 
705
705
  # Disable WebMock for all libs except Net::HTTP
706
- WebMock.disable!(:except => [:net_http])
706
+ WebMock.disable!(except: [:net_http])
707
707
 
708
708
  # Enable WebMock (all adapters)
709
709
  WebMock.enable!
710
710
 
711
711
  # Enable WebMock for all libs except Patron
712
- WebMock.enable!(:except => [:patron])
712
+ WebMock.enable!(except: [:patron])
713
713
  ```
714
714
 
715
715
  ## Matching requests
@@ -727,8 +727,8 @@ An executed request matches stubbed request if it passes following criteria:
727
727
  Always the last declared stub matching the request will be applied i.e:
728
728
 
729
729
  ```ruby
730
- stub_request(:get, "www.example.com").to_return(:body => "abc")
731
- stub_request(:get, "www.example.com").to_return(:body => "def")
730
+ stub_request(:get, "www.example.com").to_return(body: "abc")
731
+ stub_request(:get, "www.example.com").to_return(body: "def")
732
732
 
733
733
  Net::HTTP.get('www.example.com', '/') # ====> "def"
734
734
  ```
@@ -810,9 +810,9 @@ i.e stubbed headers: `nil`, requested: `{ 'Header1' => 'Value1', 'Header2' => 'V
810
810
  WebMock normalises headers and treats all forms of same headers as equal:
811
811
  i.e the following two sets of headers are equal:
812
812
 
813
- `{ "Header1" => "value1", :content_length => 123, :X_CuStOm_hEAder => :value }`
813
+ `{ "Header1" => "value1", content_length: 123, X_CuStOm_hEAder: :value }`
814
814
 
815
- `{ :header1 => "value1", "Content-Length" => 123, "x-cuSTOM-HeAder" => "value" }`
815
+ `{ header1: "value1", "Content-Length" => 123, "x-cuSTOM-HeAder" => "value" }`
816
816
 
817
817
  ## Recording real requests and responses and replaying them later
818
818
 
@@ -831,8 +831,8 @@ end
831
831
  #### invoke callbacks for real requests only and except requests made with Patron
832
832
 
833
833
  ```ruby
834
- WebMock.after_request(:except => [:patron],
835
- :real_requests_only => true) do |req_signature, response|
834
+ WebMock.after_request(except: [:patron],
835
+ real_requests_only: true) do |req_signature, response|
836
836
  puts "Request #{req_signature} was made and #{response} was returned"
837
837
  end
838
838
  ```
@@ -1020,6 +1020,7 @@ People who submitted patches and new features or suggested improvements. Many th
1020
1020
  * Jonathan Schatz
1021
1021
  * Jose Luis Honorato
1022
1022
  * Aaron Kromer
1023
+ * Pavel Jurašek
1023
1024
 
1024
1025
  For a full list of contributors you can visit the
1025
1026
  [contributors](https://github.com/bblimke/webmock/contributors) page.
data/Rakefile CHANGED
@@ -27,4 +27,4 @@ Rake::TestTask.new(:minitest) do |test|
27
27
  test.warning = false
28
28
  end
29
29
 
30
- task :default => [:spec, :spec_http_without_webmock, :test, :minitest]
30
+ task default: [:spec, :spec_http_without_webmock, :test, :minitest]
@@ -3,7 +3,7 @@ module WebMock
3
3
  @@callbacks = []
4
4
 
5
5
  def self.add_callback(options, block)
6
- @@callbacks << {:options => options, :block => block}
6
+ @@callbacks << {options: options, block: block}
7
7
  end
8
8
 
9
9
  def self.callbacks
@@ -62,7 +62,7 @@ if defined?(Curl)
62
62
  if webmock_response = WebMock::StubRegistry.instance.response_for_request(request_signature)
63
63
  build_curb_response(webmock_response)
64
64
  WebMock::CallbackRegistry.invoke_callbacks(
65
- {:lib => :curb}, request_signature, webmock_response)
65
+ {lib: :curb}, request_signature, webmock_response)
66
66
  invoke_curb_callbacks
67
67
  true
68
68
  elsif WebMock.net_connect_allowed?(request_signature.uri)
@@ -70,7 +70,7 @@ if defined?(Curl)
70
70
  if WebMock::CallbackRegistry.any_callbacks?
71
71
  webmock_response = build_webmock_response
72
72
  WebMock::CallbackRegistry.invoke_callbacks(
73
- {:lib => :curb, :real_request => true}, request_signature,
73
+ {lib: :curb, real_request: true}, request_signature,
74
74
  webmock_response)
75
75
  end
76
76
  res
@@ -85,20 +85,45 @@ if defined?(Curl)
85
85
  uri = WebMock::Util::URI.heuristic_parse(self.url)
86
86
  uri.path = uri.normalized_path.gsub("[^:]//","/")
87
87
 
88
+ headers = headers_as_hash(self.headers).merge(basic_auth_headers)
89
+
88
90
  request_body = case method
89
91
  when :post
90
92
  self.post_body || @post_body
91
93
  when :put
92
94
  @put_data
95
+ when :patch
96
+ @patch_data
93
97
  else
94
98
  nil
95
99
  end
96
100
 
101
+ if defined?( @on_debug )
102
+ @on_debug.call("Trying 127.0.0.1...\r\n", 0)
103
+ @on_debug.call('Connected to ' + uri.hostname + "\r\n", 0)
104
+ @debug_method = method.upcase
105
+ @debug_path = uri.path
106
+ @debug_host = uri.hostname
107
+ http_request = ["#{@debug_method} #{@debug_path} HTTP/1.1"]
108
+ http_request << "Host: #{uri.hostname}"
109
+ headers.each do |name, value|
110
+ http_request << "#{name}: #{value}"
111
+ end
112
+ @on_debug.call(http_request.join("\r\n") + "\r\n\r\n", 2)
113
+ if request_body
114
+ @on_debug.call(request_body + "\r\n", 4)
115
+ @on_debug.call(
116
+ "upload completely sent off: #{request_body.bytesize}"\
117
+ " out of #{request_body.bytesize} bytes\r\n", 0
118
+ )
119
+ end
120
+ end
121
+
97
122
  request_signature = WebMock::RequestSignature.new(
98
123
  method,
99
124
  uri.to_s,
100
- :body => request_body,
101
- :headers => headers_as_hash(self.headers).merge(basic_auth_headers)
125
+ body: request_body,
126
+ headers: headers
102
127
  )
103
128
  request_signature
104
129
  end
@@ -131,10 +156,16 @@ if defined?(Curl)
131
156
  @response_code = webmock_response.status[0]
132
157
 
133
158
  @header_str = "HTTP/1.1 #{webmock_response.status[0]} #{webmock_response.status[1]}\r\n"
159
+
160
+ @on_debug.call(@header_str, 1) if defined?( @on_debug )
161
+
134
162
  if webmock_response.headers
135
163
  @header_str << webmock_response.headers.map do |k,v|
136
- "#{k}: #{v.is_a?(Array) ? v.join(", ") : v}"
164
+ header = "#{k}: #{v.is_a?(Array) ? v.join(", ") : v}"
165
+ @on_debug.call(header + "\r\n", 1) if defined?( @on_debug )
166
+ header
137
167
  end.join("\r\n")
168
+ @on_debug.call("\r\n", 1) if defined?( @on_debug )
138
169
 
139
170
  location = webmock_response.headers['Location']
140
171
  if self.follow_location? && location
@@ -192,6 +223,16 @@ if defined?(Curl)
192
223
  status, headers =
193
224
  WebMock::HttpLibAdapters::CurbAdapter.parse_header_string(self.header_str)
194
225
 
226
+ if defined?( @on_debug )
227
+ http_response = ["HTTP/1.0 #{@debug_method} #{@debug_path}"]
228
+ headers.each do |name, value|
229
+ http_response << "#{name}: #{value}"
230
+ end
231
+ http_response << self.body_str
232
+ @on_debug.call(http_response.join("\r\n") + "\r\n", 3)
233
+ @on_debug.call("Connection #0 to host #{@debug_host} left intact\r\n", 0)
234
+ end
235
+
195
236
  webmock_response = WebMock::Response.new
196
237
  webmock_response.status = [self.response_code, status]
197
238
  webmock_response.body = self.body_str
@@ -222,6 +263,13 @@ if defined?(Curl)
222
263
  end
223
264
  alias put http_put
224
265
 
266
+ def http_patch data = nil
267
+ @webmock_method = :patch
268
+ @patch_data = data if data
269
+ super
270
+ end
271
+ alias patch http_patch
272
+
225
273
  def http_post *data
226
274
  @webmock_method = :post
227
275
  @post_body = data.join('&') if data && !data.empty?
@@ -240,6 +288,12 @@ if defined?(Curl)
240
288
  super
241
289
  end
242
290
 
291
+ def patch_data= data
292
+ @webmock_method = :patch
293
+ @patch_data = data
294
+ super
295
+ end
296
+
243
297
  def post_body= data
244
298
  @webmock_method = :post
245
299
  super
@@ -255,6 +309,14 @@ if defined?(Curl)
255
309
  super
256
310
  end
257
311
 
312
+ def verbose=(verbose)
313
+ @verbose = verbose
314
+ end
315
+
316
+ def verbose?
317
+ @verbose ||= false
318
+ end
319
+
258
320
  def body_str
259
321
  @body_str ||= super
260
322
  end
@@ -277,7 +339,7 @@ if defined?(Curl)
277
339
  @content_type ||= super
278
340
  end
279
341
 
280
- %w[ success failure missing header body complete progress ].each do |callback|
342
+ %w[ success failure missing header body complete progress debug ].each do |callback|
281
343
  class_eval <<-METHOD, __FILE__, __LINE__
282
344
  def on_#{callback} &block
283
345
  @on_#{callback} = block