faraday 1.1.0 → 1.2.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.
- checksums.yaml +4 -4
- data/lib/faraday.rb +49 -41
- data/lib/faraday/adapter/em_http.rb +15 -12
- data/lib/faraday/adapter/em_synchrony.rb +16 -13
- data/lib/faraday/adapter/net_http.rb +18 -17
- data/lib/faraday/dependency_loader.rb +1 -3
- data/lib/faraday/methods.rb +6 -0
- data/lib/faraday/middleware.rb +14 -4
- data/lib/faraday/request/retry.rb +1 -1
- data/lib/faraday/response.rb +0 -6
- data/lib/faraday/version.rb +5 -0
- data/spec/faraday/middleware_spec.rb +32 -6
- data/spec/faraday/request/retry_spec.rb +1 -1
- data/spec/support/shared_examples/adapter.rb +2 -1
- data/spec/support/shared_examples/request_method.rb +36 -8
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a36c97856713ca2198c7ec0d6599136ecbf2033f4a192aab2f075135403e240c
|
4
|
+
data.tar.gz: '092c756c000f6650280080e92446aae63bea6db4603153512f78c5e748ba543a'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 00c58868dc1a050bfed2f55c20543477aff2841f67665cffe3a4f736414934024c1c6c162ef1022e4d8cb8691f7abf2a756062a792988438748317f5edd7bcae
|
7
|
+
data.tar.gz: 61090e76494671608acac5c406f7505bc3f01eef822dbc48739fecb7fc28b80dd43f54a3af4b5696e6bd29769440b4cae0d2c07a91c601e9c320e5061c4f32a5
|
data/lib/faraday.rb
CHANGED
@@ -1,11 +1,32 @@
|
|
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
|
+
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
|
+
|
9
30
|
# This is the main namespace for Faraday.
|
10
31
|
#
|
11
32
|
# It provides methods to create {Connection} objects, and HTTP-related
|
@@ -19,10 +40,6 @@ require 'faraday/dependency_loader'
|
|
19
40
|
# conn.get '/'
|
20
41
|
#
|
21
42
|
module Faraday
|
22
|
-
VERSION = '1.1.0'
|
23
|
-
METHODS_WITH_QUERY = %w[get head delete trace].freeze
|
24
|
-
METHODS_WITH_BODY = %w[post put patch].freeze
|
25
|
-
|
26
43
|
class << self
|
27
44
|
# The root path that Faraday is being loaded from.
|
28
45
|
#
|
@@ -107,6 +124,34 @@ module Faraday
|
|
107
124
|
default_connection.respond_to?(symbol, include_private) || super
|
108
125
|
end
|
109
126
|
|
127
|
+
# @overload default_connection
|
128
|
+
# Gets the default connection used for simple scripts.
|
129
|
+
# @return [Faraday::Connection] a connection configured with
|
130
|
+
# the default_adapter.
|
131
|
+
# @overload default_connection=(connection)
|
132
|
+
# @param connection [Faraday::Connection]
|
133
|
+
# Sets the default {Faraday::Connection} for simple scripts that
|
134
|
+
# access the Faraday constant directly, such as
|
135
|
+
# <code>Faraday.get "https://faraday.com"</code>.
|
136
|
+
def default_connection
|
137
|
+
@default_connection ||= Connection.new(default_connection_options)
|
138
|
+
end
|
139
|
+
|
140
|
+
# Gets the default connection options used when calling {Faraday#new}.
|
141
|
+
#
|
142
|
+
# @return [Faraday::ConnectionOptions]
|
143
|
+
def default_connection_options
|
144
|
+
@default_connection_options ||= ConnectionOptions.new
|
145
|
+
end
|
146
|
+
|
147
|
+
# Sets the default options used when calling {Faraday#new}.
|
148
|
+
#
|
149
|
+
# @param options [Hash, Faraday::ConnectionOptions]
|
150
|
+
def default_connection_options=(options)
|
151
|
+
@default_connection = nil
|
152
|
+
@default_connection_options = ConnectionOptions.from(options)
|
153
|
+
end
|
154
|
+
|
110
155
|
private
|
111
156
|
|
112
157
|
# Internal: Proxies method calls on the Faraday constant to
|
@@ -125,42 +170,5 @@ module Faraday
|
|
125
170
|
self.lib_path = File.expand_path 'faraday', __dir__
|
126
171
|
self.default_adapter = :net_http
|
127
172
|
|
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 defined?(::Faraday::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
173
|
require_lib 'autoload' unless ENV['FARADAY_NO_AUTOLOAD']
|
166
174
|
end
|
@@ -90,7 +90,21 @@ module Faraday
|
|
90
90
|
|
91
91
|
include Options
|
92
92
|
|
93
|
-
dependency
|
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
|
|
@@ -273,14 +287,3 @@ module Faraday
|
|
273
287
|
end
|
274
288
|
end
|
275
289
|
end
|
276
|
-
|
277
|
-
if Faraday::Adapter::EMHttp.loaded?
|
278
|
-
begin
|
279
|
-
require 'openssl'
|
280
|
-
rescue LoadError
|
281
|
-
warn 'Warning: no such file to load -- openssl. ' \
|
282
|
-
'Make sure it is installed if you want HTTPS support'
|
283
|
-
else
|
284
|
-
require 'faraday/adapter/em_http_ssl_patch'
|
285
|
-
end
|
286
|
-
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
|
@@ -53,14 +53,15 @@ module Faraday
|
|
53
53
|
end
|
54
54
|
|
55
55
|
def net_http_connection(env)
|
56
|
-
|
57
|
-
Net::HTTP::Proxy(proxy[:uri].hostname, proxy[:uri].port,
|
58
|
-
proxy[:user], proxy[:password])
|
59
|
-
else
|
60
|
-
Net::HTTP
|
61
|
-
end
|
56
|
+
proxy = env[:request][:proxy]
|
62
57
|
port = env[:url].port || (env[:url].scheme == 'https' ? 443 : 80)
|
63
|
-
|
58
|
+
if proxy
|
59
|
+
Net::HTTP.new(env[:url].hostname, port,
|
60
|
+
proxy[:uri].hostname, proxy[:uri].port,
|
61
|
+
proxy[:user], proxy[:password])
|
62
|
+
else
|
63
|
+
Net::HTTP.new(env[:url].hostname, port, nil)
|
64
|
+
end
|
64
65
|
end
|
65
66
|
|
66
67
|
def call(env)
|
@@ -182,7 +183,7 @@ module Faraday
|
|
182
183
|
end
|
183
184
|
|
184
185
|
if (sec = http.respond_to?(:write_timeout=) &&
|
185
|
-
|
186
|
+
request_timeout(:write, req))
|
186
187
|
http.write_timeout = sec
|
187
188
|
end
|
188
189
|
|
@@ -200,19 +201,19 @@ module Faraday
|
|
200
201
|
return ssl[:cert_store] if ssl[:cert_store]
|
201
202
|
|
202
203
|
@ssl_cert_store ||= begin
|
203
|
-
|
204
|
-
|
205
|
-
|
204
|
+
# Use the default cert store by default, i.e. system ca certs
|
205
|
+
OpenSSL::X509::Store.new.tap(&:set_default_paths)
|
206
|
+
end
|
206
207
|
end
|
207
208
|
|
208
209
|
def ssl_verify_mode(ssl)
|
209
210
|
ssl[:verify_mode] || begin
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
211
|
+
if ssl.fetch(:verify, true)
|
212
|
+
OpenSSL::SSL::VERIFY_PEER
|
213
|
+
else
|
214
|
+
OpenSSL::SSL::VERIFY_NONE
|
215
|
+
end
|
216
|
+
end
|
216
217
|
end
|
217
218
|
end
|
218
219
|
end
|
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'ruby2_keywords'
|
4
|
-
|
5
3
|
module Faraday
|
6
4
|
# DependencyLoader helps Faraday adapters and middleware load dependencies.
|
7
5
|
module DependencyLoader
|
@@ -15,7 +13,7 @@ module Faraday
|
|
15
13
|
self.load_error = e
|
16
14
|
end
|
17
15
|
|
18
|
-
|
16
|
+
def new(*)
|
19
17
|
unless loaded?
|
20
18
|
raise "missing dependency for #{self}: #{load_error.message}"
|
21
19
|
end
|
data/lib/faraday/middleware.rb
CHANGED
@@ -6,15 +6,25 @@ module Faraday
|
|
6
6
|
extend MiddlewareRegistry
|
7
7
|
extend DependencyLoader
|
8
8
|
|
9
|
-
|
9
|
+
attr_reader :app, :options
|
10
|
+
|
11
|
+
def initialize(app = nil, options = {})
|
10
12
|
@app = app
|
13
|
+
@options = options
|
14
|
+
end
|
15
|
+
|
16
|
+
def call(env)
|
17
|
+
on_request(env) if respond_to?(:on_request)
|
18
|
+
app.call(env).on_complete do |environment|
|
19
|
+
on_complete(environment) if respond_to?(:on_complete)
|
20
|
+
end
|
11
21
|
end
|
12
22
|
|
13
23
|
def close
|
14
|
-
if
|
15
|
-
|
24
|
+
if app.respond_to?(:close)
|
25
|
+
app.close
|
16
26
|
else
|
17
|
-
warn "#{
|
27
|
+
warn "#{app} does not implement \#close!"
|
18
28
|
end
|
19
29
|
end
|
20
30
|
end
|
@@ -21,7 +21,7 @@ module Faraday
|
|
21
21
|
# end
|
22
22
|
#
|
23
23
|
# This example will result in a first interval that is random between 0.05
|
24
|
-
# and 0.075 and a second interval that is random between 0.1 and 0.
|
24
|
+
# and 0.075 and a second interval that is random between 0.1 and 0.125.
|
25
25
|
class Retry < Faraday::Middleware
|
26
26
|
DEFAULT_EXCEPTIONS = [
|
27
27
|
Errno::ETIMEDOUT, 'Timeout::Error',
|
data/lib/faraday/response.rb
CHANGED
@@ -7,12 +7,6 @@ module Faraday
|
|
7
7
|
class Response
|
8
8
|
# Used for simple response middleware.
|
9
9
|
class Middleware < Faraday::Middleware
|
10
|
-
def call(env)
|
11
|
-
@app.call(env).on_complete do |environment|
|
12
|
-
on_complete(environment)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
10
|
# Override this to modify the environment after the response has finished.
|
17
11
|
# Calls the `parse` method if defined
|
18
12
|
# `parse` method can be defined as private, public and protected
|
@@ -2,23 +2,49 @@
|
|
2
2
|
|
3
3
|
RSpec.describe Faraday::Middleware do
|
4
4
|
subject { described_class.new(app) }
|
5
|
+
let(:app) { double }
|
6
|
+
|
7
|
+
describe 'options' do
|
8
|
+
context 'when options are passed to the middleware' do
|
9
|
+
subject { described_class.new(app, options) }
|
10
|
+
let(:options) { { field: 'value' } }
|
11
|
+
|
12
|
+
it 'accepts options when initialized' do
|
13
|
+
expect(subject.options[:field]).to eq('value')
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe '#on_request' do
|
19
|
+
subject do
|
20
|
+
Class.new(described_class) do
|
21
|
+
def on_request(env)
|
22
|
+
# do nothing
|
23
|
+
end
|
24
|
+
end.new(app)
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'is called by #call' do
|
28
|
+
expect(app).to receive(:call).and_return(app)
|
29
|
+
expect(app).to receive(:on_complete)
|
30
|
+
is_expected.to receive(:call).and_call_original
|
31
|
+
is_expected.to receive(:on_request)
|
32
|
+
subject.call(double)
|
33
|
+
end
|
34
|
+
end
|
5
35
|
|
6
36
|
describe '#close' do
|
7
37
|
context "with app that doesn't support \#close" do
|
8
|
-
let(:app) { double }
|
9
|
-
|
10
38
|
it 'should issue warning' do
|
11
|
-
|
39
|
+
is_expected.to receive(:warn)
|
12
40
|
subject.close
|
13
41
|
end
|
14
42
|
end
|
15
43
|
|
16
44
|
context "with app that supports \#close" do
|
17
|
-
let(:app) { double }
|
18
|
-
|
19
45
|
it 'should issue warning' do
|
20
46
|
expect(app).to receive(:close)
|
21
|
-
|
47
|
+
is_expected.to_not receive(:warn)
|
22
48
|
subject.close
|
23
49
|
end
|
24
50
|
end
|
@@ -117,7 +117,7 @@ RSpec.describe Faraday::Request::Retry do
|
|
117
117
|
let(:options) { { max: 2, interval: 0.1, interval_randomness: 0.05 } }
|
118
118
|
let(:middleware) { Faraday::Request::Retry.new(nil, options) }
|
119
119
|
|
120
|
-
it { expect(middleware.send(:calculate_retry_interval, 2)).to be_between(0.1, 0.
|
120
|
+
it { expect(middleware.send(:calculate_retry_interval, 2)).to be_between(0.1, 0.105) }
|
121
121
|
end
|
122
122
|
end
|
123
123
|
|
@@ -33,6 +33,7 @@ shared_examples 'adapter examples' do |**options|
|
|
33
33
|
|
34
34
|
let(:protocol) { ssl_mode? ? 'https' : 'http' }
|
35
35
|
let(:remote) { "#{protocol}://example.com" }
|
36
|
+
let(:stub_remote) { remote }
|
36
37
|
|
37
38
|
let(:conn) do
|
38
39
|
conn_options[:ssl] ||= {}
|
@@ -46,7 +47,7 @@ shared_examples 'adapter examples' do |**options|
|
|
46
47
|
end
|
47
48
|
end
|
48
49
|
|
49
|
-
let!(:request_stub) { stub_request(http_method,
|
50
|
+
let!(:request_stub) { stub_request(http_method, stub_remote) }
|
50
51
|
|
51
52
|
after do
|
52
53
|
expect(request_stub).to have_been_requested unless request_stub.disabled?
|
@@ -1,5 +1,19 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
shared_examples 'proxy examples' do
|
4
|
+
it 'handles requests with proxy' do
|
5
|
+
res = conn.public_send(http_method, '/')
|
6
|
+
|
7
|
+
expect(res.status).to eq(200)
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'handles proxy failures' do
|
11
|
+
request_stub.to_return(status: 407)
|
12
|
+
|
13
|
+
expect { conn.public_send(http_method, '/') }.to raise_error(Faraday::ProxyAuthError)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
3
17
|
shared_examples 'a request method' do |http_method|
|
4
18
|
let(:query_or_body) { method_with_body?(http_method) ? :body : :query }
|
5
19
|
let(:response) { conn.public_send(http_method, '/') }
|
@@ -218,17 +232,31 @@ shared_examples 'a request method' do |http_method|
|
|
218
232
|
end
|
219
233
|
end
|
220
234
|
|
221
|
-
|
222
|
-
|
235
|
+
context 'when a proxy is provided as option' do
|
236
|
+
before do
|
237
|
+
conn_options[:proxy] = 'http://env-proxy.com:80'
|
238
|
+
end
|
223
239
|
|
224
|
-
|
225
|
-
expect(res.status).to eq(200)
|
240
|
+
include_examples 'proxy examples'
|
226
241
|
end
|
227
242
|
|
228
|
-
|
229
|
-
|
230
|
-
request_stub.to_return(status: 407)
|
243
|
+
context 'when http_proxy env variable is set' do
|
244
|
+
let(:proxy_url) { 'http://env-proxy.com:80' }
|
231
245
|
|
232
|
-
|
246
|
+
around do |example|
|
247
|
+
with_env 'http_proxy' => proxy_url do
|
248
|
+
example.run
|
249
|
+
end
|
250
|
+
end
|
251
|
+
|
252
|
+
include_examples 'proxy examples'
|
253
|
+
|
254
|
+
context 'when the env proxy is ignored' do
|
255
|
+
around do |example|
|
256
|
+
with_env_proxy_disabled(&example)
|
257
|
+
end
|
258
|
+
|
259
|
+
include_examples 'proxy examples'
|
260
|
+
end
|
233
261
|
end
|
234
262
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: faraday
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- "@technoweenie"
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2020-
|
13
|
+
date: 2020-12-23 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: multipart-post
|
@@ -81,6 +81,7 @@ files:
|
|
81
81
|
- lib/faraday/error.rb
|
82
82
|
- lib/faraday/file_part.rb
|
83
83
|
- lib/faraday/logging/formatter.rb
|
84
|
+
- lib/faraday/methods.rb
|
84
85
|
- lib/faraday/middleware.rb
|
85
86
|
- lib/faraday/middleware_registry.rb
|
86
87
|
- lib/faraday/options.rb
|
@@ -106,6 +107,7 @@ files:
|
|
106
107
|
- lib/faraday/utils.rb
|
107
108
|
- lib/faraday/utils/headers.rb
|
108
109
|
- lib/faraday/utils/params_hash.rb
|
110
|
+
- lib/faraday/version.rb
|
109
111
|
- spec/external_adapters/faraday_specs_setup.rb
|
110
112
|
- spec/faraday/adapter/em_http_spec.rb
|
111
113
|
- spec/faraday/adapter/em_synchrony_spec.rb
|
@@ -157,7 +159,7 @@ licenses:
|
|
157
159
|
- MIT
|
158
160
|
metadata:
|
159
161
|
homepage_uri: https://lostisland.github.io/faraday
|
160
|
-
changelog_uri: https://github.com/lostisland/faraday/releases/tag/v1.
|
162
|
+
changelog_uri: https://github.com/lostisland/faraday/releases/tag/v1.2.0
|
161
163
|
source_code_uri: https://github.com/lostisland/faraday
|
162
164
|
bug_tracker_uri: https://github.com/lostisland/faraday/issues
|
163
165
|
post_install_message:
|