faraday 1.0.0 → 1.3.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.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +104 -0
  3. data/LICENSE.md +1 -1
  4. data/README.md +4 -5
  5. data/examples/client_spec.rb +1 -1
  6. data/lib/faraday.rb +51 -41
  7. data/lib/faraday/adapter.rb +1 -1
  8. data/lib/faraday/adapter/em_http.rb +18 -14
  9. data/lib/faraday/adapter/em_synchrony.rb +16 -13
  10. data/lib/faraday/adapter/excon.rb +2 -2
  11. data/lib/faraday/adapter/httpclient.rb +2 -1
  12. data/lib/faraday/adapter/net_http_persistent.rb +1 -1
  13. data/lib/faraday/adapter/typhoeus.rb +1 -1
  14. data/lib/faraday/adapter_registry.rb +3 -1
  15. data/lib/faraday/autoload.rb +1 -2
  16. data/lib/faraday/connection.rb +5 -4
  17. data/lib/faraday/encoders/flat_params_encoder.rb +9 -2
  18. data/lib/faraday/encoders/nested_params_encoder.rb +7 -2
  19. data/lib/faraday/error.rb +20 -0
  20. data/lib/faraday/methods.rb +6 -0
  21. data/lib/faraday/middleware.rb +14 -4
  22. data/lib/faraday/options.rb +4 -8
  23. data/lib/faraday/rack_builder.rb +13 -12
  24. data/lib/faraday/request.rb +20 -10
  25. data/lib/faraday/request/authorization.rb +3 -1
  26. data/lib/faraday/request/multipart.rb +10 -3
  27. data/lib/faraday/request/retry.rb +2 -2
  28. data/lib/faraday/request/url_encoded.rb +3 -1
  29. data/lib/faraday/response.rb +4 -7
  30. data/lib/faraday/response/raise_error.rb +12 -1
  31. data/lib/faraday/utils.rb +11 -3
  32. data/lib/faraday/utils/headers.rb +2 -2
  33. data/lib/faraday/version.rb +5 -0
  34. data/spec/faraday/adapter/em_http_spec.rb +1 -1
  35. data/spec/faraday/adapter/em_synchrony_spec.rb +1 -1
  36. data/spec/faraday/adapter/patron_spec.rb +1 -1
  37. data/spec/faraday/adapter/test_spec.rb +260 -0
  38. data/spec/faraday/connection_spec.rb +30 -0
  39. data/spec/faraday/error_spec.rb +15 -0
  40. data/spec/faraday/middleware_spec.rb +32 -6
  41. data/spec/faraday/params_encoders/flat_spec.rb +8 -0
  42. data/spec/faraday/params_encoders/nested_spec.rb +8 -0
  43. data/spec/faraday/rack_builder_spec.rb +150 -1
  44. data/spec/faraday/request/authorization_spec.rb +2 -2
  45. data/spec/faraday/request/multipart_spec.rb +41 -13
  46. data/spec/faraday/request/retry_spec.rb +1 -1
  47. data/spec/faraday/request/url_encoded_spec.rb +13 -0
  48. data/spec/faraday/request_spec.rb +16 -5
  49. data/spec/faraday/response/middleware_spec.rb +16 -0
  50. data/spec/faraday/response/raise_error_spec.rb +63 -0
  51. data/spec/support/shared_examples/adapter.rb +2 -1
  52. data/spec/support/shared_examples/request_method.rb +39 -11
  53. metadata +37 -7
  54. data/UPGRADING.md +0 -55
  55. data/lib/faraday/adapter/net_http.rb +0 -209
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9d3d650c5d465a0862cddd7ab2ed27fbfb4a6e5f2cfcbb54ba753bcc1ce9e40e
4
- data.tar.gz: 953336deeb3dd2e0228368209bdffc7815b376772269c439e21374bc22b70484
3
+ metadata.gz: f9d5c03389960019760f7f65d5546b799c93d2fcc810ed26c3c6a859a0716586
4
+ data.tar.gz: faf33941683ee46c907dad01243f5be4ca60fe46336bbfcf9e534afa7bfc74e3
5
5
  SHA512:
