vcr 2.3.0 → 2.4.0

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.
Files changed (41) hide show
  1. data/.gitignore +5 -2
  2. data/.travis.yml +3 -1
  3. data/Appraisals +0 -4
  4. data/CHANGELOG.md +90 -54
  5. data/Gemfile +6 -6
  6. data/{gemfiles/typhoeus-new.gemfile.lock → Gemfile.lock} +34 -37
  7. data/LICENSE +1 -1
  8. data/README.md +14 -7
  9. data/Rakefile +8 -6
  10. data/cucumber.yml +10 -7
  11. data/features/.nav +3 -0
  12. data/features/configuration/preserve_exact_body_bytes.feature +2 -2
  13. data/features/configuration/query_parser.feature +84 -0
  14. data/features/configuration/uri_parser.feature +1 -1
  15. data/features/hooks/around_http_request.feature +1 -1
  16. data/features/request_matching/README.md +2 -0
  17. data/features/request_matching/query.feature +97 -0
  18. data/gemfiles/{typhoeus-old.gemfile → typhoeus_old.gemfile} +1 -3
  19. data/gemfiles/{typhoeus-old.gemfile.lock → typhoeus_old.gemfile.lock} +25 -17
  20. data/lib/vcr.rb +5 -1
  21. data/lib/vcr/configuration.rb +20 -0
  22. data/lib/vcr/deprecations.rb +62 -1
  23. data/lib/vcr/errors.rb +9 -9
  24. data/lib/vcr/library_hooks/fakeweb.rb +1 -0
  25. data/lib/vcr/library_hooks/typhoeus.rb +1 -0
  26. data/lib/vcr/library_hooks/webmock.rb +1 -1
  27. data/lib/vcr/request_matcher_registry.rb +8 -1
  28. data/lib/vcr/structs.rb +2 -2
  29. data/lib/vcr/test_frameworks/rspec.rb +0 -56
  30. data/lib/vcr/version.rb +1 -1
  31. data/script/ci.sh +2 -2
  32. data/spec/monkey_patches.rb +1 -1
  33. data/spec/spec_helper.rb +12 -13
  34. data/spec/support/http_library_adapters.rb +9 -1
  35. data/spec/vcr/deprecations_spec.rb +11 -9
  36. data/spec/vcr/library_hooks/fakeweb_spec.rb +5 -0
  37. data/spec/vcr/library_hooks/typhoeus_spec.rb +55 -0
  38. data/spec/vcr/request_matcher_registry_spec.rb +39 -0
  39. data/vcr.gemspec +4 -3
  40. metadata +79 -85
  41. data/gemfiles/typhoeus-new.gemfile +0 -18
data/Gemfile CHANGED
@@ -2,9 +2,6 @@ source :rubygems
2
2
 
3
3
  gem 'appraisal'
4
4
 
5
- gem 'typhoeus', :git => "https://github.com/typhoeus/typhoeus.git"
6
- gem 'webmock', :git => "https://github.com/i0rek/webmock.git", :branch => "typhoeus_0.5.0"
7
-
8
5
  gemspec
9
6
 
10
7
  gem 'jruby-openssl', :platforms => :jruby
@@ -16,10 +13,13 @@ gem 'relish', '~> 0.6'
16
13
  gem 'fuubar'
17
14
  gem 'fuubar-cucumber'
18
15
 
19
- gem 'redcarpet', '~> 1.17.2'
16
+ gem 'redcarpet', '~> 1.17.2', :platforms => :ruby
20
17
  gem 'github-markup'
21
18
 
22
- gem 'ruby-debug', :platforms => [:mri_18, :jruby]
19
+ group :extras do
20
+ gem 'ruby-debug', :platforms => [:mri_18, :jruby]
23
21
 
24
- gem 'debugger', :platforms => :mri_19
22
+ gem 'debugger', :platforms => :mri_19
23
+ gem 'pry'
24
+ end
25
25
 
