faraday 0.9.0 → 0.9.2
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.
- data/LICENSE.md +1 -1
- data/README.md +52 -23
- data/lib/faraday.rb +1 -1
- data/lib/faraday/adapter/em_synchrony.rb +8 -0
- data/lib/faraday/adapter/excon.rb +1 -0
- data/lib/faraday/adapter/httpclient.rb +14 -3
- data/lib/faraday/adapter/net_http.rb +26 -20
- data/lib/faraday/adapter/net_http_persistent.rb +5 -3
- data/lib/faraday/adapter/patron.rb +13 -3
- data/lib/faraday/autoload.rb +0 -1
- data/lib/faraday/connection.rb +8 -3
- data/lib/faraday/options.rb +9 -0
- data/lib/faraday/parameters.rb +62 -58
- data/lib/faraday/rack_builder.rb +3 -2
- data/lib/faraday/request/retry.rb +40 -4
- data/lib/faraday/response.rb +2 -2
- data/lib/faraday/response/logger.rb +26 -1
- data/lib/faraday/utils.rb +13 -1
- metadata +61 -120
- checksums.yaml +0 -7
- data/.document +0 -6
- data/CHANGELOG.md +0 -15
- data/CONTRIBUTING.md +0 -36
- data/Gemfile +0 -29
- data/Rakefile +0 -71
- data/faraday.gemspec +0 -34
- data/script/console +0 -7
- data/script/generate_certs +0 -42
- data/script/package +0 -7
- data/script/proxy-server +0 -42
- data/script/release +0 -17
- data/script/server +0 -36
- data/script/test +0 -172
- data/test/adapters/default_test.rb +0 -14
- data/test/adapters/em_http_test.rb +0 -20
- data/test/adapters/em_synchrony_test.rb +0 -20
- data/test/adapters/excon_test.rb +0 -20
- data/test/adapters/httpclient_test.rb +0 -21
- data/test/adapters/integration.rb +0 -254
- data/test/adapters/logger_test.rb +0 -37
- data/test/adapters/net_http_persistent_test.rb +0 -20
- data/test/adapters/net_http_test.rb +0 -14
- data/test/adapters/patron_test.rb +0 -20
- data/test/adapters/rack_test.rb +0 -31
- data/test/adapters/test_middleware_test.rb +0 -114
- data/test/adapters/typhoeus_test.rb +0 -28
- data/test/authentication_middleware_test.rb +0 -65
- data/test/composite_read_io_test.rb +0 -111
- data/test/connection_test.rb +0 -522
- data/test/env_test.rb +0 -210
- data/test/helper.rb +0 -81
- data/test/live_server.rb +0 -67
- data/test/middleware/instrumentation_test.rb +0 -88
- data/test/middleware/retry_test.rb +0 -109
- data/test/middleware_stack_test.rb +0 -173
- data/test/multibyte.txt +0 -1
- data/test/options_test.rb +0 -252
- data/test/request_middleware_test.rb +0 -142
- data/test/response_middleware_test.rb +0 -72
- data/test/strawberry.rb +0 -2
- data/test/utils_test.rb +0 -58
data/lib/faraday/rack_builder.rb
CHANGED
@@ -151,8 +151,9 @@ module Faraday
|
|
151
151
|
lock!
|
152
152
|
to_app(lambda { |env|
|
153
153
|
response = Response.new
|
154
|
-
response.finish(env) unless env.parallel?
|
155
154
|
env.response = response
|
155
|
+
response.finish(env) unless env.parallel?
|
156
|
+
response
|
156
157
|
})
|
157
158
|
end
|
158
159
|
end
|
@@ -188,7 +189,7 @@ module Faraday
|
|
188
189
|
# :ssl - Hash of options for configuring SSL requests.
|
189
190
|
def build_env(connection, request)
|
190
191
|
Env.new(request.method, request.body,
|
191
|
-
connection.build_exclusive_url(request.path, request.params),
|
192
|
+
connection.build_exclusive_url(request.path, request.params, request.options.params_encoder),
|
192
193
|
request.options, request.headers, connection.ssl,
|
193
194
|
connection.parallel_manager)
|
194
195
|
end
|
@@ -19,7 +19,13 @@ module Faraday
|
|
19
19
|
# interval that is random between 0.1 and 0.15
|
20
20
|
#
|
21
21
|
class Request::Retry < Faraday::Middleware
|
22
|
-
|
22
|
+
|
23
|
+
IDEMPOTENT_METHODS = [:delete, :get, :head, :options, :put]
|
24
|
+
|
25
|
+
class Options < Faraday::Options.new(:max, :interval, :max_interval, :interval_randomness,
|
26
|
+
:backoff_factor, :exceptions, :methods, :retry_if)
|
27
|
+
DEFAULT_CHECK = lambda { |env,exception| false }
|
28
|
+
|
23
29
|
def self.from(value)
|
24
30
|
if Fixnum === value
|
25
31
|
new(value)
|
@@ -36,8 +42,12 @@ module Faraday
|
|
36
42
|
(self[:interval] ||= 0).to_f
|
37
43
|
end
|
38
44
|
|
45
|
+
def max_interval
|
46
|
+
(self[:max_interval] ||= Float::MAX).to_f
|
47
|
+
end
|
48
|
+
|
39
49
|
def interval_randomness
|
40
|
-
(self[:interval_randomness] ||= 0).
|
50
|
+
(self[:interval_randomness] ||= 0).to_f
|
41
51
|
end
|
42
52
|
|
43
53
|
def backoff_factor
|
@@ -49,6 +59,14 @@ module Faraday
|
|
49
59
|
Error::TimeoutError])
|
50
60
|
end
|
51
61
|
|
62
|
+
def methods
|
63
|
+
Array(self[:methods] ||= IDEMPOTENT_METHODS)
|
64
|
+
end
|
65
|
+
|
66
|
+
def retry_if
|
67
|
+
self[:retry_if] ||= DEFAULT_CHECK
|
68
|
+
end
|
69
|
+
|
52
70
|
end
|
53
71
|
|
54
72
|
# Public: Initialize middleware
|
@@ -59,6 +77,7 @@ module Faraday
|
|
59
77
|
# interval_randomness - The maximum random interval amount expressed
|
60
78
|
# as a float between 0 and 1 to use in addition to the
|
61
79
|
# interval. (default: 0)
|
80
|
+
# max_interval - An upper limit for the interval (default: Float::MAX)
|
62
81
|
# backoff_factor - The amount to multiple each successive retry's
|
63
82
|
# interval amount by in order to provide backoff
|
64
83
|
# (default: 1)
|
@@ -66,6 +85,15 @@ module Faraday
|
|
66
85
|
# given as Class, Module, or String. (default:
|
67
86
|
# [Errno::ETIMEDOUT, Timeout::Error,
|
68
87
|
# Error::TimeoutError])
|
88
|
+
# methods - A list of HTTP methods to retry without calling retry_if. Pass
|
89
|
+
# an empty Array to call retry_if for all exceptions.
|
90
|
+
# (defaults to the idempotent HTTP methods in IDEMPOTENT_METHODS)
|
91
|
+
# retry_if - block that will receive the env object and the exception raised
|
92
|
+
# and should decide if the code should retry still the action or
|
93
|
+
# not independent of the retry count. This would be useful
|
94
|
+
# if the exception produced is non-recoverable or if the
|
95
|
+
# the HTTP method called is not idempotent.
|
96
|
+
# (defaults to return false)
|
69
97
|
def initialize(app, options = nil)
|
70
98
|
super(app)
|
71
99
|
@options = Options.from(options)
|
@@ -75,6 +103,7 @@ module Faraday
|
|
75
103
|
def sleep_amount(retries)
|
76
104
|
retry_index = @options.max - retries
|
77
105
|
current_interval = @options.interval * (@options.backoff_factor ** retry_index)
|
106
|
+
current_interval = [current_interval, @options.max_interval].min
|
78
107
|
random_interval = rand * @options.interval_randomness.to_f * @options.interval
|
79
108
|
current_interval + random_interval
|
80
109
|
end
|
@@ -85,8 +114,8 @@ module Faraday
|
|
85
114
|
begin
|
86
115
|
env[:body] = request_body # after failure env[:body] is set to the response body
|
87
116
|
@app.call(env)
|
88
|
-
rescue @errmatch
|
89
|
-
if retries > 0
|
117
|
+
rescue @errmatch => exception
|
118
|
+
if retries > 0 && retry_request?(env, exception)
|
90
119
|
retries -= 1
|
91
120
|
sleep sleep_amount(retries + 1)
|
92
121
|
retry
|
@@ -114,5 +143,12 @@ module Faraday
|
|
114
143
|
end
|
115
144
|
matcher
|
116
145
|
end
|
146
|
+
|
147
|
+
private
|
148
|
+
|
149
|
+
def retry_request?(env, exception)
|
150
|
+
@options.methods.include?(env[:method]) || @options.retry_if.call(env, exception)
|
151
|
+
end
|
152
|
+
|
117
153
|
end
|
118
154
|
end
|
data/lib/faraday/response.rb
CHANGED
@@ -61,8 +61,8 @@ module Faraday
|
|
61
61
|
|
62
62
|
def finish(env)
|
63
63
|
raise "response already finished" if finished?
|
64
|
-
@env = Env.from(env)
|
65
|
-
@on_complete_callbacks.each { |callback| callback.call(env) }
|
64
|
+
@env = env.is_a?(Env) ? env : Env.from(env)
|
65
|
+
@on_complete_callbacks.each { |callback| callback.call(@env) }
|
66
66
|
return self
|
67
67
|
end
|
68
68
|
|
@@ -4,12 +4,15 @@ module Faraday
|
|
4
4
|
class Response::Logger < Response::Middleware
|
5
5
|
extend Forwardable
|
6
6
|
|
7
|
-
|
7
|
+
DEFAULT_OPTIONS = { :bodies => false }
|
8
|
+
|
9
|
+
def initialize(app, logger = nil, options = {})
|
8
10
|
super(app)
|
9
11
|
@logger = logger || begin
|
10
12
|
require 'logger'
|
11
13
|
::Logger.new(STDOUT)
|
12
14
|
end
|
15
|
+
@options = DEFAULT_OPTIONS.merge(options)
|
13
16
|
end
|
14
17
|
|
15
18
|
def_delegators :@logger, :debug, :info, :warn, :error, :fatal
|
@@ -17,12 +20,14 @@ module Faraday
|
|
17
20
|
def call(env)
|
18
21
|
info "#{env.method} #{env.url.to_s}"
|
19
22
|
debug('request') { dump_headers env.request_headers }
|
23
|
+
debug('request') { dump_body(env[:body]) } if env[:body] && log_body?(:request)
|
20
24
|
super
|
21
25
|
end
|
22
26
|
|
23
27
|
def on_complete(env)
|
24
28
|
info('Status') { env.status.to_s }
|
25
29
|
debug('response') { dump_headers env.response_headers }
|
30
|
+
debug('response') { dump_body env[:body] } if env[:body] && log_body?(:response)
|
26
31
|
end
|
27
32
|
|
28
33
|
private
|
@@ -30,5 +35,25 @@ module Faraday
|
|
30
35
|
def dump_headers(headers)
|
31
36
|
headers.map { |k, v| "#{k}: #{v.inspect}" }.join("\n")
|
32
37
|
end
|
38
|
+
|
39
|
+
def dump_body(body)
|
40
|
+
if body.respond_to?(:to_str)
|
41
|
+
body.to_str
|
42
|
+
else
|
43
|
+
pretty_inspect(body)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def pretty_inspect(body)
|
48
|
+
require 'pp' unless body.respond_to?(:pretty_inspect)
|
49
|
+
body.pretty_inspect
|
50
|
+
end
|
51
|
+
|
52
|
+
def log_body?(type)
|
53
|
+
case @options[:bodies]
|
54
|
+
when Hash then @options[:bodies][type]
|
55
|
+
else @options[:bodies]
|
56
|
+
end
|
57
|
+
end
|
33
58
|
end
|
34
59
|
end
|
data/lib/faraday/utils.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'thread'
|
2
|
-
Faraday.require_libs 'parameters'
|
3
2
|
|
4
3
|
module Faraday
|
5
4
|
module Utils
|
@@ -17,6 +16,12 @@ module Faraday
|
|
17
16
|
self.update(hash || {})
|
18
17
|
end
|
19
18
|
|
19
|
+
# on dup/clone, we need to duplicate @names hash
|
20
|
+
def initialize_copy(other)
|
21
|
+
super
|
22
|
+
@names = other.names.dup
|
23
|
+
end
|
24
|
+
|
20
25
|
# need to synchronize concurrent writes to the shared KeyMap
|
21
26
|
keymap_mutex = Mutex.new
|
22
27
|
|
@@ -81,6 +86,7 @@ module Faraday
|
|
81
86
|
|
82
87
|
def replace(other)
|
83
88
|
clear
|
89
|
+
@names.clear
|
84
90
|
self.update other
|
85
91
|
self
|
86
92
|
end
|
@@ -101,6 +107,12 @@ module Faraday
|
|
101
107
|
end
|
102
108
|
}
|
103
109
|
end
|
110
|
+
|
111
|
+
protected
|
112
|
+
|
113
|
+
def names
|
114
|
+
@names
|
115
|
+
end
|
104
116
|
end
|
105
117
|
|
106
118
|
# hash with stringified keys
|
metadata
CHANGED
@@ -1,63 +1,55 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: faraday
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 63
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 9
|
9
|
+
- 2
|
10
|
+
version: 0.9.2
|
5
11
|
platform: ruby
|
6
|
-
authors:
|
12
|
+
authors:
|
7
13
|
- Rick Olson
|
8
14
|
autorequire:
|
9
15
|
bindir: bin
|
10
16
|
cert_chain: []
|
11
|
-
|
12
|
-
|
13
|
-
|
17
|
+
|
18
|
+
date: 2015-10-06 00:00:00 +02:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
14
22
|
name: multipart-post
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '1.2'
|
20
|
-
- - "<"
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: '3'
|
23
|
-
type: :runtime
|
24
23
|
prerelease: false
|
25
|
-
|
26
|
-
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
27
|
- - ">="
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
version:
|
40
|
-
type: :
|
41
|
-
|
42
|
-
version_requirements: !ruby/object:Gem::Requirement
|
43
|
-
requirements:
|
44
|
-
- - "~>"
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
version: '1.0'
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 11
|
30
|
+
segments:
|
31
|
+
- 1
|
32
|
+
- 2
|
33
|
+
version: "1.2"
|
34
|
+
- - <
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
hash: 5
|
37
|
+
segments:
|
38
|
+
- 3
|
39
|
+
version: "3"
|
40
|
+
type: :runtime
|
41
|
+
version_requirements: *id001
|
47
42
|
description:
|
48
43
|
email: technoweenie@gmail.com
|
49
44
|
executables: []
|
45
|
+
|
50
46
|
extensions: []
|
47
|
+
|
51
48
|
extra_rdoc_files: []
|
52
|
-
|
53
|
-
|
54
|
-
- CHANGELOG.md
|
55
|
-
- CONTRIBUTING.md
|
56
|
-
- Gemfile
|
49
|
+
|
50
|
+
files:
|
57
51
|
- LICENSE.md
|
58
52
|
- README.md
|
59
|
-
- Rakefile
|
60
|
-
- faraday.gemspec
|
61
53
|
- lib/faraday.rb
|
62
54
|
- lib/faraday/adapter.rb
|
63
55
|
- lib/faraday/adapter/em_http.rb
|
@@ -92,90 +84,39 @@ files:
|
|
92
84
|
- lib/faraday/response/raise_error.rb
|
93
85
|
- lib/faraday/upload_io.rb
|
94
86
|
- lib/faraday/utils.rb
|
95
|
-
|
96
|
-
- script/generate_certs
|
97
|
-
- script/package
|
98
|
-
- script/proxy-server
|
99
|
-
- script/release
|
100
|
-
- script/server
|
101
|
-
- script/test
|
102
|
-
- test/adapters/default_test.rb
|
103
|
-
- test/adapters/em_http_test.rb
|
104
|
-
- test/adapters/em_synchrony_test.rb
|
105
|
-
- test/adapters/excon_test.rb
|
106
|
-
- test/adapters/httpclient_test.rb
|
107
|
-
- test/adapters/integration.rb
|
108
|
-
- test/adapters/logger_test.rb
|
109
|
-
- test/adapters/net_http_persistent_test.rb
|
110
|
-
- test/adapters/net_http_test.rb
|
111
|
-
- test/adapters/patron_test.rb
|
112
|
-
- test/adapters/rack_test.rb
|
113
|
-
- test/adapters/test_middleware_test.rb
|
114
|
-
- test/adapters/typhoeus_test.rb
|
115
|
-
- test/authentication_middleware_test.rb
|
116
|
-
- test/composite_read_io_test.rb
|
117
|
-
- test/connection_test.rb
|
118
|
-
- test/env_test.rb
|
119
|
-
- test/helper.rb
|
120
|
-
- test/live_server.rb
|
121
|
-
- test/middleware/instrumentation_test.rb
|
122
|
-
- test/middleware/retry_test.rb
|
123
|
-
- test/middleware_stack_test.rb
|
124
|
-
- test/multibyte.txt
|
125
|
-
- test/options_test.rb
|
126
|
-
- test/request_middleware_test.rb
|
127
|
-
- test/response_middleware_test.rb
|
128
|
-
- test/strawberry.rb
|
129
|
-
- test/utils_test.rb
|
87
|
+
has_rdoc: true
|
130
88
|
homepage: https://github.com/lostisland/faraday
|
131
|
-
licenses:
|
89
|
+
licenses:
|
132
90
|
- MIT
|
133
|
-
metadata: {}
|
134
91
|
post_install_message:
|
135
92
|
rdoc_options: []
|
136
|
-
|
93
|
+
|
94
|
+
require_paths:
|
137
95
|
- lib
|
138
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
139
|
-
|
96
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
140
99
|
- - ">="
|
141
|
-
- !ruby/object:Gem::Version
|
142
|
-
|
143
|
-
|
144
|
-
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
hash: 3
|
102
|
+
segments:
|
103
|
+
- 0
|
104
|
+
version: "0"
|
105
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
106
|
+
none: false
|
107
|
+
requirements:
|
145
108
|
- - ">="
|
146
|
-
- !ruby/object:Gem::Version
|
147
|
-
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
hash: 3
|
111
|
+
segments:
|
112
|
+
- 0
|
113
|
+
version: "0"
|
148
114
|
requirements: []
|
115
|
+
|
149
116
|
rubyforge_project:
|
150
|
-
rubygems_version:
|
117
|
+
rubygems_version: 1.6.2
|
151
118
|
signing_key:
|
152
|
-
specification_version:
|
119
|
+
specification_version: 3
|
153
120
|
summary: HTTP/REST API client library.
|
154
|
-
test_files:
|
155
|
-
|
156
|
-
- test/adapters/em_http_test.rb
|
157
|
-
- test/adapters/em_synchrony_test.rb
|
158
|
-
- test/adapters/excon_test.rb
|
159
|
-
- test/adapters/httpclient_test.rb
|
160
|
-
- test/adapters/integration.rb
|
161
|
-
- test/adapters/logger_test.rb
|
162
|
-
- test/adapters/net_http_persistent_test.rb
|
163
|
-
- test/adapters/net_http_test.rb
|
164
|
-
- test/adapters/patron_test.rb
|
165
|
-
- test/adapters/rack_test.rb
|
166
|
-
- test/adapters/test_middleware_test.rb
|
167
|
-
- test/adapters/typhoeus_test.rb
|
168
|
-
- test/authentication_middleware_test.rb
|
169
|
-
- test/composite_read_io_test.rb
|
170
|
-
- test/connection_test.rb
|
171
|
-
- test/env_test.rb
|
172
|
-
- test/helper.rb
|
173
|
-
- test/live_server.rb
|
174
|
-
- test/middleware/instrumentation_test.rb
|
175
|
-
- test/middleware/retry_test.rb
|
176
|
-
- test/middleware_stack_test.rb
|
177
|
-
- test/options_test.rb
|
178
|
-
- test/request_middleware_test.rb
|
179
|
-
- test/response_middleware_test.rb
|
180
|
-
- test/strawberry.rb
|
181
|
-
- test/utils_test.rb
|
121
|
+
test_files: []
|
122
|
+
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 0e442daff424089e143751d7cb1d684c169bf4fc
|
4
|
-
data.tar.gz: ba1dd50171576d5064350e48b8869364c0710a26
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: 80c7a955f7d0a2217fcde0be2760649b9e5fc2d950929b118383ba61ea7282410b224315e289b40fec12be13898b0b00551e441704462ac39269368a8f9d5931
|
7
|
-
data.tar.gz: cdef47ebdb9519d0e45e7511326ed1368fa520ad314a4055ea154187193c967f8821573705161e3bbca5d3cbbf40f219071223ba8d24821c5dd89e37ddd16a9e
|