faraday 0.10.1 → 0.11.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e29dc411984d7a8c784de0e30c229cb35609b3c8
4
- data.tar.gz: b4dbeba89b4f501785127f4011c8f7f40630f0b7
3
+ metadata.gz: 88d17f843f96e641d4cb8b87b360b99adfee6c53
4
+ data.tar.gz: 3c0031b2fa042939cc5e7f27aefa00f8ebe6a97f
5
5
  SHA512:
6
- metadata.gz: 92d9e8cb2d15a1965167d6d7cbc1aa9413d04c8d02a3fc48c37052bccea72c51c555483c25e8448e0f254850d8dfcfbabc19568ecf2d09f909a2f1756c380851
7
- data.tar.gz: 9ab178c28faabc70e789fc481b88ae70638356d8ae9a3c63d727b9d6d7d000d2fc7e8b50751b18a4bf102177ad8bc496850ae73bb7ff089fce0b4b69ed997657
6
+ metadata.gz: 03fa51e8008930909fb2e5f40afe8f3d59d176574a084e364569d256b0c073bd06796bb0fe96f79c42cfacda2ee8417fecb1b3fc13e5b46bbb76f960136d116c
7
+ data.tar.gz: 16432e693c7c666ac40de8a03ca890f08ee1cba705477afd31d64346282f018abf9ee617e1996330bbe2b2c3352021683e386522d700c49d08246b77d36fb65a
data/README.md CHANGED
@@ -30,6 +30,14 @@ conn = Faraday.new(:url => 'http://sushi.com') do |faraday|
30
30
  faraday.adapter Faraday.default_adapter # make requests with Net::HTTP
31
31
  end
32
32
 
33
+ # Filter sensitive information from logs with a regex matcher
34
+
35
+ conn = Faraday.new(:url => 'http://sushi.com/api_key=s3cr3t') do |faraday|
36
+ faraday.response :logger do | logger |
37
+ logger.filter(/(api_key=)(\w+)/,'\1[REMOVED]')
38
+ end
39
+ end
40
+
33
41
  ## GET ##
34
42
 
35
43
  response = conn.get '/nigiri/sake.json' # GET http://sushi.com/nigiri/sake.json
@@ -14,7 +14,7 @@ require 'forwardable'
14
14
  # conn.get '/'
15
15
  #
16
16
  module Faraday
17
- VERSION = "0.10.1"
17
+ VERSION = "0.11.0"
18
18
 
19
19
  class << self
20
20
  # Public: Gets or sets the root path that Faraday is being loaded from.
@@ -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
@@ -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
@@ -95,6 +97,10 @@ 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
106
  # Memoize the cert store so that the same one is passed to
@@ -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
@@ -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) unless options and options.is_a?(ConnectionOptions)
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
@@ -51,7 +51,14 @@ module Faraday
51
51
  def merge(value)
52
52
  dup.update(value)
53
53
  end
54
+
55
+ # Public
56
+ def dup
57
+ self.class.from(self)
58
+ end
54
59
 
60
+ alias clone dup
61
+
55
62
  # Public
56
63
  def fetch(key, *args)
57
64
  unless symbolized_key_set.include?(key.to_sym)
@@ -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}"
@@ -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)
@@ -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
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.1
4
+ version: 0.11.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-12-30 00:00:00.000000000 Z
11
+ date: 2017-01-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: multipart-post