webmock 3.14.0 → 3.19.1
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +124 -2
- data/README.md +46 -18
- data/lib/webmock/api.rb +2 -0
- data/lib/webmock/assertion_failure.rb +2 -0
- data/lib/webmock/callback_registry.rb +2 -0
- data/lib/webmock/config.rb +2 -0
- data/lib/webmock/cucumber.rb +2 -0
- data/lib/webmock/deprecation.rb +2 -0
- data/lib/webmock/errors.rb +2 -0
- data/lib/webmock/http_lib_adapters/async_http_client_adapter.rb +8 -1
- data/lib/webmock/http_lib_adapters/curb_adapter.rb +4 -2
- data/lib/webmock/http_lib_adapters/em_http_request_adapter.rb +14 -6
- data/lib/webmock/http_lib_adapters/excon_adapter.rb +2 -0
- data/lib/webmock/http_lib_adapters/http_lib_adapter.rb +2 -0
- data/lib/webmock/http_lib_adapters/http_lib_adapter_registry.rb +2 -0
- data/lib/webmock/http_lib_adapters/http_rb/client.rb +3 -3
- data/lib/webmock/http_lib_adapters/http_rb/request.rb +3 -1
- data/lib/webmock/http_lib_adapters/http_rb/response.rb +6 -1
- data/lib/webmock/http_lib_adapters/http_rb/streamer.rb +6 -2
- data/lib/webmock/http_lib_adapters/http_rb/webmock.rb +8 -2
- data/lib/webmock/http_lib_adapters/http_rb_adapter.rb +2 -0
- data/lib/webmock/http_lib_adapters/httpclient_adapter.rb +2 -0
- data/lib/webmock/http_lib_adapters/manticore_adapter.rb +2 -0
- data/lib/webmock/http_lib_adapters/net_http.rb +24 -115
- data/lib/webmock/http_lib_adapters/net_http_response.rb +2 -0
- data/lib/webmock/http_lib_adapters/patron_adapter.rb +2 -0
- data/lib/webmock/http_lib_adapters/typhoeus_hydra_adapter.rb +2 -0
- data/lib/webmock/matchers/any_arg_matcher.rb +2 -0
- data/lib/webmock/matchers/hash_argument_matcher.rb +2 -0
- data/lib/webmock/matchers/hash_excluding_matcher.rb +2 -0
- data/lib/webmock/matchers/hash_including_matcher.rb +2 -0
- data/lib/webmock/minitest.rb +2 -0
- data/lib/webmock/rack_response.rb +2 -0
- data/lib/webmock/request_body_diff.rb +2 -0
- data/lib/webmock/request_execution_verifier.rb +2 -0
- data/lib/webmock/request_pattern.rb +26 -8
- data/lib/webmock/request_registry.rb +2 -0
- data/lib/webmock/request_signature.rb +4 -2
- data/lib/webmock/request_signature_snippet.rb +2 -0
- data/lib/webmock/request_stub.rb +34 -0
- data/lib/webmock/response.rb +10 -8
- data/lib/webmock/responses_sequence.rb +2 -0
- data/lib/webmock/rspec/matchers/request_pattern_matcher.rb +2 -0
- data/lib/webmock/rspec/matchers/webmock_matcher.rb +2 -0
- data/lib/webmock/rspec/matchers.rb +2 -0
- data/lib/webmock/rspec.rb +2 -0
- data/lib/webmock/stub_registry.rb +2 -0
- data/lib/webmock/stub_request_snippet.rb +2 -0
- data/lib/webmock/test_unit.rb +2 -0
- data/lib/webmock/util/hash_counter.rb +12 -6
- data/lib/webmock/util/hash_keys_stringifier.rb +2 -0
- data/lib/webmock/util/hash_validator.rb +2 -0
- data/lib/webmock/util/headers.rb +22 -8
- data/lib/webmock/util/json.rb +2 -0
- data/lib/webmock/util/query_mapper.rb +2 -0
- data/lib/webmock/util/uri.rb +3 -1
- data/lib/webmock/util/values_stringifier.rb +2 -0
- data/lib/webmock/util/version_checker.rb +7 -5
- data/lib/webmock/version.rb +3 -1
- data/lib/webmock/webmock.rb +12 -0
- data/lib/webmock.rb +2 -0
- metadata +51 -183
- data/.gemtest +0 -0
- data/.github/workflows/CI.yml +0 -37
- data/.gitignore +0 -34
- data/.rspec-tm +0 -2
- data/Gemfile +0 -9
- data/Rakefile +0 -38
- data/minitest/test_helper.rb +0 -34
- data/minitest/test_webmock.rb +0 -9
- data/minitest/webmock_spec.rb +0 -60
- data/spec/acceptance/async_http_client/async_http_client_spec.rb +0 -375
- data/spec/acceptance/async_http_client/async_http_client_spec_helper.rb +0 -73
- data/spec/acceptance/curb/curb_spec.rb +0 -499
- data/spec/acceptance/curb/curb_spec_helper.rb +0 -147
- data/spec/acceptance/em_http_request/em_http_request_spec.rb +0 -462
- data/spec/acceptance/em_http_request/em_http_request_spec_helper.rb +0 -77
- data/spec/acceptance/excon/excon_spec.rb +0 -77
- data/spec/acceptance/excon/excon_spec_helper.rb +0 -52
- data/spec/acceptance/http_rb/http_rb_spec.rb +0 -93
- data/spec/acceptance/http_rb/http_rb_spec_helper.rb +0 -54
- data/spec/acceptance/httpclient/httpclient_spec.rb +0 -217
- data/spec/acceptance/httpclient/httpclient_spec_helper.rb +0 -57
- data/spec/acceptance/manticore/manticore_spec.rb +0 -107
- data/spec/acceptance/manticore/manticore_spec_helper.rb +0 -35
- data/spec/acceptance/net_http/net_http_shared.rb +0 -153
- data/spec/acceptance/net_http/net_http_spec.rb +0 -369
- data/spec/acceptance/net_http/net_http_spec_helper.rb +0 -64
- data/spec/acceptance/net_http/real_net_http_spec.rb +0 -20
- data/spec/acceptance/patron/patron_spec.rb +0 -125
- data/spec/acceptance/patron/patron_spec_helper.rb +0 -54
- data/spec/acceptance/shared/allowing_and_disabling_net_connect.rb +0 -313
- data/spec/acceptance/shared/callbacks.rb +0 -148
- data/spec/acceptance/shared/complex_cross_concern_behaviors.rb +0 -36
- data/spec/acceptance/shared/enabling_and_disabling_webmock.rb +0 -95
- data/spec/acceptance/shared/precedence_of_stubs.rb +0 -15
- data/spec/acceptance/shared/request_expectations.rb +0 -930
- data/spec/acceptance/shared/returning_declared_responses.rb +0 -409
- data/spec/acceptance/shared/stubbing_requests.rb +0 -678
- data/spec/acceptance/typhoeus/typhoeus_hydra_spec.rb +0 -135
- data/spec/acceptance/typhoeus/typhoeus_hydra_spec_helper.rb +0 -60
- data/spec/acceptance/webmock_shared.rb +0 -41
- data/spec/fixtures/test.txt +0 -1
- data/spec/quality_spec.rb +0 -84
- data/spec/spec_helper.rb +0 -48
- data/spec/support/example_curl_output.txt +0 -22
- data/spec/support/failures.rb +0 -9
- data/spec/support/my_rack_app.rb +0 -53
- data/spec/support/network_connection.rb +0 -19
- data/spec/support/webmock_server.rb +0 -70
- data/spec/unit/api_spec.rb +0 -175
- data/spec/unit/errors_spec.rb +0 -129
- data/spec/unit/http_lib_adapters/http_lib_adapter_registry_spec.rb +0 -17
- data/spec/unit/http_lib_adapters/http_lib_adapter_spec.rb +0 -12
- data/spec/unit/matchers/hash_excluding_matcher_spec.rb +0 -61
- data/spec/unit/matchers/hash_including_matcher_spec.rb +0 -87
- data/spec/unit/rack_response_spec.rb +0 -112
- data/spec/unit/request_body_diff_spec.rb +0 -90
- data/spec/unit/request_execution_verifier_spec.rb +0 -208
- data/spec/unit/request_pattern_spec.rb +0 -736
- data/spec/unit/request_registry_spec.rb +0 -95
- data/spec/unit/request_signature_snippet_spec.rb +0 -89
- data/spec/unit/request_signature_spec.rb +0 -155
- data/spec/unit/request_stub_spec.rb +0 -199
- data/spec/unit/response_spec.rb +0 -286
- data/spec/unit/stub_registry_spec.rb +0 -103
- data/spec/unit/stub_request_snippet_spec.rb +0 -115
- data/spec/unit/util/hash_counter_spec.rb +0 -39
- data/spec/unit/util/hash_keys_stringifier_spec.rb +0 -27
- data/spec/unit/util/headers_spec.rb +0 -28
- data/spec/unit/util/json_spec.rb +0 -33
- data/spec/unit/util/query_mapper_spec.rb +0 -157
- data/spec/unit/util/uri_spec.rb +0 -371
- data/spec/unit/util/version_checker_spec.rb +0 -65
- data/spec/unit/webmock_spec.rb +0 -60
- data/test/http_request.rb +0 -24
- data/test/shared_test.rb +0 -108
- data/test/test_helper.rb +0 -23
- data/test/test_webmock.rb +0 -12
- data/webmock.gemspec +0 -54
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 379567500380d6df66bea0edab72f977ddbcab8fc2cc79f9c2e4c535c46cfeb4
|
|
4
|
+
data.tar.gz: fbab14a1e3a2d7a5563f293e735f521dc47481e7d574f4ace0e5cefa9a15fb8e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 768bc4817766c1b5d2c799c8453bf59411d69f36c4d3b6dfc0630f2a830efa4b72b78dd999cce146bf8f4754a05fbd0dbbddcc72a7389f8b48b8546d4d98dba0
|
|
7
|
+
data.tar.gz: ca14f9cffef86ef82b52985f5ad58f662cbffcb33b86050ffd6e9390efaf5892eed0469595f153d7b0d8a8e6141a75a1e47cdd8076178385a92fe99593c8b3c3
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,127 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
# 3.19.0
|
|
4
|
+
|
|
5
|
+
* When passing a Proc or lambda as response body to `to_return_json`, the body is evaluated at the time of request and not at the time of `to_return_json` method invocation.
|
|
6
|
+
|
|
7
|
+
Thanks to [Jason Karns](https://github.com/jasonkarns) for reporting.
|
|
8
|
+
|
|
9
|
+
* Do not alter real (non-stubbed) request headers when handling em-http-request requests.
|
|
10
|
+
|
|
11
|
+
Thanks to [Yoann Lecuyer](https://github.com/ylecuyer)
|
|
12
|
+
|
|
13
|
+
* Fix matching stubs with HashExcludingMatcher
|
|
14
|
+
|
|
15
|
+
Thanks to [Lucas Arnaud](https://github.com/lucasarnaud)
|
|
16
|
+
|
|
17
|
+
* Remove development and test files from the gem package
|
|
18
|
+
|
|
19
|
+
Thanks to [Orien Madgwick](https://github.com/orien)
|
|
20
|
+
|
|
21
|
+
* Fix supported http client gem version checks.
|
|
22
|
+
|
|
23
|
+
Thanks to [Marc Rohloff](https://github.com/marcrohloff) and [Roman Stražanec](https://github.com/romanstrazanec)
|
|
24
|
+
|
|
25
|
+
* Non-string body passed to #to_return_json is now converted to JSON string.
|
|
26
|
+
|
|
27
|
+
Thanks to [inkstak](https://github.com/inkstak)
|
|
28
|
+
|
|
29
|
+
* `[::1]` is recognised as localhost e.g when passing `allow_localhost` option to `disable_net_connect!`
|
|
30
|
+
|
|
31
|
+
Thanks to [Yuki Inoue](https://github.com/Yuki-Inoue)
|
|
32
|
+
|
|
33
|
+
* Optimized `normalize_headers` for performance
|
|
34
|
+
|
|
35
|
+
Thanks to [Brandon Weaver](https://github.com/baweaver)
|
|
36
|
+
|
|
37
|
+
* Added Frozen string literal to files to optimise memory usage
|
|
38
|
+
|
|
39
|
+
Thanks to [Josh Nichols](https://github.com/technicalpickles)
|
|
40
|
+
|
|
41
|
+
# 3.18.1
|
|
42
|
+
|
|
43
|
+
* Reverted simplified connection handing in Net::HTTP adapter due to https://github.com/bblimke/webmock/issues/999
|
|
44
|
+
|
|
45
|
+
# 3.18.0
|
|
46
|
+
|
|
47
|
+
* Net::BufferedIO is not replaced anymore.
|
|
48
|
+
|
|
49
|
+
Thanks to [Ray Zane](https://github.com/rzane)
|
|
50
|
+
|
|
51
|
+
* Simplified connection handing in Net::HTTP adapter.
|
|
52
|
+
|
|
53
|
+
Thanks to [Ray Zane](https://github.com/rzane)
|
|
54
|
+
|
|
55
|
+
# 3.17.1
|
|
56
|
+
|
|
57
|
+
* Fixed Syntax Error
|
|
58
|
+
|
|
59
|
+
Thanks to [Mark Spangler](https://github.com/mspangler)
|
|
60
|
+
|
|
61
|
+
# 3.17.0
|
|
62
|
+
|
|
63
|
+
* Minimum required Ruby version is 2.3
|
|
64
|
+
|
|
65
|
+
Thanks to [Go Sueyoshi](https://github.com/sue445)
|
|
66
|
+
|
|
67
|
+
* When using Net::HTTP, stubbed socket StubSocket#close and StubSocket#closed? behave more like the real sockets.
|
|
68
|
+
|
|
69
|
+
Thanks to [Ray Zane](https://github.com/rzane)
|
|
70
|
+
|
|
71
|
+
* Added `peeraddr`, `ssl_version` and `cipher` methods to stubbed sockets used by Net::HTTP.
|
|
72
|
+
|
|
73
|
+
Thanks to [Ray Zane](https://github.com/rzane)
|
|
74
|
+
|
|
75
|
+
* Added support for matching top-level array in JSON request body.
|
|
76
|
+
|
|
77
|
+
E.g.
|
|
78
|
+
|
|
79
|
+
````
|
|
80
|
+
stub_request(:post, 'www.example.com').with(body: [{a: 1}])
|
|
81
|
+
````
|
|
82
|
+
|
|
83
|
+
Thanks to [Cedric Sohrauer](https://github.com/cedrics)
|
|
84
|
+
|
|
85
|
+
# 3.16.2
|
|
86
|
+
|
|
87
|
+
* Minimum required Ruby version is 2.0.
|
|
88
|
+
|
|
89
|
+
# 3.16.0 (yanked)
|
|
90
|
+
|
|
91
|
+
* Fix leaky file descriptors and reuse socket for persistent connections.
|
|
92
|
+
|
|
93
|
+
Thanks to [Ray Zane](https://github.com/rzane)
|
|
94
|
+
|
|
95
|
+
* Allow specifying for what URIs or hosts, Net::HTTP should connect on start.
|
|
96
|
+
|
|
97
|
+
Thanks to [Ray Zane](https://github.com/rzane)
|
|
98
|
+
|
|
99
|
+
# 3.15.2
|
|
100
|
+
|
|
101
|
+
* Minimum required Ruby version is 2.0.
|
|
102
|
+
|
|
103
|
+
# 3.15.0 (yanked)
|
|
104
|
+
|
|
105
|
+
* fixed async-http adapter on Windows
|
|
106
|
+
|
|
107
|
+
Thanks to [Pavel Rosický](https://github.com/ahorek)
|
|
108
|
+
|
|
109
|
+
* Support for http.rb >= 5.0.2
|
|
110
|
+
|
|
111
|
+
Thanks to [ojab](https://github.com/ojab)
|
|
112
|
+
|
|
113
|
+
* Curb adapter supports headers with `:` character in the header value
|
|
114
|
+
|
|
115
|
+
Thanks to [Giorgio Gambino](https://github.com/mrbuzz)
|
|
116
|
+
|
|
117
|
+
* Support for matching body of JSON or application/x-www-form-urlencoded requests with content type header including charset.
|
|
118
|
+
|
|
119
|
+
Thanks to [Timmitry](https://github.com/Timmitry)
|
|
120
|
+
|
|
121
|
+
* Prevent double-wrapping http.rb features on non-stubbed requests
|
|
122
|
+
|
|
123
|
+
Thanks to [Michael Fairley](https://github.com/michaelfairley)
|
|
124
|
+
|
|
3
125
|
# 3.14.0
|
|
4
126
|
|
|
5
127
|
* Bump Addressable from 2.3.6 to 2.8.0
|
|
@@ -605,9 +727,9 @@
|
|
|
605
727
|
* `WebMock.disable_net_connect` accepts `:allow` option with an object that responds to `#call`, receiving a `URI` object and returning a boolean:
|
|
606
728
|
|
|
607
729
|
|
|
608
|
-
|
|
730
|
+
denylist = ['google.com', 'facebook.com', 'apple.com']
|
|
609
731
|
allowed_sites = lambda{|uri|
|
|
610
|
-
|
|
732
|
+
denylist.none?{|site| uri.host.include?(site) }
|
|
611
733
|
}
|
|
612
734
|
WebMock.disable_net_connect!(:allow => allowed_sites)
|
|
613
735
|
|
data/README.md
CHANGED
|
@@ -4,8 +4,6 @@ WebMock
|
|
|
4
4
|
[](https://github.com/bblimke/webmock/actions)
|
|
5
5
|
[](https://codeclimate.com/github/bblimke/webmock)
|
|
6
6
|
[](https://github.com/markets/awesome-ruby)
|
|
7
|
-
[](http://inch-ci.org/github/bblimke/webmock)
|
|
8
|
-
[](https://dependabot.com/compatibility-score.html?dependency-name=webmock&package-manager=bundler&version-scheme=semver)
|
|
9
7
|
|
|
10
8
|
Library for stubbing and setting expectations on HTTP requests in Ruby.
|
|
11
9
|
|
|
@@ -40,32 +38,34 @@ Supported HTTP libraries
|
|
|
40
38
|
|
|
41
39
|
Supported Ruby Interpreters
|
|
42
40
|
---------------------------
|
|
43
|
-
|
|
44
|
-
* MRI 2.5
|
|
45
41
|
* MRI 2.6
|
|
46
42
|
* MRI 2.7
|
|
43
|
+
* MRI 3.0
|
|
44
|
+
* MRI 3.1
|
|
45
|
+
* MRI 3.2
|
|
47
46
|
* JRuby
|
|
48
|
-
* Rubinius
|
|
49
47
|
|
|
50
48
|
## Installation
|
|
51
49
|
|
|
52
50
|
```bash
|
|
53
|
-
|
|
51
|
+
gem install webmock
|
|
54
52
|
```
|
|
55
53
|
or alternatively:
|
|
56
54
|
|
|
57
55
|
```ruby
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
56
|
+
# add to your Gemfile
|
|
57
|
+
group :test do
|
|
58
|
+
gem "webmock"
|
|
59
|
+
end
|
|
62
60
|
```
|
|
63
61
|
|
|
64
62
|
### or to install the latest development version from github master
|
|
65
63
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
64
|
+
```bash
|
|
65
|
+
git clone http://github.com/bblimke/webmock.git
|
|
66
|
+
cd webmock
|
|
67
|
+
rake install
|
|
68
|
+
```
|
|
69
69
|
|
|
70
70
|
## Upgrading from v1.x to v2.x
|
|
71
71
|
|
|
@@ -330,6 +330,16 @@ stub_request(:any, "www.example.com").
|
|
|
330
330
|
Net::HTTP.get('www.example.com', '/') # ===> "abc\n"
|
|
331
331
|
```
|
|
332
332
|
|
|
333
|
+
### Response with JSON body
|
|
334
|
+
|
|
335
|
+
```ruby
|
|
336
|
+
|
|
337
|
+
stub_request(:any, "www.example.com").
|
|
338
|
+
to_return_json(body: {foo: "bar"})
|
|
339
|
+
|
|
340
|
+
Net::HTTP.get('www.example.com', '/') # ===> "{\"foo\": \"bar\"}"
|
|
341
|
+
```
|
|
342
|
+
|
|
333
343
|
### Response with custom status message
|
|
334
344
|
|
|
335
345
|
```ruby
|
|
@@ -383,7 +393,8 @@ RestClient.post('www.example.net', 'abc') # ===> "abc\n"
|
|
|
383
393
|
|
|
384
394
|
### Dynamically evaluated raw responses recorded with `curl -is`
|
|
385
395
|
|
|
386
|
-
|
|
396
|
+
`curl -is www.example.com > /tmp/www.example.com.txt`
|
|
397
|
+
|
|
387
398
|
```ruby
|
|
388
399
|
stub_request(:get, "www.example.com").
|
|
389
400
|
to_return(lambda { |request| File.new("/tmp/#{request.uri.host.to_s}.txt") })
|
|
@@ -540,7 +551,7 @@ RestClient.get('www.example.org:8080', '/') # ===> Allowed
|
|
|
540
551
|
With a `Regexp` matching the URI:
|
|
541
552
|
|
|
542
553
|
```ruby
|
|
543
|
-
WebMock.disable_net_connect!(allow: %r{ample
|
|
554
|
+
WebMock.disable_net_connect!(allow: %r{ample\.org/foo})
|
|
544
555
|
|
|
545
556
|
RestClient.get('www.example.org', '/foo/bar') # ===> Allowed
|
|
546
557
|
RestClient.get('sample.org', '/foo') # ===> Allowed
|
|
@@ -550,9 +561,9 @@ RestClient.get('sample.org', '/bar') # ===> Failure
|
|
|
550
561
|
With an object that responds to `#call`, receiving a `URI` object and returning a boolean:
|
|
551
562
|
|
|
552
563
|
```ruby
|
|
553
|
-
|
|
564
|
+
denylist = ['google.com', 'facebook.com', 'apple.com']
|
|
554
565
|
allowed_sites = lambda{|uri|
|
|
555
|
-
|
|
566
|
+
denylist.none?{|site| uri.host.include?(site) }
|
|
556
567
|
}
|
|
557
568
|
WebMock.disable_net_connect!(allow: allowed_sites)
|
|
558
569
|
|
|
@@ -1161,13 +1172,30 @@ People who submitted patches and new features or suggested improvements. Many th
|
|
|
1161
1172
|
* Alex Vondrak
|
|
1162
1173
|
* Will Storey
|
|
1163
1174
|
* Eduardo Hernandez
|
|
1175
|
+
* ojab
|
|
1176
|
+
* Giorgio Gambino
|
|
1177
|
+
* Timmitry
|
|
1178
|
+
* Michael Fairley
|
|
1179
|
+
* Ray Zane
|
|
1180
|
+
* Go Sueyoshi
|
|
1181
|
+
* Cedric Sohrauer
|
|
1182
|
+
* Akira Matsuda
|
|
1183
|
+
* Mark Spangler
|
|
1184
|
+
* Henrik Nyh
|
|
1185
|
+
* Yoann Lecuyer
|
|
1186
|
+
* Lucas Arnaud
|
|
1187
|
+
* Marc Rohloff
|
|
1188
|
+
* inkstak
|
|
1189
|
+
* Yuki Inoue
|
|
1190
|
+
* Brandon Weaver
|
|
1191
|
+
* Josh Nichols
|
|
1164
1192
|
|
|
1165
1193
|
For a full list of contributors you can visit the
|
|
1166
1194
|
[contributors](https://github.com/bblimke/webmock/contributors) page.
|
|
1167
1195
|
|
|
1168
1196
|
## Background
|
|
1169
1197
|
|
|
1170
|
-
Thank you Fakeweb! This library was inspired by [FakeWeb](
|
|
1198
|
+
Thank you Fakeweb! This library was inspired by [FakeWeb](https://github.com/chrisk/fakeweb).
|
|
1171
1199
|
I imported some solutions from that project to WebMock. I also copied some code i.e Net:HTTP adapter.
|
|
1172
1200
|
Fakeweb architecture unfortunately didn't allow me to extend it easily with the features I needed.
|
|
1173
1201
|
I also preferred some things to work differently i.e request stub precedence.
|
data/lib/webmock/api.rb
CHANGED
data/lib/webmock/config.rb
CHANGED
data/lib/webmock/cucumber.rb
CHANGED
data/lib/webmock/deprecation.rb
CHANGED
data/lib/webmock/errors.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
begin
|
|
2
4
|
require 'async'
|
|
3
5
|
require 'async/http'
|
|
@@ -151,7 +153,12 @@ if defined?(Async::HTTP)
|
|
|
151
153
|
private
|
|
152
154
|
|
|
153
155
|
def create_connected_sockets
|
|
154
|
-
|
|
156
|
+
pair = begin
|
|
157
|
+
Async::IO::Socket.pair(Socket::AF_UNIX, Socket::SOCK_STREAM)
|
|
158
|
+
rescue Errno::EAFNOSUPPORT
|
|
159
|
+
Async::IO::Socket.pair(Socket::AF_INET, Socket::SOCK_STREAM)
|
|
160
|
+
end
|
|
161
|
+
pair.tap do |sockets|
|
|
155
162
|
sockets.each do |socket|
|
|
156
163
|
socket.instance_variable_set :@alpn_protocol, nil
|
|
157
164
|
socket.instance_eval do
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
begin
|
|
2
4
|
require 'curb'
|
|
3
5
|
rescue LoadError
|
|
@@ -5,7 +7,7 @@ rescue LoadError
|
|
|
5
7
|
end
|
|
6
8
|
|
|
7
9
|
if defined?(Curl)
|
|
8
|
-
WebMock::VersionChecker.new('Curb', Curl::CURB_VERSION, '0.7.16', '0.
|
|
10
|
+
WebMock::VersionChecker.new('Curb', Curl::CURB_VERSION, '0.7.16', '1.0.1', ['0.8.7']).check_version!
|
|
9
11
|
|
|
10
12
|
module WebMock
|
|
11
13
|
module HttpLibAdapters
|
|
@@ -128,7 +130,7 @@ if defined?(Curl)
|
|
|
128
130
|
def headers_as_hash(headers)
|
|
129
131
|
if headers.is_a?(Array)
|
|
130
132
|
headers.inject({}) {|hash, header|
|
|
131
|
-
name, value = header.split(":").map(&:strip)
|
|
133
|
+
name, value = header.split(":", 2).map(&:strip)
|
|
132
134
|
hash[name] = value
|
|
133
135
|
hash
|
|
134
136
|
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
begin
|
|
2
4
|
require 'em-http-request'
|
|
3
5
|
rescue LoadError
|
|
@@ -101,7 +103,7 @@ if defined?(EventMachine::HttpClient)
|
|
|
101
103
|
|
|
102
104
|
def connection_completed
|
|
103
105
|
@state = :response_header
|
|
104
|
-
send_request(
|
|
106
|
+
send_request(*headers_and_body_processed_by_middleware)
|
|
105
107
|
end
|
|
106
108
|
|
|
107
109
|
def send_request(head, body)
|
|
@@ -168,12 +170,18 @@ if defined?(EventMachine::HttpClient)
|
|
|
168
170
|
webmock_response
|
|
169
171
|
end
|
|
170
172
|
|
|
171
|
-
def
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
173
|
+
def headers_and_body_processed_by_middleware
|
|
174
|
+
@headers_and_body_processed_by_middleware ||= begin
|
|
175
|
+
head, body = build_request, @req.body
|
|
176
|
+
@conn.middleware.each do |m|
|
|
177
|
+
head, body = m.request(self, head, body) if m.respond_to?(:request)
|
|
178
|
+
end
|
|
179
|
+
[head, body]
|
|
176
180
|
end
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
def build_request_signature
|
|
184
|
+
headers, body = headers_and_body_processed_by_middleware
|
|
177
185
|
|
|
178
186
|
method = @req.method
|
|
179
187
|
uri = @req.uri.clone
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module HTTP
|
|
2
4
|
class Client
|
|
3
5
|
alias_method :__perform__, :perform
|
|
@@ -5,9 +7,7 @@ module HTTP
|
|
|
5
7
|
def perform(request, options)
|
|
6
8
|
return __perform__(request, options) unless webmock_enabled?
|
|
7
9
|
|
|
8
|
-
|
|
9
|
-
options.features.each { |_name, feature| response = feature.wrap_response(response) }
|
|
10
|
-
response
|
|
10
|
+
WebMockPerform.new(request, options) { __perform__(request, options) }.exec
|
|
11
11
|
end
|
|
12
12
|
|
|
13
13
|
def webmock_enabled?
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module HTTP
|
|
2
4
|
class Request
|
|
3
5
|
def webmock_signature
|
|
4
6
|
request_body = if defined?(HTTP::Request::Body)
|
|
5
|
-
|
|
7
|
+
String.new.tap { |string| body.each { |part| string << part } }
|
|
6
8
|
else
|
|
7
9
|
body
|
|
8
10
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module HTTP
|
|
2
4
|
class Response
|
|
3
5
|
def to_webmock
|
|
@@ -24,7 +26,10 @@ module HTTP
|
|
|
24
26
|
elsif HTTP::VERSION < "3.0.0"
|
|
25
27
|
Body.new(Streamer.new(webmock_response.body), webmock_response.body.encoding)
|
|
26
28
|
else
|
|
27
|
-
Body.new(
|
|
29
|
+
Body.new(
|
|
30
|
+
Streamer.new(webmock_response.body, encoding: webmock_response.body.encoding),
|
|
31
|
+
encoding: webmock_response.body.encoding
|
|
32
|
+
)
|
|
28
33
|
end
|
|
29
34
|
|
|
30
35
|
return new(status, "1.1", headers, body, uri) if HTTP::VERSION < "1.0.0"
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module HTTP
|
|
2
4
|
class Response
|
|
3
5
|
class Streamer
|
|
4
|
-
def initialize(str)
|
|
6
|
+
def initialize(str, encoding: Encoding::BINARY)
|
|
5
7
|
@io = StringIO.new str
|
|
8
|
+
@encoding = encoding
|
|
6
9
|
end
|
|
7
10
|
|
|
8
11
|
def readpartial(size = nil, outbuf = nil)
|
|
@@ -14,7 +17,8 @@ module HTTP
|
|
|
14
17
|
end
|
|
15
18
|
end
|
|
16
19
|
|
|
17
|
-
@io.read size, outbuf
|
|
20
|
+
chunk = @io.read size, outbuf
|
|
21
|
+
chunk.force_encoding(@encoding) if chunk
|
|
18
22
|
end
|
|
19
23
|
|
|
20
24
|
def close
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module HTTP
|
|
2
4
|
class WebMockPerform
|
|
3
|
-
def initialize(request, &perform)
|
|
5
|
+
def initialize(request, options, &perform)
|
|
4
6
|
@request = request
|
|
7
|
+
@options = options
|
|
5
8
|
@perform = perform
|
|
6
9
|
@request_signature = nil
|
|
7
10
|
end
|
|
@@ -38,7 +41,10 @@ module HTTP
|
|
|
38
41
|
webmock_response.raise_error_if_any
|
|
39
42
|
|
|
40
43
|
invoke_callbacks(webmock_response, real_request: false)
|
|
41
|
-
::HTTP::Response.from_webmock @request, webmock_response, request_signature
|
|
44
|
+
response = ::HTTP::Response.from_webmock @request, webmock_response, request_signature
|
|
45
|
+
|
|
46
|
+
@options.features.each { |_name, feature| response = feature.wrap_response(response) }
|
|
47
|
+
response
|
|
42
48
|
end
|
|
43
49
|
|
|
44
50
|
def raise_timeout_error
|