6
- metadata.gz: b80c084a8714d995dec61c918891a63720dbcdddf2eb3ecb7106f40a03bb341c4f03ffe976365c5450b2dcffd0b1f52c1cd4320ea24591dfaef7d5fdbbe12562
7
- data.tar.gz: 67f8134fae885d3bb2e621afa701d6d535409bbb0141ad699f4d290059d61bf856915f622e214251f05e8b893a69bf68439118074712a22e75e3705b249dbb85
6
+ metadata.gz: 67bea3c978d5e531a47513b81f56f144ccd696ee0adf67ea14b2198ed29ea809cf0dd1223c400feef67688af10db8b9a8abd239cb284c111300a420190aef9a4
7
+ data.tar.gz: a520bc7078beb472b43f963921040230ab29d14b7df138a85bc3fce77f1cbfc5c74f2d41a380ad9821b7d0cffa9f3d3c03448a258ecaa7c6dfbb993df02ac3e9
data/CHANGELOG.md CHANGED
@@ -1,5 +1,109 @@
1
1
  # Faraday Changelog
2
2
 
3
+ ## [v1.3.0](https://github.com/lostisland/faraday/releases/tag/v1.3.0) (2020-12-31)
4
+
5
+ ### Highlights
6
+ Faraday v1.3.0 is the first release to officially support Ruby 3.0 in the CI pipeline 🎉 🍾!
7
+
8
+ This is also the first release with a previously "included" adapter (Net::HTTP) being isolated into a [separate gem](https://github.com/lostisland/faraday-net_http) 🎊!
9
+ The new adapter is added to Faraday as a dependency for now, so that means full backwards-compatibility, but just to be safe be careful when upgrading!
10
+
11
+ This is a huge step towards are Faraday v2.0 objective of pushing adapters and middleware into separate gems.
12
+ Many thanks to the Faraday Team, @JanDintel and everyone who attended the [ROSS Conf remote event](https://www.rossconf.io/event/remote/)
13
+
14
+ ### Features
15
+
16
+ * Improves consistency with Faraday::Error and Faraday::RaiseError (#1229, @qsona, @iMacTia)
17
+
18
+ ### Fixes
19
+
20
+ * Don't assign to global ::Timer (#1227, @bpo)
21
+
22
+ ### Documentation
23
+
24
+ * CHANGELOG: add releases after 1.0 (#1225, @olleolleolle)
25
+ * Improves retry middleware documentation. (#1228, @iMacTia)
26
+
27
+ ### Misc
28
+
29
+ * Move out Net::HTTP adapter (#1222, @JanDintel, @iMacTia)
30
+ * Adds Ruby 3.0 to CI Matrix (#1226, @iMacTia)
31
+
32
+
33
+ ## [v1.2.0](https://github.com/lostisland/faraday/releases/tag/v1.2.0) (2020-12-23)
34
+
35
+ ### Features
36
+
37
+ * Introduces `on_request` and `on_complete` methods in `Faraday::Middleware`. (#1194, @iMacTia)
38
+
39
+ ### Fixes
40
+
41
+ * Require 'date' to avoid retry exception (#1206, @rustygeldmacher)
42
+ * Fix rdebug recursion issue (#1205, @native-api)
43
+ * Update call to `em_http_ssl_patch` (#1202, @kylekeesling)
44
+ * `EmHttp` adapter: drop superfluous loaded? check (#1213, @olleolleolle)
45
+ * Avoid 1 use of keyword hackery (#1211, @grosser)
46
+ * Fix #1219 `Net::HTTP` still uses env proxy (#1221, @iMacTia)
47
+
48
+ ### Documentation
49
+
50
+ * Add comment in gemspec to explain exposure of `examples` and `spec` folders. (#1192, @iMacTia)
51
+ * Adapters, how to create them (#1193, @olleolleolle)
52
+ * Update documentation on using the logger (#1196, @tijmenb)
53
+ * Adjust the retry documentation and spec to align with implementation (#1198, @nbeyer)
54
+
55
+ ### Misc
56
+
57
+ * Test against ruby head (#1208, @grosser)
58
+
59
+ ## [v1.1.0](https://github.com/lostisland/faraday/releases/tag/v1.1.0) (2020-10-17)
60
+
61
+ ### Features
62
+
63
+ * Makes parameters sorting configurable (#1162 @wishdev)
64
+ * Introduces `flat_encode` option for multipart adapter. (#1163 @iMacTia)
65
+ * Include request info in exceptions raised by RaiseError Middleware (#1181 @SandroDamilano)
66
+
67
+ ### Fixes
68
+
69
+ * Avoid `last arg as keyword param` warning when building user middleware on Ruby 2.7 (#1153 @dgholz)
70
+ * Limits net-http-persistent version to < 4.0 (#1156 @iMacTia)
71
+ * Update `typhoeus` to new stable version (`1.4`) (#1159 @AlexWayfer)
72
+ * Properly fix test failure with Rack 2.1+. (#1171 @voxik)
73
+
74
+ ### Documentation
75
+
76
+ * Improves documentation on how to contribute to the site by using Docker. (#1175 @iMacTia)
77
+ * Remove retry_change_requests from documentation (#1185 @stim371)
78
+
79
+ ### Misc
80
+
81
+ * Link from GitHub Actions badge to CI workflow (#1141 @olleolleolle)
82
+ * Return tests of `Test` adapter (#1147 @AlexWayfer)
83
+ * Add 1.0 release to wording in CONTRIBUTING (#1155 @olleolleolle)
84
+ * Fix linting bumping Rubocop to 0.90.0 (#1182 @iMacTia)
85
+ * Drop `git ls-files` in gemspec (#1183 @utkarsh2102)
86
+ * Upgrade CI to ruby/setup-ruby (#1187 @gogainda)
87
+
88
+ ## [v1.0.1](https://github.com/lostisland/faraday/releases/tag/v1.0.1) (2020-03-29)
89
+
90
+ ### Fixes
91
+
92
+ * Use Net::HTTP#start(&block) to ensure closed TCP connections (#1117)
93
+ * Fully qualify constants to be checked (#1122)
94
+ * Allows `parse` method to be private/protected in response middleware (#1123)
95
+ * Encode Spaces in Query Strings as '%20' Instead of '+' (#1125)
96
+ * Limits rack to v2.0.x (#1127)
97
+ * Adapter Registry reads also use mutex (#1136)
98
+
99
+ ### Documentation
100
+
101
+ * Retry middleware documentation fix (#1109)
102
+ * Docs(retry): precise usage of retry-after (#1111)
103
+ * README: Link the logo to the website (#1112)
104
+ * Website: add search bar (#1116)
105
+ * Fix request/response mix-up in docs text (#1132)
106
+
3
107
  ## v1.0
4
108
 
5
109
  Features:
data/LICENSE.md CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2009-2019 Rick Olson, Zack Hobson
1
+ Copyright (c) 2009-2020 Rick Olson, Zack Hobson
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
@@ -1,8 +1,7 @@
1
- # ![Faraday](./docs/assets/img/repo-card-slim.png)
1
+ # [![Faraday](./docs/assets/img/repo-card-slim.png)][website]
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/faraday.svg)](https://rubygems.org/gems/faraday)
4
- ![GitHub Actions CI](https://github.com/lostisland/faraday/workflows/CI/badge.svg)
5
- [![Test Coverage](https://api.codeclimate.com/v1/badges/f869daab091ceef1da73/test_coverage)](https://codeclimate.com/github/lostisland/faraday/test_coverage)
4
+ [![GitHub Actions CI](https://github.com/lostisland/faraday/workflows/CI/badge.svg)](https://github.com/lostisland/faraday/actions?query=workflow%3ACI)
6
5
  [![Maintainability](https://api.codeclimate.com/v1/badges/f869daab091ceef1da73/maintainability)](https://codeclimate.com/github/lostisland/faraday/maintainability)
7
6
  [![Gitter](https://badges.gitter.im/lostisland/faraday.svg)](https://gitter.im/lostisland/faraday?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
8
7
 
@@ -43,12 +42,12 @@ Open the issues page and check for the `help wanted` label!
43
42
  But before you start coding, please read our [Contributing Guide][contributing]
44
43
 
45
44
  ## Copyright
46
- &copy; 2009 - 2019, the [Faraday Team][faraday_team]. Website and branding design by [Elena Lo Piccolo](https://elelopic.design).
45
+ &copy; 2009 - 2020, the [Faraday Team][faraday_team]. Website and branding design by [Elena Lo Piccolo](https://elelopic.design).
47
46
 
48
47
  [website]: https://lostisland.github.io/faraday
49
48
  [faraday_team]: https://lostisland.github.io/faraday/team
50
49
  [contributing]: https://github.com/lostisland/faraday/blob/master/.github/CONTRIBUTING.md
51
- [apidoc]: http://www.rubydoc.info/gems/faraday
50
+ [apidoc]: https://www.rubydoc.info/github/lostisland/faraday
52
51
  [actions]: https://github.com/lostisland/faraday/actions
53
52
  [jruby]: http://jruby.org/
54
53
  [rubinius]: http://rubini.us/
@@ -19,7 +19,7 @@ class Client
19
19
  end
20
20
  end
21
21
 
22
- Rspec.describe Client do
22
+ RSpec.describe Client do
23
23
  let(:stubs) { Faraday::Adapter::Test::Stubs.new }
24
24
  let(:conn) { Faraday.new { |b| b.adapter(:test, stubs) } }
25
25
  let(:client) { Client.new(conn) }
data/lib/faraday.rb CHANGED
@@ -1,11 +1,34 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'cgi'
4
+ require 'date'
4
5
  require 'set'
5
6
  require 'forwardable'
6
7
  require 'faraday/middleware_registry'
7
8
  require 'faraday/dependency_loader'
8
9
 
10
+ unless defined?(::Faraday::Timer)
11
+ require 'timeout'
12
+ ::Faraday::Timer = Timeout
13
+ end
14
+
15
+ require 'faraday/version'
16
+ require 'faraday/methods'
17
+ require 'faraday/utils'
18
+ require 'faraday/options'
19
+ require 'faraday/connection'
20
+ require 'faraday/rack_builder'
21
+ require 'faraday/parameters'
22
+ require 'faraday/middleware'
23
+ require 'faraday/adapter'
24
+ require 'faraday/request'
25
+ require 'faraday/response'
26
+ require 'faraday/error'
27
+ require 'faraday/file_part'
28
+ require 'faraday/param_part'
29
+
30
+ require 'faraday/net_http'
31
+
9
32
  # This is the main namespace for Faraday.
10
33
  #
11
34
  # It provides methods to create {Connection} objects, and HTTP-related
@@ -19,10 +42,6 @@ require 'faraday/dependency_loader'
19
42
  # conn.get '/'
20
43
  #
21
44
  module Faraday
22
- VERSION = '1.0.0'
23
- METHODS_WITH_QUERY = %w[get head delete trace].freeze
24
- METHODS_WITH_BODY = %w[post put patch].freeze
25
-
26
45
  class << self
27
46
  # The root path that Faraday is being loaded from.
28
47
  #
@@ -107,6 +126,34 @@ module Faraday
107
126
  default_connection.respond_to?(symbol, include_private) || super
108
127
  end
109
128
 
129
+ # @overload default_connection
130
+ # Gets the default connection used for simple scripts.
131
+ # @return [Faraday::Connection] a connection configured with
132
+ # the default_adapter.
133
+ # @overload default_connection=(connection)
134
+ # @param connection [Faraday::Connection]
135
+ # Sets the default {Faraday::Connection} for simple scripts that
136
+ # access the Faraday constant directly, such as
137
+ # <code>Faraday.get "https://faraday.com"</code>.
138
+ def default_connection
139
+ @default_connection ||= Connection.new(default_connection_options)
140
+ end
141
+
142
+ # Gets the default connection options used when calling {Faraday#new}.
143
+ #
144
+ # @return [Faraday::ConnectionOptions]
145
+ def default_connection_options
146
+ @default_connection_options ||= ConnectionOptions.new
147
+ end
148
+
149
+ # Sets the default options used when calling {Faraday#new}.
150
+ #
151
+ # @param options [Hash, Faraday::ConnectionOptions]
152
+ def default_connection_options=(options)
153
+ @default_connection = nil
154
+ @default_connection_options = ConnectionOptions.from(options)
155
+ end
156
+
110
157
  private
111
158
 
112
159
  # Internal: Proxies method calls on the Faraday constant to
@@ -125,42 +172,5 @@ module Faraday
125
172
  self.lib_path = File.expand_path 'faraday', __dir__
126
173
  self.default_adapter = :net_http
127
174
 
128
- # @overload default_connection
129
- # Gets the default connection used for simple scripts.
130
- # @return [Faraday::Connection] a connection configured with
131
- # the default_adapter.
132
- # @overload default_connection=(connection)
133
- # @param connection [Faraday::Connection]
134
- # Sets the default {Faraday::Connection} for simple scripts that
135
- # access the Faraday constant directly, such as
136
- # <code>Faraday.get "https://faraday.com"</code>.
137
- def self.default_connection
138
- @default_connection ||= Connection.new(default_connection_options)
139
- end
140
-
141
- # Gets the default connection options used when calling {Faraday#new}.
142
- #
143
- # @return [Faraday::ConnectionOptions]
144
- def self.default_connection_options
145
- @default_connection_options ||= ConnectionOptions.new
146
- end
147
-
148
- # Sets the default options used when calling {Faraday#new}.
149
- #
150
- # @param options [Hash, Faraday::ConnectionOptions]
151
- def self.default_connection_options=(options)
152
- @default_connection = nil
153
- @default_connection_options = ConnectionOptions.from(options)
154
- end
155
-
156
- unless const_defined? :Timer
157
- require 'timeout'
158
- Timer = Timeout
159
- end
160
-
161
- require_libs 'utils', 'options', 'connection', 'rack_builder', 'parameters',
162
- 'middleware', 'adapter', 'request', 'response', 'error',
163
- 'file_part', 'param_part'
164
-
165
175
  require_lib 'autoload' unless ENV['FARADAY_NO_AUTOLOAD']
166
176
  end
@@ -11,7 +11,6 @@ module Faraday
11
11
 
12
12
  register_middleware File.expand_path('adapter', __dir__),
13
13
  test: [:Test, 'test'],
14
- net_http: [:NetHttp, 'net_http'],
15
14
  net_http_persistent: [
16
15
  :NetHttpPersistent,
17
16
  'net_http_persistent'
@@ -27,6 +26,7 @@ module Faraday
27
26
  # This module marks an Adapter as supporting parallel requests.
28
27
  module Parallelism
29
28
  attr_writer :supports_parallel
29
+
30
30
  def supports_parallel?
31
31
  @supports_parallel
32
32
  end
@@ -90,7 +90,21 @@ module Faraday
90
90
 
91
91
  include Options
92
92
 
93
- dependency 'em-http'
93
+ dependency do
94
+ require 'em-http'
95
+
96
+ begin
97
+ require 'openssl'
98
+ rescue LoadError
99
+ warn 'Warning: no such file to load -- openssl. ' \
100
+ 'Make sure it is installed if you want HTTPS support'
101
+ else
102
+ require 'em-http/version'
103
+ if EventMachine::HttpRequest::VERSION < '1.1.6'
104
+ require 'faraday/adapter/em_http_ssl_patch'
105
+ end
106
+ end
107
+ end
94
108
 
95
109
  self.supports_parallel = true
96
110
 
@@ -142,7 +156,8 @@ module Faraday
142
156
 
143
157
  raise Faraday::ConnectionFailed, e
144
158
  rescue StandardError => e
145
- if defined?(OpenSSL) && e.is_a?(OpenSSL::SSL::SSLError)
159
+ if defined?(::OpenSSL::SSL::SSLError) && \
160
+ e.is_a?(::OpenSSL::SSL::SSLError)
146
161
  raise Faraday::SSLError, e
147
162
  end
148
163
 
@@ -230,7 +245,7 @@ module Faraday
230
245
 
231
246
  def add(&block)
232
247
  if running?
233
- perform_request { yield }
248
+ perform_request(&block)
234
249
  else
235
250
  @registered_procs << block
236
251
  end
@@ -272,14 +287,3 @@ module Faraday
272
287
  end
273
288
  end
274
289
  end
275
-
276
- if Faraday::Adapter::EMHttp.loaded?
277
- begin
278
- require 'openssl'
279
- rescue LoadError
280
- warn 'Warning: no such file to load -- openssl. ' \
281
- 'Make sure it is installed if you want HTTPS support'
282
- else
283
- require 'faraday/adapter/em_http_ssl_patch'
284
- end
285
- end
@@ -12,6 +12,22 @@ module Faraday
12
12
  require 'em-synchrony/em-http'
13
13
  require 'em-synchrony/em-multi'
14
14
  require 'fiber'
15
+
16
+ require 'faraday/adapter/em_synchrony/parallel_manager'
17
+
18
+ if Faraday::Adapter::EMSynchrony.loaded?
19
+ begin
20
+ require 'openssl'
21
+ rescue LoadError
22
+ warn 'Warning: no such file to load -- openssl. ' \
23
+ 'Make sure it is installed if you want HTTPS support'
24
+ else
25
+ require 'em-http/version'
26
+ if EventMachine::HttpRequest::VERSION < '1.1.6'
27
+ require 'faraday/adapter/em_http_ssl_patch'
28
+ end
29
+ end
30
+ end
15
31
  end
16
32
 
17
33
  self.supports_parallel = true
@@ -135,16 +151,3 @@ module Faraday
135
151
  end
136
152
  end
137
153
  end
138
-
139
- require 'faraday/adapter/em_synchrony/parallel_manager'
140
-
141
- if Faraday::Adapter::EMSynchrony.loaded?
142
- begin
143
- require 'openssl'
144
- rescue LoadError
145
- warn 'Warning: no such file to load -- openssl. ' \
146
- 'Make sure it is installed if you want HTTPS support'
147
- else
148
- require 'faraday/adapter/em_http_ssl_patch'
149
- end
150
- end
@@ -34,9 +34,9 @@ module Faraday
34
34
 
35
35
  @app.call(env)
36
36
  rescue ::Excon::Errors::SocketError => e
37
- raise Faraday::TimeoutError, e if e.message =~ /\btimeout\b/
37
+ raise Faraday::TimeoutError, e if e.message.match?(/\btimeout\b/)
38
38
 
39
- raise Faraday::SSLError, e if e.message =~ /\bcertificate\b/
39
+ raise Faraday::SSLError, e if e.message.match?(/\bcertificate\b/)
40
40
 
41
41
  raise Faraday::ConnectionFailed, e
42
42
  rescue ::Excon::Errors::Timeout => e
@@ -66,7 +66,8 @@ module Faraday
66
66
  rescue Errno::EADDRNOTAVAIL, Errno::ECONNREFUSED, IOError, SocketError
67
67
  raise Faraday::ConnectionFailed, $ERROR_INFO
68
68
  rescue StandardError => e
69
- if defined?(OpenSSL) && e.is_a?(OpenSSL::SSL::SSLError)
69
+ if defined?(::OpenSSL::SSL::SSLError) && \
70
+ e.is_a?(::OpenSSL::SSL::SSLError)
70
71
  raise Faraday::SSLError, e
71
72
  end
72
73
 
@@ -51,7 +51,7 @@ module Faraday
51
51
 
52
52
  def perform_request(http, env)
53
53
  http.request env[:url], create_request(env)
54
- rescue Errno::ETIMEDOUT => e
54
+ rescue Errno::ETIMEDOUT, Net::OpenTimeout => e
55
55
  raise Faraday::TimeoutError, e
56
56
  rescue Net::HTTP::Persistent::Error => e
57
57
  raise Faraday::TimeoutError, e if e.message.include? 'Timeout'
@@ -3,7 +3,7 @@
3
3
  module Faraday
4
4
  class Adapter
5
5
  # Typhoeus adapter. This class is just a stub, the real adapter is in
6
- # https://github.com/philsturgeon/typhoeus/blob/master/lib/typhoeus/adapters/faraday.rb
6
+ # https://github.com/typhoeus/typhoeus/blob/master/lib/typhoeus/adapters/faraday.rb
7
7
  class Typhoeus < Faraday::Adapter
8
8
  # Needs to define this method in order to support Typhoeus <= 1.3.0
9
9
  def call; end