faraday 0.6.0 → 0.8.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.
Files changed (58) hide show
  1. data/Gemfile +22 -15
  2. data/{LICENSE → LICENSE.md} +1 -1
  3. data/README.md +216 -146
  4. data/Rakefile +14 -58
  5. data/config.ru +6 -0
  6. data/faraday.gemspec +31 -38
  7. data/lib/faraday/adapter/em_http.rb +204 -0
  8. data/lib/faraday/adapter/em_synchrony/parallel_manager.rb +66 -0
  9. data/lib/faraday/adapter/em_synchrony.rb +67 -16
  10. data/lib/faraday/adapter/excon.rb +1 -2
  11. data/lib/faraday/adapter/net_http.rb +82 -39
  12. data/lib/faraday/adapter/net_http_persistent.rb +37 -0
  13. data/lib/faraday/adapter/patron.rb +42 -8
  14. data/lib/faraday/adapter/rack.rb +59 -0
  15. data/lib/faraday/adapter/test.rb +49 -9
  16. data/lib/faraday/adapter/typhoeus.rb +70 -15
  17. data/lib/faraday/adapter.rb +41 -18
  18. data/lib/faraday/builder.rb +34 -16
  19. data/lib/faraday/connection.rb +177 -115
  20. data/lib/faraday/error.rb +4 -2
  21. data/lib/faraday/middleware.rb +18 -10
  22. data/lib/faraday/request/authorization.rb +40 -0
  23. data/lib/faraday/request/basic_authentication.rb +13 -0
  24. data/lib/faraday/request/multipart.rb +5 -6
  25. data/lib/faraday/request/retry.rb +21 -0
  26. data/lib/faraday/request/token_authentication.rb +15 -0
  27. data/lib/faraday/request/url_encoded.rb +1 -3
  28. data/lib/faraday/request.rb +48 -38
  29. data/lib/faraday/response/raise_error.rb +1 -1
  30. data/lib/faraday/response.rb +6 -5
  31. data/lib/faraday/upload_io.rb +1 -1
  32. data/lib/faraday/utils.rb +196 -29
  33. data/lib/faraday.rb +69 -13
  34. data/test/adapters/default_test.rb +14 -0
  35. data/test/adapters/em_http_test.rb +14 -0
  36. data/test/adapters/em_synchrony_test.rb +14 -0
  37. data/test/adapters/excon_test.rb +23 -0
  38. data/test/adapters/integration.rb +190 -0
  39. data/test/adapters/logger_test.rb +2 -2
  40. data/test/adapters/net_http_persistent_test.rb +11 -0
  41. data/test/adapters/net_http_test.rb +37 -21
  42. data/test/adapters/patron_test.rb +17 -0
  43. data/test/adapters/rack_test.rb +26 -0
  44. data/test/adapters/test_middleware_test.rb +28 -1
  45. data/test/adapters/typhoeus_test.rb +14 -0
  46. data/test/authentication_middleware_test.rb +65 -0
  47. data/test/connection_test.rb +211 -81
  48. data/test/env_test.rb +80 -31
  49. data/test/helper.rb +23 -13
  50. data/test/live_server.rb +38 -29
  51. data/test/middleware/retry_test.rb +25 -0
  52. data/test/middleware_stack_test.rb +85 -4
  53. data/test/request_middleware_test.rb +42 -19
  54. data/test/response_middleware_test.rb +30 -3
  55. metadata +104 -110
  56. data/lib/faraday/adapter/action_dispatch.rb +0 -30
  57. data/lib/faraday/request/json.rb +0 -31
  58. data/test/adapters/live_test.rb +0 -186
@@ -9,34 +9,59 @@ module Faraday
9
9
  # req.body = 'abc'
10
10
  # end
11
11
  #
12
- class Request < Struct.new(:path, :params, :headers, :body)
12
+ class Request < Struct.new(:method, :path, :params, :headers, :body, :options)
13
13
  extend AutoloadHelper