@@ -1,29 +1,13 @@
1
- GIT
2
- remote: https://github.com/i0rek/webmock.git
3
- revision: aeac5cc6a1ac7a313c138514d66cd536802b9dc4
4
- branch: typhoeus_0.5.0
5
- specs:
6
- webmock (1.8.9)
7
- addressable (>= 2.2.7)
8
- crack (>= 0.1.7)
9
-
10
- GIT
11
- remote: https://github.com/typhoeus/typhoeus.git
12
- revision: 6f4e9079ade2f90c20341dddd022ab1d153400ec
13
- specs:
14
- typhoeus (0.5.0.rc)
15
- ethon (= 0.5.1)
16
-
17
1
  PATH
18
- remote: /Users/myron/code/vcr
2
+ remote: .
19
3
  specs:
20
- vcr (2.2.5)
4
+ vcr (2.4.0)
21
5
 
22
6
  GEM
23
7
  remote: http://rubygems.org/
24
8
  specs:
25
9
  addressable (2.3.2)
26
- appraisal (0.4.1)
10
+ appraisal (0.5.1)
27
11
  bundler
28
12
  rake
29
13
  archive-tar-minitar (0.5.2)
@@ -35,6 +19,7 @@ GEM
35
19
  builder (3.1.4)
36
20
  childprocess (0.3.6)
37
21
  ffi (~> 1.0, >= 1.0.6)
22
+ coderay (1.0.8)
38
23
  columnize (0.3.6)
39
24
  cookiejar (0.3.0)
40
25
  crack (0.3.1)
@@ -44,14 +29,14 @@ GEM
44
29
  gherkin (~> 2.9.0)
45
30
  json (>= 1.4.6)
46
31
  term-ansicolor (>= 1.0.6)
47
- curb (0.8.1)
48
- debugger (1.2.1)
32
+ curb (0.8.3)
33
+ debugger (1.2.2)
49
34
  columnize (>= 0.3.1)
50
35
  debugger-linecache (~> 1.1.1)
51
- debugger-ruby_core_source (~> 1.1.4)
36
+ debugger-ruby_core_source (~> 1.1.5)
52
37
  debugger-linecache (1.1.2)
53
38
  debugger-ruby_core_source (>= 1.1.1)
54
- debugger-ruby_core_source (1.1.4)
39
+ debugger-ruby_core_source (1.1.5)
55
40
  diff-lcs (1.1.3)
56
41
  em-http-request (1.0.3)
57
42
  addressable (>= 2.2.3)
@@ -61,15 +46,15 @@ GEM
61
46
  http_parser.rb (>= 0.5.3)
62
47
  em-socksify (0.2.1)
63
48
  eventmachine (>= 1.0.0.beta.4)
64
- ethon (0.5.1)
65
- ffi (~> 1.0.11)
49
+ ethon (0.5.6)
50
+ ffi (~> 1.1.5)
66
51
  mime-types (~> 1.18)
67
52
  eventmachine (1.0.0)
68
- excon (0.16.7)
53
+ excon (0.16.10)
69
54
  fakeweb (1.3.0)
70
55
  faraday (0.8.4)
71
56
  multipart-post (~> 1.1)
72
- ffi (1.0.11)
57
+ ffi (1.1.5)
73
58
  fuubar (1.0.0)
74
59
  rspec (~> 2.0)
75
60
  rspec-instafail (~> 0.2.0)
@@ -85,14 +70,19 @@ GEM
85
70
  json (1.6.7)
86
71
  linecache (0.46)
87
72
  rbx-require-relative (> 0.0.4)
73
+ method_source (0.8.1)
88
74
  mime-types (1.19)
89
75
  multi_json (1.0.4)
90
76
  multipart-post (1.1.5)
91
77
  patron (0.4.18)
78
+ pry (0.9.10)
79
+ coderay (~> 1.0.5)
80
+ method_source (~> 0.8)
81
+ slop (~> 3.3.1)
92
82
  rack (1.3.6)
93
83
  rack-protection (1.2.0)
94
84
  rack
95
- rake (0.9.2.2)
85
+ rake (0.9.5)
96
86
  rbx-require-relative (0.0.9)
97
87
  redcarpet (1.17.2)
98
88
  redis (2.2.2)
@@ -102,15 +92,15 @@ GEM
102
92
  rest-client (>= 1.6.1)
103
93
  rest-client (1.6.7)
104
94
  mime-types (>= 1.16)
