faraday 0.10.0 → 0.12.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fc2292832e97072ea9b3292a56ee1c87e7f9ec19
4
- data.tar.gz: 9aea82166ae97ea282ba1a4b5efc4740effeea14
3
+ metadata.gz: d6ed59b880f0d605e4efc8ce513ced0b4688c4ef
4
+ data.tar.gz: 21d3a0326416db1e19add553b8d5c0ef1c5a3b50
5
5
  SHA512:
6
- metadata.gz: ba7bc351e2111733af22e1666f86d877050cd3256d3322e0418773aaf1a8c7447a02a780b812b0f2549b558c4c38a606189dad3c2915ed48019def848b8bc65c
7
- data.tar.gz: d3cbb3fa12d1e37f162930bab8be286ca6b384e2ce622e8ebff9087386902b50aa318a423d054138d87064601034470a45d072c85bda910d29fbb84150a22a5f
6
+ metadata.gz: 9e882a5072cc36a986e8fc2f23f0563755bae2d0c4e6fed4adc51a6fd46b449ea6be3dd189662ea0aa4f427c5402969bfb0ad626c837e9bad68d06aa0a3cc6d3
7
+ data.tar.gz: 63856c35cbcceda6abeb3dc076574d7e880343e8ee7af5e80971c08637a647a079433b1220161c24871d3718c268d018ebdce009ca46d89c4da7c059fdaeaf72
data/README.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Faraday
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/faraday.svg)](https://rubygems.org/gems/faraday)
4
+ [![Build Status](https://travis-ci.org/lostisland/faraday.svg)](https://travis-ci.org/lostisland/faraday)
5
+ [![Gitter](https://badges.gitter.im/lostisland/faraday.svg)](https://gitter.im/lostisland/faraday?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
6
+
7
+
3
8
  Faraday is an HTTP client lib that provides a common interface over many
4
9
  adapters (such as Net::HTTP) and embraces the concept of Rack middleware when
5
10
  processing the request/response cycle.
@@ -9,7 +14,6 @@ Faraday supports these adapters:
9
14
  * [Net::HTTP][net_http] _(default)_
10
15
  * [Net::HTTP::Persistent][persistent]
11
16
  * [Excon][]
12
- * [Typhoeus][]
13
17
  * [Patron][]
14
18
  * [EventMachine][]
15
19
  * [HTTPClient][]
@@ -23,6 +27,23 @@ Available at [rubydoc.info](http://www.rubydoc.info/gems/faraday).
23
27
 
24
28
  ## Usage
25
29
 
30
+ ### Basic Use
31
+
32
+ ```ruby
33
+ response = Faraday.get 'http://sushi.com/nigiri/sake.json'
34
+ ```
35
+ A simple `get` request can be performed by using the syntax described above. This works if you don't need to set up anything; you can roll with just the default middleware
36
+ stack and default adapter (see [Faraday::RackBuilder#initialize](https://github.com/lostisland/faraday/blob/master/lib/faraday/rack_builder.rb)).
37
+
38
+ A more flexible way to use Faraday is to start with a Connection object. If you want to keep the same defaults, you can use this syntax:
39
+
40
+ ```ruby
41
+ conn = Faraday.new(:url => 'http://www.example.com')
42
+ response = conn.get '/users' # GET http://www.example.com/users'
43
+ ```
44
+
45
+ Connections can also take an options hash as a parameter or be configured by using a block. Checkout the section called [Advanced middleware usage](#advanced-middleware-usage) for more details about how to use this block for configurations.
46
+
26
47
  ```ruby
27
48
  conn = Faraday.new(:url => 'http://sushi.com') do |faraday|
28
49
  faraday.request :url_encoded # form-encode POST params
@@ -30,6 +51,19 @@ conn = Faraday.new(:url => 'http://sushi.com') do |faraday|
30
51
  faraday.adapter Faraday.default_adapter # make requests with Net::HTTP
31
52
  end
32
53
 
54
+ # Filter sensitive information from logs with a regex matcher
55
+
56
+ conn = Faraday.new(:url => 'http://sushi.com/api_key=s3cr3t') do |faraday|
57
+ faraday.response :logger do | logger |
58
+ logger.filter(/(api_key=)(\w+)/,'\1[REMOVED]')
59
+ end
60
+ faraday.adapter Faraday.default_adapter # make requests with Net::HTTP
61
+ end
62
+ ```
63
+
64
+ Once you have the connection object, use it to make HTTP requests. You can pass paramters to it in a few different ways:
65
+
66
+ ```ruby
33
67
  ## GET ##
34
68
 
35
69
  response = conn.get '/nigiri/sake.json' # GET http://sushi.com/nigiri/sake.json
@@ -37,7 +71,7 @@ response.body
37
71
 
38
72
  conn.get '/nigiri', { :name => 'Maguro' } # GET http://sushi.com/nigiri?name=Maguro
39
73
 
40
- conn.get do |req| # GET http://sushi.com/search?page=2&limit=100
74
+ conn.get do |req| # GET http://sushi.com/search?page=2&limit=100
41
75
  req.url '/search', :page => 2
42
76
  req.params['limit'] = 100
43
77
  end
@@ -45,7 +79,11 @@ end
45
79
  ## POST ##
46
80
 
47
81
  conn.post '/nigiri', { :name => 'Maguro' } # POST "name=maguro" to http://sushi.com/nigiri
82
+ ```
83
+
84
+ Some configuration options can be adjusted per request:
48
85
 
86
+ ```ruby
49
87
  # post payload as JSON instead of "www-form-urlencoded" encoding:
50
88
  conn.post do |req|
51
89
  req.url '/nigiri'
@@ -62,11 +100,18 @@ conn.get do |req|
62
100
  end
63
101
  ```
64
102
 
65
- If you don't need to set up anything, you can roll with just the default middleware
66
- stack and default adapter (see [Faraday::RackBuilder#initialize](https://github.com/lostisland/faraday/blob/master/lib/faraday/rack_builder.rb)):
103
+ And you can inject arbitrary data into the request using the `context` option:
67
104
 
68
105
  ```ruby
69
- response = Faraday.get 'http://sushi.com/nigiri/sake.json'
106
+ # Anything you inject using context option will be available in the env on all middlewares
107
+
108
+ conn.get do |req|
109
+ req.url '/search'
110
+ req.options.context = {
111
+ foo: 'foo',
112
+ bar: 'bar'
113
+ }
114
+ end
70
115
  ```
71
116
 
72
117
  ### Changing how parameters are serialized
@@ -169,6 +214,53 @@ later, response. Some keys are:
169
214
  :response_headers
170
215
  ```
171
216
 
217
+ ## Ad-hoc adapters customization
218
+
219
+ Faraday is intended to be a generic interface between your code and the adapter. However, sometimes you need to access a feature specific to one of the adapters that is not covered in Faraday's interface.
220
+
221
+ When that happens, you can pass a block when specifying the adapter to customize it. The block parameter will change based on the adapter you're using. See below for some examples.
222
+
223
+ ### NetHttp
224
+ ```ruby
225
+ conn = Faraday.new(...) do |f|
226
+ f.adapter :net_http do |http| # yields Net::HTTP
227
+ http.idle_timeout = 100
228
+ http.verify_callback = lambda do | preverify_ok, cert_store |
229
+ # do something here...
230
+ end
231
+ end
232
+ end
233
+ ```
234
+
235
+ ### NetHttpPersistent
236
+ ```ruby
237
+ conn = Faraday.new(...) do |f|
238
+ f.adapter :net_http_persistent do |http| # yields Net::HTTP::Persistent
239
+ http.idle_timeout = 100
240
+ http.retry_change_requests = true
241
+ end
242
+ end
243
+ ```
244
+
245
+ ### Patron
246
+ ```ruby
247
+ conn = Faraday.new(...) do |f|
248
+ f.adapter :patron do |session| # yields Patron::Session
249
+ session.max_redirects = 10
250
+ end
251
+ end
252
+ ```
253
+
254
+ ### HTTPClient
255
+ ```ruby
256
+ conn = Faraday.new(...) do |f|
257
+ f.adapter :httpclient do |client| # yields HTTPClient
258
+ client.keep_alive_timeout = 20
259
+ client.ssl_config.timeout = 25
260
+ end
261
+ end
262
+ ```
263
+
172
264
  ## Using Faraday for testing
173
265
 
174
266
  ```ruby
@@ -240,7 +332,6 @@ See [LICENSE][] for details.
240
332
  [persistent]: https://github.com/drbrain/net-http-persistent
241
333
  [travis]: https://travis-ci.org/lostisland/faraday
242
334
  [excon]: https://github.com/excon/excon#readme
243
- [typhoeus]: https://github.com/typhoeus/typhoeus#readme
244
335
  [patron]: http://toland.github.io/patron/
245
336
  [eventmachine]: https://github.com/igrigorik/em-http-request#readme
246
337
  [httpclient]: https://github.com/nahi/httpclient
@@ -138,7 +138,7 @@ module Faraday
138
138
 
139
139
  # TODO: reuse the connection to support pipelining
140
140
  def perform_single_request(env)
141
- req = EventMachine::HttpRequest.new(env[:url], connection_config(env))
141
+ req = create_request(env)
142
142
  req.setup_request(env[:method], request_config(env)).callback { |client|
143
143
  status = client.response_header.status
144
144
  reason = client.response_header.http_reason
@@ -150,6 +150,10 @@ module Faraday
150
150
  }
151
151
  end
152
152
 
153
+ def create_request(env)
154
+ EventMachine::HttpRequest.new(env[:url], connection_config(env).merge(@connection_options))
155
+ end
156
+
153
157
  def error_message(client)
154
158
  client.error or "request failed"
155
159
  end
@@ -19,7 +19,7 @@ module Faraday
19
19
 
20
20
  def call(env)
21
21
  super
22
- request = EventMachine::HttpRequest.new(Utils::URI(env[:url].to_s), connection_config(env))
22
+ request = create_request(env)
23
23
 
24
24
  http_method = env[:method].to_s.downcase.to_sym
25
25
 
@@ -87,6 +87,10 @@ module Faraday
87
87
  raise
88
88
  end
89
89
  end
90
+
91
+ def create_request(env)
92
+ EventMachine::HttpRequest.new(Utils::URI(env[:url].to_s), connection_config(env).merge(@connection_options))
93
+ end
90
94
  end
91
95
  end
92
96
  end
@@ -3,11 +3,6 @@ module Faraday
3
3
  class Excon < Faraday::Adapter
4
4
  dependency 'excon'
5
5
 
6
- def initialize(app, connection_options = {})
7
- @connection_options = connection_options
8
- super(app)
9
- end
10
-
11
6
  def call(env)
12
7
  super
13
8
 
@@ -50,7 +45,7 @@ module Faraday
50
45
  end
51
46
  end
52
47
 
53
- conn = ::Excon.new(env[:url].to_s, opts.merge(@connection_options))
48
+ conn = create_connection(env, opts)
54
49
 
55
50
  resp = conn.request \
56
51
  :method => env[:method].to_s.upcase,
@@ -72,6 +67,10 @@ module Faraday
72
67
  raise Error::TimeoutError, err
73
68
  end
74
69
 
70
+ def create_connection(env, opts)
71
+ ::Excon.new(env[:url].to_s, opts.merge(@connection_options))
72
+ end
73
+
75
74
  # TODO: support streaming requests
76
75
  def read_body(env)
77
76
  env[:body].respond_to?(:read) ? env[:body].read : env[:body]
@@ -29,6 +29,8 @@ module Faraday
29
29
  configure_ssl ssl
30
30
  end
31
31
 
32
+ configure_client
33
+
32
34
  # TODO Don't stream yet.
33
35
  # https://github.com/nahi/httpclient/pull/90
34
36
  env[:body] = env[:body].read if env[:body].respond_to? :read
@@ -48,7 +50,7 @@ module Faraday
48
50
  else
49
51
  raise Faraday::Error::ClientError, $!
50
52
  end
51
- rescue Errno::ECONNREFUSED, EOFError
53
+ rescue Errno::ECONNREFUSED, IOError
52
54
  raise Faraday::Error::ConnectionFailed, $!
53
55
  rescue => err
54
56
  if defined?(OpenSSL) && OpenSSL::SSL::SSLError === err
@@ -95,12 +97,21 @@ module Faraday
95
97
  end
96
98
  end
97
99
 
100
+ def configure_client
101
+ @config_block.call(client) if @config_block
102
+ end
103
+
98
104
  def ssl_cert_store(ssl)
99
105
  return ssl[:cert_store] if ssl[:cert_store]
100
- # Use the default cert store by default, i.e. system ca certs
101
- cert_store = OpenSSL::X509::Store.new
102
- cert_store.set_default_paths
103
- cert_store
106
+ # Memoize the cert store so that the same one is passed to
107
+ # HTTPClient each time, to avoid resyncing SSL sesions when
108
+ # it's changed
109
+ @cert_store ||= begin
110
+ # Use the default cert store by default, i.e. system ca certs
111
+ cert_store = OpenSSL::X509::Store.new
112
+ cert_store.set_default_paths
113
+ cert_store
114
+ end
104
115
  end
105
116
 
106
117
  def ssl_verify_mode(ssl)
@@ -10,7 +10,7 @@ module Faraday
10
10
  class Adapter
11
11
  class NetHttp < Faraday::Adapter
12
12
  NET_HTTP_EXCEPTIONS = [
13
- EOFError,
13
+ IOError,
14
14
  Errno::ECONNABORTED,
15
15
  Errno::ECONNREFUSED,
16
16
  Errno::ECONNRESET,
@@ -32,10 +32,7 @@ module Faraday
32
32
  super
33
33
  with_net_http_connection(env) do |http|
34
34
  configure_ssl(http, env[:ssl]) if env[:url].scheme == 'https' and env[:ssl]
35
-
36
- req = env[:request]
37
- http.read_timeout = http.open_timeout = req[:timeout] if req[:timeout]
38
- http.open_timeout = req[:open_timeout] if req[:open_timeout]
35
+ configure_request(http, env[:request])
39
36
 
40
37
  begin
41
38
  http_response = perform_request(http, env)
@@ -109,6 +106,13 @@ module Faraday
109
106
  http.ssl_version = ssl[:version] if ssl[:version]
110
107
  end
111
108
 
109
+ def configure_request(http, req)
110
+ http.read_timeout = http.open_timeout = req[:timeout] if req[:timeout]
111
+ http.open_timeout = req[:open_timeout] if req[:open_timeout]
112
+
113
+ @config_block.call(http) if @config_block
114
+ end
115
+
112
116
  def ssl_cert_store(ssl)
113
117
  return ssl[:cert_store] if ssl[:cert_store]
114
118
  # Use the default cert store by default, i.e. system ca certs
@@ -7,8 +7,8 @@ module Faraday
7
7
  class NetHttpPersistent < NetHttp
8
8
  dependency 'net/http/persistent'
9
9
 
10
- def with_net_http_connection(env)
11
- if proxy = env[:request][:proxy]
10
+ def net_http_connection(env)
11
+ if (proxy = env[:request][:proxy])
12
12
  proxy_uri = ::URI::HTTP === proxy[:uri] ? proxy[:uri].dup : ::URI.parse(proxy[:uri].to_s)
13
13
  proxy_uri.user = proxy_uri.password = nil
14
14
  # awful patch for net-http-persistent 2.8 not unescaping user/password
@@ -16,9 +16,10 @@ module Faraday
16
16
  define_method(:user) { proxy[:user] }
17
17
  define_method(:password) { proxy[:password] }
18
18
  end if proxy[:user]
19
+ return Net::HTTP::Persistent.new 'Faraday', proxy_uri
19
20
  end
20
21
 
21
- yield Net::HTTP::Persistent.new 'Faraday', proxy_uri
22
+ Net::HTTP::Persistent.new 'Faraday'
22
23
  end
23
24
 
24
25
  def perform_request(http, env)
@@ -3,11 +3,6 @@ module Faraday
3
3
  class Patron < Faraday::Adapter
4
4
  dependency 'patron'
5
5
 
6
- def initialize(app, &block)
7
- super(app)
8
- @block = block
9
- end
10
-
11
6
  def call(env)
12
7
  super
13
8
 
@@ -73,7 +68,7 @@ module Faraday
73
68
  def create_session
74
69
  session = ::Patron::Session.new
75
70
  session.insecure = true
76
- @block.call(session) if @block
71
+ @config_block.call(session) if @config_block
77
72
  session
78
73
  end
79
74
  end
@@ -30,6 +30,12 @@ module Faraday
30
30
  extend Parallelism
31
31
  self.supports_parallel = false
32
32
 
33
+ def initialize(app = nil, opts = {}, &block)
34
+ super(app)
35
+ @connection_options = opts
36
+ @config_block = block
37
+ end
38
+
33
39
  def call(env)
34
40
  env.clear_body if env.needs_body?
35
41
  end
@@ -55,11 +55,11 @@ module Faraday
55
55
  # :user - String (optional)
56
56
  # :password - String (optional)
57
57
  def initialize(url = nil, options = nil)
58
+ options = ConnectionOptions.from(options)
59
+
58
60
  if url.is_a?(Hash)
59
- options = options ? options.merge(url) : ConnectionOptions.from(url)
61
+ options = options.merge(url)
60
62
  url = options.url
61
- else
62
- options = ConnectionOptions.from(options)
63
63
  end
64
64
 
65
65
  @parallel_manager = nil
@@ -81,11 +81,20 @@ module Faraday
81
81
 
82
82
  @proxy = nil
83
83
  proxy(options.fetch(:proxy) {
84
- uri = ENV['http_proxy']
85
- if uri && !uri.empty?
86
- uri = 'http://' + uri if uri !~ /^http/i
87
- uri
84
+ uri = nil
85
+ if URI.parse("").respond_to?(:find_proxy)
86
+ case url
87
+ when String
88
+ uri = URI.parse(url).find_proxy
89
+ when URI
90
+ uri = url.find_proxy
91
+ when nil
92
+ uri = find_default_proxy
93
+ end
94
+ else
95
+ uri = find_default_proxy
88
96
  end
97
+ uri
89
98
  })
90
99
 
91
100
  yield(self) if block_given?
@@ -433,5 +442,14 @@ module Faraday
433
442
  header(*args)
434
443
  headers[Faraday::Request::Authorization::KEY] = header
435
444
  end
445
+
446
+ def find_default_proxy
447
+ warn 'no_proxy is unsupported' if ENV['no_proxy'] || ENV['NO_PROXY']
448
+ uri = ENV['http_proxy']
449
+ if uri && !uri.empty?
450
+ uri = 'http://' + uri if uri !~ /^http/i
451
+ uri
452
+ end
453
+ end
436
454
  end
437
455
  end
@@ -18,23 +18,20 @@ module Faraday
18
18
  # Public
19
19
  def update(obj)
20
20
  obj.each do |key, value|
21
- if sub_options = self.class.options_for(key)
22
- value = sub_options.from(value) if value
23
- elsif Hash === value
24
- hash = {}
25
- value.each do |hash_key, hash_value|
26
- hash[hash_key] = hash_value
27
- end
28
- value = hash
21
+ sub_options = self.class.options_for(key)
22
+ if sub_options
23
+ new_value = sub_options.from(value) if value
24
+ elsif value.is_a?(Hash)
25
+ new_value = value.dup
26
+ else
27
+ new_value = value
29
28
  end
30
29
 
31
- self.send("#{key}=", value) unless value.nil?
30
+ self.send("#{key}=", new_value) unless new_value.nil?
32
31
  end
33
32
  self
34
33
  end
35
34
 
36
- alias merge! update
37
-
38
35
  # Public
39
36
  def delete(key)
40
37
  value = send(key)
@@ -48,8 +45,24 @@ module Faraday
48
45
  end
49
46
 
50
47
  # Public
51
- def merge(value)
52
- dup.update(value)
48
+ def merge!(other)
49
+ other.each do |key, other_value|
50
+ self_value = self.send(key)
51
+ sub_options = self.class.options_for(key)
52
+ new_value = sub_options ? self_value.merge(other_value) : other_value
53
+ self.send("#{key}=", new_value) unless new_value.nil?
54
+ end
55
+ self
56
+ end
57
+
58
+ # Public
59
+ def merge(other)
60
+ dup.merge!(other)
61
+ end
62
+
63
+ # Public
64
+ def deep_dup
65
+ self.class.from(self)
53
66
  end
54
67
 
55
68
  # Public
@@ -189,8 +202,7 @@ module Faraday
189
202
  end
190
203
 
191
204
  class RequestOptions < Options.new(:params_encoder, :proxy, :bind,
192
- :timeout, :open_timeout, :boundary,
193
- :oauth)
205
+ :timeout, :open_timeout, :boundary, :oauth, :context)
194
206
 
195
207
  def []=(key, value)
196
208
  if key && key.to_sym == :proxy
@@ -16,8 +16,7 @@ module Faraday
16
16
 
17
17
  # Internal
18
18
  def self.build_hash(type, hash)
19
- offset = KEY.size + type.size + 3
20
- comma = ",\n#{' ' * offset}"
19
+ comma = ", "
21
20
  values = []
22
21
  hash.each do |key, value|
23
22
  values << "#{key}=#{value.to_s.inspect}"
@@ -1,13 +1,14 @@
1
1
  require File.expand_path("../url_encoded", __FILE__)
2
+ require 'securerandom'
2
3
 
3
4
  module Faraday
4
5
  class Request::Multipart < Request::UrlEncoded
5
6
  self.mime_type = 'multipart/form-data'.freeze
6
- DEFAULT_BOUNDARY = "-----------RubyMultipartPost".freeze unless defined? DEFAULT_BOUNDARY
7
+ DEFAULT_BOUNDARY_PREFIX = "-----------RubyMultipartPost".freeze unless defined? DEFAULT_BOUNDARY_PREFIX
7
8
 
8
9
  def call(env)
9
10
  match_content_type(env) do |params|
10
- env.request.boundary ||= DEFAULT_BOUNDARY
11
+ env.request.boundary ||= unique_boundary
11
12
  env.request_headers[CONTENT_TYPE] += "; boundary=#{env.request.boundary}"
12
13
  env.body = create_multipart(env, params)
13
14
  end
@@ -44,6 +45,10 @@ module Faraday
44
45
  return body
45
46
  end
46
47
 
48
+ def unique_boundary
49
+ "#{DEFAULT_BOUNDARY_PREFIX}-#{SecureRandom.hex}"
50
+ end
51
+
47
52
  def process_params(params, prefix = nil, pieces = nil, &block)
48
53
  params.inject(pieces || []) do |all, (key, value)|
49
54
  key = "#{prefix}[#{key}]" if prefix
@@ -10,7 +10,7 @@ module Faraday
10
10
  #
11
11
  # Faraday.new do |conn|
12
12
  # conn.request :retry, max: 2, interval: 0.05,
13
- # interval_randomness: 0.5, backoff_factor: 2
13
+ # interval_randomness: 0.5, backoff_factor: 2,
14
14
  # exceptions: [CustomException, 'Timeout::Error']
15
15
  # conn.adapter ...
16
16
  # end
@@ -27,7 +27,7 @@ module Faraday
27
27
  DEFAULT_CHECK = lambda { |env,exception| false }
28
28
 
29
29
  def self.from(value)
30
- if Fixnum === value
30
+ if Integer === value
31
31
  new(value)
32
32
  else
33
33
  super(value)
@@ -117,6 +117,7 @@ module Faraday
117
117
  rescue @errmatch => exception
118
118
  if retries > 0 && retry_request?(env, exception)
119
119
  retries -= 1
120
+ rewind_files(request_body)
120
121
  sleep sleep_amount(retries + 1)
121
122
  retry
122
123
  end
@@ -150,5 +151,13 @@ module Faraday
150
151
  @options.methods.include?(env[:method]) || @options.retry_if.call(env, exception)
151
152
  end
152
153
 
154
+ def rewind_files(env)
155
+ env && env.each do |_, value|
156
+ if value.is_a? UploadIO
157
+ value.rewind
158
+ end
159
+ end
160
+ end
161
+
153
162
  end
154
163
  end
@@ -12,22 +12,28 @@ module Faraday
12
12
  require 'logger'
13
13
  ::Logger.new(STDOUT)
14
14
  end
15
+ @filter = []
15
16
  @options = DEFAULT_OPTIONS.merge(options)
17
+ yield self if block_given?
16
18
  end
17
19
 
18
20
  def_delegators :@logger, :debug, :info, :warn, :error, :fatal
19
21
 
20
22
  def call(env)
21
- info "#{env.method} #{env.url.to_s}"
22
- debug('request') { dump_headers env.request_headers } if log_headers?(:request)
23
- debug('request') { dump_body(env[:body]) } if env[:body] && log_body?(:request)
23
+ info "#{env.method} #{apply_filters(env.url.to_s)}"
24
+ debug('request') { apply_filters( dump_headers env.request_headers ) } if log_headers?(:request)
25
+ debug('request') { apply_filters( dump_body(env[:body]) ) } if env[:body] && log_body?(:request)
24
26
  super
25
27
  end
26
28
 
27
29
  def on_complete(env)
28
30
  info('Status') { env.status.to_s }
29
- debug('response') { dump_headers env.response_headers } if log_headers?(:response)
30
- debug('response') { dump_body env[:body] } if env[:body] && log_body?(:response)
31
+ debug('response') { apply_filters( dump_headers env.response_headers ) } if log_headers?(:response)
32
+ debug('response') { apply_filters( dump_body env[:body] ) } if env[:body] && log_body?(:response)
33
+ end
34
+
35
+ def filter(filter_word, filter_replacement)
36
+ @filter.push([ filter_word, filter_replacement ])
31
37
  end
32
38
 
33
39
  private
@@ -62,5 +68,13 @@ module Faraday
62
68
  else @options[:bodies]
63
69
  end
64
70
  end
71
+
72
+ def apply_filters(output)
73
+ @filter.each do |pattern, replacement|
74
+ output = output.to_s.gsub(pattern, replacement)
75
+ end
76
+ output
77
+ end
78
+
65
79
  end
66
80
  end
data/lib/faraday/utils.rb CHANGED
@@ -108,6 +108,14 @@ module Faraday
108
108
  }
109
109
  end
110
110
 
111
+ def init_with(coder)
112
+ @names = coder['names']
113
+ end
114
+
115
+ def encode_with(coder)
116
+ coder['names'] = @names
117
+ end
118
+
111
119
  protected
112
120
 
113
121
  def names
data/lib/faraday.rb CHANGED
@@ -14,7 +14,7 @@ require 'forwardable'
14
14
  # conn.get '/'
15
15
  #
16
16
  module Faraday
17
- VERSION = "0.10.0"
17
+ VERSION = "0.12.0"
18
18
 
19
19
  class << self
20
20
  # Public: Gets or sets the root path that Faraday is being loaded from.
@@ -34,9 +34,6 @@ module Faraday
34
34
  # Faraday.get "https://faraday.com"
35
35
  attr_writer :default_connection
36
36
 
37
- # Public: Sets the default options used when calling Faraday#new.
38
- attr_writer :default_connection_options
39
-
40
37
  # Public: Initializes a new Faraday::Connection.
41
38
  #
42
39
  # url - The optional String base URL to use as a prefix for all
@@ -66,7 +63,7 @@ module Faraday
66
63
  # Returns a Faraday::Connection.
67
64
  def new(url = nil, options = nil)
68
65
  block = block_given? ? Proc.new : nil
69
- options = options ? default_connection_options.merge(options) : default_connection_options.dup
66
+ options = options ? default_connection_options.merge(options) : default_connection_options
70
67
  Faraday::Connection.new(url, options, &block)
71
68
  end
72
69
 
@@ -122,6 +119,11 @@ module Faraday
122
119
  @default_connection_options ||= ConnectionOptions.new
123
120
  end
124
121
 
122
+ # Public: Sets the default options used when calling Faraday#new.
123
+ def self.default_connection_options=(options)
124
+ @default_connection_options = ConnectionOptions.from(options)
125
+ end
126
+
125
127
  unless const_defined? :Timer
126
128
  require 'timeout'
127
129
  Timer = Timeout
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: faraday
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
4
+ version: 0.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rick Olson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-11 00:00:00.000000000 Z
11
+ date: 2017-04-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: multipart-post