14
+ extend MiddlewareRegistry
14
15
 
15
16
  autoload_all 'faraday/request',
16
- :JSON => 'json',
17
17
  :UrlEncoded => 'url_encoded',
18
- :Multipart => 'multipart'
18
+ :Multipart => 'multipart',
19
+ :Retry => 'retry',
20
+ :Timeout => 'timeout',
21
+ :Authorization => 'authorization',
22
+ :BasicAuthentication => 'basic_authentication',
23
+ :TokenAuthentication => 'token_authentication'
19
24
 
20
- register_lookup_modules \
21
- :json => :JSON,
25
+ register_middleware \
22
26
  :url_encoded => :UrlEncoded,
23
- :multipart => :Multipart
27
+ :multipart => :Multipart,
28
+ :retry => :Retry,
29
+ :authorization => :Authorization,
30
+ :basic_auth => :BasicAuthentication,
31
+ :token_auth => :TokenAuthentication
24
32
 
25
- def self.run(connection, request_method)
26
- req = create
27
- yield req if block_given?
28
- req.run(connection, request_method)
33
+ def self.create(request_method)
34
+ new(request_method).tap do |request|
35
+ yield request if block_given?
36
+ end
29
37
  end
30
38
 
31
- def self.create
32
- req = new(nil, {}, {}, nil)
33
- yield req if block_given?
34
- req
39
+ # Public: Replace params, preserving the existing hash type
40
+ def params=(hash)
41
+ if params then params.replace hash
42
+ else super
43
+ end
35
44
  end
36
45
 
37
- def url(path, params = {})
38
- self.path = path
39
- self.params = params
46
+ # Public: Replace request headers, preserving the existing hash type
47
+ def headers=(hash)
48
+ if headers then headers.replace hash
49
+ else super
50
+ end
51
+ end
52
+
53
+ def url(path, params = nil)
54
+ if path.respond_to? :query
55
+ if query = path.query
56
+ path = path.dup
57
+ path.query = nil
58
+ end
59
+ else
60
+ path, query = path.split('?', 2)
61
+ end
62
+ self.path = path
63
+ self.params.merge_query query
64
+ self.params.update(params) if params
40
65
  end
41
66
 
42
67
  def [](key)
@@ -50,7 +75,7 @@ module Faraday
50
75
  # ENV Keys
51
76
  # :method - a symbolized request method (:get, :post)
52
77
  # :body - the request body that will eventually be converted to a string.
53
- # :url - Addressable::URI instance of the URI for the current request.
78
+ # :url - URI instance for the current request.
54
79
  # :status - HTTP response status code
55
80
  # :request_headers - hash of HTTP Headers to be sent to the server
56
81
  # :response_headers - Hash of HTTP headers from the server
@@ -63,29 +88,14 @@ module Faraday
63
88
  # :user - Proxy server username
64
89
  # :password - Proxy server password
65
90
  # :ssl - Hash of options for configuring SSL requests.