105
- rspec (2.11.0)
106
- rspec-core (~> 2.11.0)
107
- rspec-expectations (~> 2.11.0)
108
- rspec-mocks (~> 2.11.0)
109
- rspec-core (2.11.1)
110
- rspec-expectations (2.11.3)
95
+ rspec (2.12.0)
96
+ rspec-core (~> 2.12.0)
97
+ rspec-expectations (~> 2.12.0)
98
+ rspec-mocks (~> 2.12.0)
99
+ rspec-core (2.12.0)
100
+ rspec-expectations (2.12.0)
111
101
  diff-lcs (~> 1.1.3)
112
102
  rspec-instafail (0.2.4)
113
- rspec-mocks (2.11.3)
103
+ rspec-mocks (2.12.0)
114
104
  ruby-debug (0.10.4)
115
105
  columnize (>= 0.1)
116
106
  ruby-debug-base (~> 0.10.4.0)
@@ -126,9 +116,15 @@ GEM
126
116
  rack (~> 1.3, >= 1.3.6)
127
117
  rack-protection (~> 1.2)
128
118
  tilt (~> 1.3, >= 1.3.3)
119
+ slop (3.3.3)
129
120
  term-ansicolor (1.0.7)
130
121
  tilt (1.3.3)
131
122
  timecop (0.3.5)
123
+ typhoeus (0.5.3)
124
+ ethon (~> 0.5.3)
125
+ webmock (1.9.0)
126
+ addressable (>= 2.2.7)
127
+ crack (>= 0.1.7)
132
128
  yajl-ruby (1.1.0)
133
129
  yard (0.8.3)
134
130
 
@@ -154,6 +150,7 @@ DEPENDENCIES
154
150
  json (~> 1.6.5)
155
151
  multi_json (~> 1.0.3)
156
152
  patron (~> 0.4.15)
153
+ pry
157
154
  rack (~> 1.3.6)
158
155
  rake (~> 0.9.2)
159
156
  redcarpet (~> 1.17.2)
@@ -165,8 +162,8 @@ DEPENDENCIES
165
162
  simplecov (~> 0.5.3)
166
163
  sinatra (~> 1.3.2)
167
164
  timecop (~> 0.3.5)
168
- typhoeus!
165
+ typhoeus (~> 0.5.3)
169
166
  vcr!
170
- webmock!
167
+ webmock (~> 1.9)
171
168
  yajl-ruby (~> 1.1.0)
172
169
  yard
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2010-2012 Myron Marston
1
+ Copyright (c) 2010-2013 Myron Marston
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Record your test suite's HTTP interactions and replay them during future test runs for fast, deterministic, accurate tests.
4
4
 
5
- [![Build Status](https://secure.travis-ci.org/myronmarston/vcr.png?branch=master)](http://travis-ci.org/myronmarston/vcr)
5
+ [![Build Status](https://secure.travis-ci.org/vcr/vcr.png?branch=master)](http://travis-ci.org/vcr/vcr)
6
6
 
7
7
  ## Synopsis
8
8
 
@@ -79,7 +79,7 @@ The docs come in two flavors:
79
79
  API documentation. The API docs contain detailed info about all of VCR's
80
80
  public API.
81
81
 
82
- See the [Upgrade](https://github.com/myronmarston/vcr/blob/master/Upgrade.md) doc
82
+ See the [Upgrade](https://github.com/vcr/vcr/blob/master/Upgrade.md) doc
83
83
  for info about what's new and changed in VCR 2.0.
84
84
 
85
85
  ## Release Policy
@@ -105,13 +105,13 @@ Note that as of VCR 2, 1.8.6 and 1.9.1 are not supported.
105
105
 
106
106
  ## Development
107
107
 
108
- * Source hosted on [GitHub](http://github.com/myronmarston/vcr).
108
+ * Source hosted on [GitHub](http://github.com/vcr/vcr).
109
109
  * Direct questions and discussions to the [IRC channel](irc://irc.freenode.net/vcr) or
110
110
  the [mailing list](http://groups.google.com/group/vcr-ruby).
111
- * Report issues on [GitHub Issues](http://github.com/myronmarston/vcr/issues).
111
+ * Report issues on [GitHub Issues](http://github.com/vcr/vcr/issues).
112
112
  * Pull requests are very welcome! Please include spec and/or feature coverage for every patch,
113
113
  and create a topic branch for every separate change you make.
114
- * See the [Contributing](https://github.com/myronmarston/vcr/blob/master/CONTRIBUTING.md)
114
+ * See the [Contributing](https://github.com/vcr/vcr/blob/master/CONTRIBUTING.md)
115
115
  guide for instructions on running the specs and features.
116
116
  * Code quality metrics are checked by [Code Climate](https://codeclimate.com/github/myronmarston/vcr).
117
117
  * Documentation is generated with [YARD](http://yardoc.org/) ([cheat sheet](http://cheat.errtheblog.com/s/yard/)).
@@ -138,6 +138,7 @@ yard server --reload
138
138
  Thanks also to the following people who have contributed patches or helpful suggestions:
139
139
 
140
140
  * [Aaron Brethorst](http://github.com/aaronbrethorst)
141
+ * [Austen Ito](https://github.com/austenito)
141
142
  * [Avdi Grimm](https://github.com/avdi)
142
143
  * [Bartosz Blimke](http://github.com/bblimke)
143
144
  * [Benjamin Oakes](https://github.com/benjaminoakes)
@@ -158,6 +159,7 @@ Thanks also to the following people who have contributed patches or helpful sugg
158
159
  * [Jonathan Tron](https://github.com/JonathanTron)
159
160
  * [Justin Smestad](https://github.com/jsmestad)
160
161
  * [Karl Baum](https://github.com/kbaum)
162
+ * [Luke van der Hoeven](https://github.com/plukevdh)
161
163
  * [Mark Burns](https://github.com/markburns)
162
164
  * [Michael Lavrisha](https://github.com/vrish88)
163
165
  * [Mislav Marohnić](https://github.com/mislav)
@@ -168,7 +170,11 @@ Thanks also to the following people who have contributed patches or helpful sugg
168
170
  * [playupchris](https://github.com/playupchris)
169
171
  * [Ryan Bates](https://github.com/ryanb)
170
172
  * [Ryan Burrows](https://github.com/rhburrows)
173
+ * [Ryan Castillo](https://github.com/rmcastil)
171
174
  * [Sathya Sekaran](https://github.com/sfsekaran)
175
+ * [Scott Carleton](https://github.com/ScotterC)
176
+ * [Shay Frendt](https://github.com/shayfrendt)
177
+ * [Steve Faulkner](https://github.com/southpolesteve)
172
178
  * [Steven Anderson](https://github.com/bendycode)
173
179
  * [Tyler Hunt](https://github.com/tylerhunt)
174
180
  * [Wesley Beary](https://github.com/geemus)
@@ -178,10 +184,11 @@ Thanks also to the following people who have contributed patches or helpful sugg
178
184
  * [Betamax](https://github.com/robfletcher/betamax) (Groovy)
179
185
  * [Mimic](https://github.com/acoulton/mimic) (PHP/Kohana)
180
186
  * [Nock](https://github.com/flatiron/nock) (JavaScript/Node)
181
- * [NSURLConnectionVCR](https://bitbucket.org/martijnthe/nsurlconnectionvcr) (Objective C)
187
+ * [NSURLConnectionVCR](https://bitbucket.org/martijnthe/nsurlconnectionvcr) (Objective-C)
182
188
  * [TapeDeck.js](https://github.com/EndangeredMassa/TapeDeck.js) (JavaScript)
183
189
  * [VCR.js](https://github.com/elcuervo/vcr.js) (JavaScript)
184
190
  * [VCR.py](https://github.com/kevin1024/vcrpy) (Python)
191
+ * [VCRURLConnection](https://github.com/dstnbrkr/VCRURLConnection) (Objective-C)
185
192
  * [vcr-clj](https://github.com/ifesdjeen/vcr-clj) (Clojure)
186
193
 
187
194
  ## Similar Libraries in Ruby
@@ -195,5 +202,5 @@ Thanks also to the following people who have contributed patches or helpful sugg
195
202
 
196
203
  ## Copyright
197
204
 
198
- Copyright (c) 2010-2012 Myron Marston. Released under the terms of the
205
+ Copyright (c) 2010-2013 Myron Marston. Released under the terms of the
199
206
  MIT license. See LICENSE for details.
data/Rakefile CHANGED
@@ -88,13 +88,15 @@ end
88
88
 
89
89
  desc "Push cukes to relishapp using the relish-client-gem"
90
90
  task :relish do
91
- %w[ README.md CHANGELOG.md Upgrade.md LICENSE CONTRIBUTING.md].each do |file|
92
- ensure_relish_doc_symlinked(file)
93
- end
91
+ unless ENV['SKIP_RELISH']
92
+ %w[ README.md CHANGELOG.md Upgrade.md LICENSE CONTRIBUTING.md].each do |file|
93
+ ensure_relish_doc_symlinked(file)
94
+ end
94
95
 
95
- require 'vcr/version'
96
- sh "relish versions:add myronmarston/vcr:#{VCR.version}" if ENV['NEW_RELISH_RELEASE']
97
- sh "relish push vcr:#{VCR.version}"
96
+ require 'vcr/version'
97
+ sh "relish versions:add vcr/vcr:#{VCR.version}" if ENV['NEW_RELISH_RELEASE']
98
+ sh "relish push vcr/vcr:#{VCR.version}"
99
+ end
98
100
  end
99
101
 
100
102
  task :prep_relish_release do
@@ -1,13 +1,16 @@
1
1
  <%
2
+ base_opts = '--require features/step_definitions --require features/support'
3
+ std_opts = "--format #{ENV['CUCUMBER_FORMAT'] || 'Cucumber::Formatter::Fuubar'} --strict"
2
4
  rerun = File.file?('rerun.txt') ? IO.read('rerun.txt') : ""
3
5
  rerun_opts = rerun.to_s.strip.empty? ? "--format #{ENV['CUCUMBER_FORMAT'] || 'Cucumber::Formatter::Fuubar'} features" : "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} #{rerun}"
4
- std_opts = "--format #{ENV['CUCUMBER_FORMAT'] || 'Cucumber::Formatter::Fuubar'} --strict"
5
6
 
6
- exclusions = ["--tags ~@exclude-#{RUBY_VERSION.split('.').first(2).join}"].tap do |a|
7
- a << "--tags ~@exclude-#{RUBY_ENGINE}" if defined?(RUBY_ENGINE)
8
- end.join(' ')
7
+ exclusions = []
8
+ exclusions << "--tags ~@exclude-#{RUBY_VERSION.split('.').first(2).join}"
9
+ exclusions << "--tags ~@exclude-#{RUBY_VERSION}p#{RUBY_PATCHLEVEL}"
10
+ exclusions << "--tags ~@exclude-#{RUBY_ENGINE}" if defined?(RUBY_ENGINE)
11
+ exclusions = exclusions.join(' ')
9
12
  %>
10
- default: <%= std_opts %> --tags ~@wip <%= exclusions %> features
11
- wip: --tags @wip <%= exclusions %> features
12
- rerun: <%= rerun_opts %> --format rerun --out rerun.txt --strict --tags ~@wip <%= exclusions %>
13
+ default: <%= base_opts %> <%= std_opts %> --tags ~@wip <%= exclusions %> features
14
+ wip: <%= base_opts %> --tags @wip <%= exclusions %> features
15
+ rerun: <%= base_opts %> <%= rerun_opts %> --format rerun --out rerun.txt --strict --tags ~@wip <%= exclusions %>
13
16
 
@@ -29,6 +29,8 @@
29
29
  - allow_http_connections_when_no_cassette.feature
30
30
  - debug_logging.feature
31
31
  - preserve_exact_body_bytes.feature
32
+ - uri_parser.feature
33
+ - query_parser.feature
32
34
  - hooks:
33
35
  - before_record.feature
34
36
  - before_playback.feature
@@ -40,6 +42,7 @@
40
42
  - uri.feature
41
43
  - host.feature
42
44
  - path.feature
45
+ - query.feature
43
46
  - body.feature
44
47
  - headers.feature
45
48
  - identical_request_sequence.feature
@@ -32,7 +32,7 @@ Feature: Preserve Exact Body Bytes
32
32
 
33
33
  VCR.configure do |c|
34
34
  c.cassette_library_dir = 'cassettes'
35
- c.hook_into :fakeweb
35
+ c.hook_into :webmock
36
36
  c.preserve_exact_body_bytes do |http_message|
37
37
  http_message.body.encoding.name == 'ASCII-8BIT' ||
38
38
  !http_message.body.valid_encoding?
@@ -79,7 +79,7 @@ Feature: Preserve Exact Body Bytes
79
79
 
80
80
  VCR.configure do |c|
81
81
  c.cassette_library_dir = 'cassettes'
82
- c.hook_into :fakeweb
82
+ c.hook_into :webmock
83
83
  c.default_cassette_options = { :serialize_with => :json }
84
84
  end
85
85
 
@@ -0,0 +1,84 @@
1
+ Feature: query_parser
2
+
3
+ By default, VCR will parse query strings using `CGI.parse` from the Ruby
4
+ standard library. This may not be the most optimal or performant library
5
+ available. You can set the `query_parser` configuration option to use a
6
+ different parser (such as `Rack::Utils.method(:parse_query)`) to decode,
7
+ normalize, and/or provide a comparison object for query strings.
8
+
9
+ The configured query parser needs to expose a `.call` method that returns an
10
+ object which is comparable. This instance needs to implement the following
11
+ API:
12
+
13
+ * `#==` => boolean
14
+
15
+ Background:
16
+ Given a file named "cassettes/example.yml" with:
17
+ """
18
+ ---
19
+ http_interactions:
20
+ - request:
21
+ method: get
22
+ uri: http://url.example.com/?bravo=2&alpha=1
23
+ body:
24
+ encoding: UTF-8
25
+ string: ""
26
+ headers: {}
27
+ response:
28
+ status:
29
+ code: 200
30
+ message: OK
31
+ headers:
32
+ Content-Length:
33
+ - "5"
34
+ body:
35
+ encoding: UTF-8
36
+ string: Hello
37
+ http_version: "1.1"
38
+ recorded_at: Tue, 25 Sep 2012 04:58:44 GMT
39
+ recorded_with: VCR 2.2.5
40
+ """
41
+
42
+ Scenario: the VCR query parser gets its value from `query_parser`
43
+ Given a file named "query_parser.rb" with:
44
+ """ruby
45
+ require 'vcr'
46
+ require 'rack'
47
+
48
+ VCR.configure do |c|
49
+ c.query_parser = lambda { |query| raise query.inspect }
50
+ c.default_cassette_options = {:match_requests_on => [:query]}
51
+ c.hook_into :webmock
52
+ c.cassette_library_dir = 'cassettes'
53
+ end
54
+
55
+ uri = URI.parse('http://other-url.example.com/?bravo=2&alpha=1')
56
+ VCR.use_cassette('example') do
57
+ puts Net::HTTP.get_response(uri).body
58
+ end
59
+ """
60
+ When I run `ruby query_parser.rb`
61
+ Then it should fail with an error like:
62
+ """
63
+ "alpha=1&bravo=2"
64
+ """
65
+
66
+
67
+ Scenario: the `query_parser` defaults to the standard library's `CGI.parse`
68
+ Given a file named "query_parser_default.rb" with:
69
+ """ruby
70
+ require 'vcr'
71
+
72
+ VCR.configure do |c|
73
+ c.hook_into :webmock
74
+ c.default_cassette_options = {:match_requests_on => [:query]}
75
+ c.cassette_library_dir = 'cassettes'
76
+ end
77
+
78
+ uri = URI.parse('http://other-url.example.com/?bravo=2&alpha=1')
79
+ VCR.use_cassette('example') do
80
+ puts Net::HTTP.get_response(uri).body
81
+ end
82
+ """
83
+ When I run `ruby query_parser_default.rb`
84
+ Then it should pass with "Hello"
@@ -8,7 +8,7 @@ Feature: uri_parser
8
8
 
9
9
  The configured URI parser needs to expose a `.parse` class method
10
10
  that returns an instance of the uri. This uri instance needs to
11
- implement the folllowing API:
11
+ implement the following API:
12
12
 
13
13
  * `#scheme` => a string
14
14
  * `#host` => a string
@@ -1,4 +1,4 @@
1
- @exclude-18
1
+ @exclude-18 @exclude-1.9.3p327
2
2
  Feature: around_http_request hook
3
3
 
4
4
  The `around_http_request` hook wraps each HTTP request. It can be used