66
- def to_env_hash(connection, request_method)
67
- env_headers = connection.headers.dup
68
- env_params = connection.params.dup
69
- connection.merge_headers(env_headers, headers)
70
- connection.merge_params(env_params, params)
71
-
72
- { :method => request_method,
91
+ def to_env(connection)
92
+ { :method => method,
73
93
  :body => body,
74
- :url => connection.build_url(path, env_params),
75
- :request_headers => env_headers,
94
+ :url => connection.build_exclusive_url(path, params),
95
+ :request_headers => headers,
76
96
  :parallel_manager => connection.parallel_manager,
77
- :request => connection.options.merge(:proxy => connection.proxy),
97
+ :request => options,
78
98
  :ssl => connection.ssl}
79
99
  end
80
-
81
- def run(connection, request_method)
82
- app = lambda { |env|
83
- response = Response.new
84
- response.finish(env) unless env[:parallel_manager]
85
- env[:response] = response
86
- }
87
- env = to_env_hash(connection, request_method)
88
- connection.builder.to_app(app).call(env)
89
- end
90
100
  end
91
101
  end
@@ -8,7 +8,7 @@ module Faraday
8
8
  raise Faraday::Error::ClientError, response_values(env)
9
9
  end
10
10
  end
11
-
11
+
12
12
  def response_values(env)
13
13
  {:status => env[:status], :headers => env[:response_headers], :body => env[:body]}
14
14
  end
@@ -5,8 +5,8 @@ module Faraday
5
5
  # Used for simple response middleware.
6
6
  class Middleware < Faraday::Middleware
7
7
  def call(env)
8
- @app.call(env).on_complete do |env|
9
- on_complete(env)
8
+ @app.call(env).on_complete do |environment|
9
+ on_complete(environment)
10
10
  end
11
11
  end
12
12
 
@@ -14,19 +14,20 @@ module Faraday
14
14
  # Calls the `parse` method if defined
15
15
  def on_complete(env)
16
16
  if respond_to? :parse
17
- env[:body] = parse(env[:body])
17
+ env[:body] = parse(env[:body]) unless [204,304].index env[:status]
18
18
  end
19
19
  end
20
20
  end
21
21
 
22
22
  extend Forwardable
23
23
  extend AutoloadHelper
24
+ extend MiddlewareRegistry
24
25
 
25
26
  autoload_all 'faraday/response',
26
27
  :RaiseError => 'raise_error',
27
28
  :Logger => 'logger'
28
29
 
29
- register_lookup_modules \
30
+ register_middleware \
30
31
  :raise_error => :RaiseError,
31
32
  :logger => :Logger
32
33
 
@@ -72,7 +73,7 @@ module Faraday
72
73
  end
73
74
 
74
75
  def success?
75
- status == 200
76
+ (200..299).include?(status)
76
77
  end
77
78
 
78
79
  # because @on_complete_callbacks cannot be marshalled
@@ -10,7 +10,7 @@ end
10
10
  module Faraday
11
11
  class CompositeReadIO < ::CompositeReadIO
12
12
  attr_reader :length
13
-
13
+
14
14
  def initialize(parts)
15
15
  @length = parts.inject(0) { |sum, part| sum + part.length }
16
16
  ios = parts.map{ |part| part.to_io }
data/lib/faraday/utils.rb CHANGED
@@ -1,12 +1,17 @@
1
- require 'rack/utils'
1
+ require 'cgi'
2
+
2
3
  module Faraday
3
4
  module Utils
4
- include Rack::Utils
5
-
6
- extend Rack::Utils
7
5
  extend self
8
6
 
9
- class Headers < HeaderHash
7
+ # Adapted from Rack::Utils::HeaderHash
8
+ class Headers < ::Hash
9
+ def initialize(hash={})
10
+ super()
11
+ @names = {}
12
+ self.update hash
13
+ end
14
+
10
15
  # symbol -> string mapper + cache
11
16
  KeyMap = Hash.new do |map, key|
12
17
  map[key] = if key.respond_to?(:to_str) then key
@@ -17,24 +22,60 @@ module Faraday
17
22
  end
18
23
  end
19
24
  KeyMap[:etag] = "ETag"
20
-
25
+
21
26
  def [](k)
22
- super(KeyMap[k])
27
+ k = KeyMap[k]
28
+ super(k) || super(@names[k.downcase])
23
29
  end
24
30
 
25
31
  def []=(k, v)
32
+ k = KeyMap[k]
33
+ k = (@names[k.downcase] ||= k)
26
34
  # join multiple values with a comma
27
35
  v = v.to_ary.join(', ') if v.respond_to? :to_ary
28
- super(KeyMap[k], v)
36
+ super k, v
37
+ end
38
+
39
+ def delete(k)
40
+ k = KeyMap[k]
41
+ if k = @names[k.downcase]
42
+ @names.delete k.downcase
43
+ super k
44
+ end
45
+ end
46
+
47
+ def include?(k)
48
+ @names.include? k.downcase
49
+ end
50
+
51
+ alias_method :has_key?, :include?
52
+ alias_method :member?, :include?
53
+ alias_method :key?, :include?
54
+
55
+ def merge!(other)
56
+ other.each { |k, v| self[k] = v }
57
+ self
29
58
  end
30
-
31
59
  alias_method :update, :merge!
32
-
60
+
61
+ def merge(other)
62
+ hash = dup
63
+ hash.merge! other
64
+ end
65
+
66
+ def replace(other)
67
+ clear
68
+ self.update other
69
+ self
70
+ end
71
+
72
+ def to_hash() ::Hash.new.update(self) end
73
+
33
74
  def parse(header_string)
34
75
  return unless header_string && !header_string.empty?
35
76
  header_string.split(/\r\n/).
36
77
  tap { |a| a.shift if a.first.index('HTTP/') == 0 }. # drop the HTTP status line
37
- map { |h| h.split(/:\s+/, 2) }.reject { |(k, v)| k.nil? }. # split key and value, ignore blank lines
78
+ map { |h| h.split(/:\s+/, 2) }.reject { |p| p[0].nil? }. # split key and value, ignore blank lines
38
79
  each { |key, value|
39
80
  # join multiple values with a comma
40
81
  if self[key] then self[key] << ', ' << value
@@ -44,17 +85,82 @@ module Faraday
44
85
  end
45
86
  end
46
87
 
47
- # Make Rack::Utils build_query method public.
48
- public :build_query
88
+ # hash with stringified keys
89
+ class ParamsHash < Hash
90
+ def [](key)
91
+ super(convert_key(key))
92
+ end
93
+
94
+ def []=(key, value)
95
+ super(convert_key(key), value)
96
+ end
97
+
98
+ def delete(key)
99
+ super(convert_key(key))
100
+ end
101
+
102
+ def include?(key)
103
+ super(convert_key(key))
104
+ end
105
+
106
+ alias_method :has_key?, :include?
107
+ alias_method :member?, :include?
108
+ alias_method :key?, :include?
109
+
110
+ def update(params)
111
+ params.each do |key, value|
112
+ self[key] = value
113
+ end
114
+ self
115
+ end
116
+ alias_method :merge!, :update
117
+
118
+ def merge(params)
119
+ dup.update(params)
120
+ end
121
+
122
+ def replace(other)
123
+ clear
124
+ update(other)
125
+ end
126
+
127
+ def merge_query(query)
128
+ if query && !query.empty?
129
+ update Utils.parse_query(query)
130
+ end
131
+ self
132
+ end
133
+
134
+ def to_query
135
+ Utils.build_nested_query(self)
136
+ end
137
+
138
+ private
139
+
140
+ def convert_key(key)
141
+ key.to_s
142
+ end
143
+ end
144
+
145
+ # Copied from Rack
146
+ def build_query(params)
147
+ params.map { |k, v|
148
+ if v.class == Array
149
+ build_query(v.map { |x| [k, x] })
150
+ else
151
+ v.nil? ? escape(k) : "#{escape(k)}=#{escape(v)}"
152
+ end
153
+ }.join("&")
154
+ end
49
155
 
50
- # Override Rack's version since it doesn't handle non-String values
156
+ # Rack's version modified to handle non-String values
51
157
  def build_nested_query(value, prefix = nil)
52
158
  case value
53
159
  when Array
54
- value.map { |v| build_nested_query(v, "#{prefix}[]") }.join("&")
160
+ value.map { |v| build_nested_query(v, "#{prefix}%5B%5D") }.join("&")
55
161
  when Hash
56
162
  value.map { |k, v|
57
- build_nested_query(v, prefix ? "#{prefix}[#{escape(k)}]" : escape(k))
163
+ build_nested_query(v, prefix ? "#{prefix}%5B#{escape(k)}%5D" : escape(k))
58
164
  }.join("&")
59
165
  when NilClass
60
166
  prefix
@@ -64,26 +170,70 @@ module Faraday
64
170
  end
65
171
  end
66
172
 
67
- # Be sure to URI escape '+' symbols to %2B. Otherwise, they get interpreted
68
- # as spaces.
69
- def escape(s)
70
- s.to_s.gsub(/([^a-zA-Z0-9_.-]+)/n) do
71
- '%' << $1.unpack('H2'*bytesize($1)).join('%').tap { |c| c.upcase! }
173
+ def escape(s) CGI.escape s.to_s end
174
+
175
+ def unescape(s) CGI.unescape s.to_s end
176
+
177
+ DEFAULT_SEP = /[&;] */n
178
+
179
+ # Adapted from Rack
180
+ def parse_query(qs)
181
+ params = {}
182
+
183
+ (qs || '').split(DEFAULT_SEP).each do |p|
184
+ k, v = p.split('=', 2).map { |x| unescape(x) }
185
+
186
+ if cur = params[k]
187
+ if cur.class == Array then params[k] << v
188
+ else params[k] = [cur, v]
189
+ end
190
+ else
191
+ params[k] = v
192
+ end
72
193
  end
194
+ params
73
195
  end
74
196
 
75
- # Turns param keys into strings
76
- def merge_params(existing_params, new_params)
77
- new_params.each do |key, value|
78
- existing_params[key.to_s] = value
197
+ def parse_nested_query(qs)
198
+ params = {}
199
+
200
+ (qs || '').split(DEFAULT_SEP).each do |p|
201
+ k, v = p.split('=', 2).map { |s| unescape(s) }
202
+ normalize_params(params, k, v)
79
203
  end
204
+ params
80
205
  end
81
206
 
82
- # Turns headers keys and values into strings
83
- def merge_headers(existing_headers, new_headers)
84
- new_headers.each do |key, value|
85
- existing_headers[key] = value.to_s
207
+ # Stolen from Rack
208
+ def normalize_params(params, name, v = nil)
209
+ name =~ %r(\A[\[\]]*([^\[\]]+)\]*)
210
+ k = $1 || ''
211
+ after = $' || ''
212
+
213
+ return if k.empty?
214
+
215
+ if after == ""
216
+ params[k] = v
217
+ elsif after == "[]"
218
+ params[k] ||= []
219
+ raise TypeError, "expected Array (got #{params[k].class.name}) for param `#{k}'" unless params[k].is_a?(Array)
220
+ params[k] << v
221
+ elsif after =~ %r(^\[\]\[([^\[\]]+)\]$) || after =~ %r(^\[\](.+)$)
222
+ child_key = $1
223
+ params[k] ||= []
224
+ raise TypeError, "expected Array (got #{params[k].class.name}) for param `#{k}'" unless params[k].is_a?(Array)
225
+ if params[k].last.is_a?(Hash) && !params[k].last.key?(child_key)
226
+ normalize_params(params[k].last, child_key, v)
227
+ else
228
+ params[k] << normalize_params({}, child_key, v)
229
+ end
230
+ else
231
+ params[k] ||= {}
232
+ raise TypeError, "expected Hash (got #{params[k].class.name}) for param `#{k}'" unless params[k].is_a?(Hash)
233
+ params[k] = normalize_params(params[k], after, v)
86
234
  end
235
+
236
+ return params
87
237
  end
88
238
 
89
239
  # Receives a URL and returns just the path with the query string sorted.
@@ -92,6 +242,23 @@ module Faraday
92
242
  (url.query ? "?#{sort_query_params(url.query)}" : "")
93
243
  end
94
244
 
245
+ # Recursive hash update
246
+ def deep_merge!(target, hash)
247
+ hash.each do |key, value|
248
+ if Hash === value and Hash === target[key]
249
+ target[key] = deep_merge(target[key], value)
250
+ else
251
+ target[key] = value
252
+ end
253
+ end
254
+ target
255
+ end
256
+
257
+ # Recursive hash merge
258
+ def deep_merge(source, hash)
259
+ deep_merge!(source.dup, hash)
260
+ end
261
+
95
262
  protected
96
263
 
97
264
  def sort_query_params(query)
data/lib/faraday.rb CHANGED
@@ -1,7 +1,8 @@
1
1
  module Faraday
2
- VERSION = "0.6.0"
2
+ VERSION = "0.8.0"
3
3
 
4
4
  class << self
5
+ attr_accessor :root_path, :lib_path
5
6
  attr_accessor :default_adapter
6
7
  attr_writer :default_connection
7
8
 
@@ -10,29 +11,63 @@ module Faraday
10
11
  Faraday::Connection.new(url, options, &block)
11
12
  end
12
13
 
14
+ def require_libs(*libs)
15
+ libs.each do |lib|
16
+ require "#{lib_path}/#{lib}"
17
+ end
18
+ end
19
+
20
+ alias require_lib require_libs
21
+
13
22
  private
14
23
  def method_missing(name, *args, &block)
15
24
  default_connection.send(name, *args, &block)
16
25
  end
17
26
  end
18
27
 
28
+ self.root_path = File.expand_path "..", __FILE__
29
+ self.lib_path = File.expand_path "../faraday", __FILE__
19
30
  self.default_adapter = :net_http
20
31
 
21
32
  def self.default_connection
22
33
  @default_connection ||= Connection.new
23
34
  end
24
35
 
25
- module AutoloadHelper
26
- def register_lookup_modules(mods)
27
- (@lookup_module_index ||= {}).update(mods)
36
+ begin
37
+ require RUBY_VERSION < '1.9' ? 'system_timer' : 'timeout'
38
+ rescue LoadError
39
+ require 'timeout'
40
+ warn "Faraday: you may want to install system_timer for reliable timeouts"
41
+ ensure
42
+ Timer = defined?(::SystemTimer) ? ::SystemTimer : ::Timeout
43
+ end
44
+
45
+ module MiddlewareRegistry
46
+ # Internal: Register middleware class(es) on the current module.
47
+ #
48
+ # mapping - A Hash mapping Symbol keys to classes. See
49
+ # Faraday.register_middleware for more details.
50
+ def register_middleware(mapping)
51
+ (@registered_middleware ||= {}).update(mapping)
28
52
  end
29
53
 
30
- def lookup_module(key)
31
- return if !@lookup_module_index
32
- const_get @lookup_module_index[key] || key
54
+ # Internal: Lookup middleware class with a registered Symbol shortcut.
55
+ #
56
+ # Returns a middleware Class.
57
+ def lookup_middleware(key)
58
+ unless defined? @registered_middleware and found = @registered_middleware[key]
59
+ raise "#{key.inspect} is not registered on #{self}"
60
+ end
61
+ found = @registered_middleware[key] = found.call if found.is_a? Proc
62
+ found.is_a?(Module) ? found : const_get(found)
33
63
  end
64
+ end
34
65
 
66
+ module AutoloadHelper
35
67
  def autoload_all(prefix, options)
68
+ if prefix =~ /^faraday(\/|$)/i
69
+ prefix = File.join(Faraday.root_path, prefix)
70
+ end
36
71
  options.each do |const_name, path|
37
72
  autoload const_name, File.join(prefix, path)
38
73
  end
@@ -54,7 +89,30 @@ module Faraday
54
89
 
55
90
  extend AutoloadHelper
56
91
 
57
- autoload_all 'faraday',
92
+ # Public: register middleware classes under a short name.
93
+ #
94
+ # type - A Symbol specifying the kind of middleware (default: :middleware)
95
+ # mapping - A Hash mapping Symbol keys to classes. Classes can be expressed
96
+ # as fully qualified constant, or a Proc that will be lazily called
97
+ # to return the former.
98
+ #
99
+ # Examples
100
+ #
101
+ # Faraday.register_middleware :aloha => MyModule::Aloha
102
+ # Faraday.register_middleware :response, :boom => MyModule::Boom
103
+ #
104
+ # # shortcuts are now available in Builder:
105
+ # builder.use :aloha
106
+ # builder.response :boom
107
+ #
108
+ # Returns nothing.
109
+ def self.register_middleware type, mapping = nil
110
+ type, mapping = :middleware, type if mapping.nil?
111
+ component = self.const_get(type.to_s.capitalize)
112
+ component.register_middleware(mapping)
113
+ end
114
+
115
+ autoload_all "faraday",
58
116
  :Middleware => 'middleware',
59
117
  :Builder => 'builder',
60
118
  :Request => 'request',
@@ -62,14 +120,12 @@ module Faraday
62
120
  :CompositeReadIO => 'upload_io',
63
121
  :UploadIO => 'upload_io',
64
122
  :Parts => 'upload_io'
123
+
124
+ require_libs "utils", "connection", "adapter", "error"
65
125
  end
66
126
 
67
- require 'faraday/utils'
68
- require 'faraday/connection'
69
- require 'faraday/adapter'
70
- require 'faraday/error'
71
127
 
72
- # not pulling in active-support JUST for this method.
128
+ # not pulling in active-support JUST for this method. And I love this method.
73
129
  class Object
74
130
  # Yields <code>x</code> to the block, and then returns <code>x</code>.
75
131
  # The primary purpose of this method is to "tap into" a method chain,
@@ -0,0 +1,14 @@
1
+ require File.expand_path('../integration', __FILE__)
2
+
3
+ module Adapters
4
+ class DefaultTest < Faraday::TestCase
5
+
6
+ def adapter() :default end
7
+
8
+ Integration.apply(self, :NonParallel) do
9
+ # default stack is not configured with Multipart
10
+ undef :test_POST_sends_files
11
+ end
12
+
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ require File.expand_path('../integration', __FILE__)
2
+
3
+ module Adapters
4
+ class EMHttpTest < Faraday::TestCase
5
+
6
+ def adapter() :em_http end
7
+
8
+ Integration.apply(self, :Parallel) do
9
+ # https://github.com/eventmachine/eventmachine/pull/289
10
+ undef :test_timeout
11
+ end
12
+
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ require File.expand_path('../integration', __FILE__)
2
+
3
+ module Adapters
4
+ class EMSynchronyTest < Faraday::TestCase
5
+
6
+ def adapter() :em_synchrony end
7
+
8
+ Integration.apply(self, :Parallel) do
9
+ # https://github.com/eventmachine/eventmachine/pull/289
10
+ undef :test_timeout
11
+ end
12
+
13
+ end unless RUBY_VERSION < '1.9' or (defined? RUBY_ENGINE and 'jruby' == RUBY_ENGINE)
14
+ end
@@ -0,0 +1,23 @@
1
+ require File.expand_path('../integration', __FILE__)
2
+
3
+ module Adapters
4
+ class ExconTest < Faraday::TestCase
5
+
6
+ def adapter() :excon end
7
+
8
+ # https://github.com/geemus/excon/issues/98
9
+ if defined?(RUBY_ENGINE) and "rbx" == RUBY_ENGINE
10
+ warn "Warning: Skipping Excon tests on Rubinius"
11
+ else
12
+ Integration.apply(self, :NonParallel) do
13
+ # https://github.com/eventmachine/eventmachine/pull/289
14
+ undef :test_timeout
15
+
16
+ # FIXME: this test fails on Travis with
17
+ # "Faraday::Error::ClientError: the server responded with status 400"
18
+ undef :test_POST_sends_files if ENV['CI']
19
+ end
20
+ end
21
+
22
+ end
23
+ end