faraday 0.6.0 → 0.9.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 (83) hide show
  1. checksums.yaml +7 -0
  2. data/.document +6 -0
  3. data/CHANGELOG.md +15 -0
  4. data/CONTRIBUTING.md +36 -0
  5. data/Gemfile +25 -15
  6. data/{LICENSE → LICENSE.md} +1 -1
  7. data/README.md +187 -137
  8. data/Rakefile +38 -101
  9. data/faraday.gemspec +26 -81
  10. data/lib/faraday/adapter/em_http.rb +237 -0
  11. data/lib/faraday/adapter/em_http_ssl_patch.rb +56 -0
  12. data/lib/faraday/adapter/em_synchrony/parallel_manager.rb +66 -0
  13. data/lib/faraday/adapter/em_synchrony.rb +65 -38
  14. data/lib/faraday/adapter/excon.rb +60 -9
  15. data/lib/faraday/adapter/httpclient.rb +106 -0
  16. data/lib/faraday/adapter/net_http.rb +89 -38
  17. data/lib/faraday/adapter/net_http_persistent.rb +47 -0
  18. data/lib/faraday/adapter/patron.rb +46 -9
  19. data/lib/faraday/adapter/rack.rb +58 -0
  20. data/lib/faraday/adapter/test.rb +68 -28
  21. data/lib/faraday/adapter/typhoeus.rb +94 -16
  22. data/lib/faraday/adapter.rb +33 -25
  23. data/lib/faraday/autoload.rb +85 -0
  24. data/lib/faraday/connection.rb +342 -134
  25. data/lib/faraday/error.rb +44 -29
  26. data/lib/faraday/middleware.rb +18 -10
  27. data/lib/faraday/options.rb +350 -0
  28. data/lib/faraday/parameters.rb +193 -0
  29. data/lib/faraday/rack_builder.rb +212 -0
  30. data/lib/faraday/request/authorization.rb +42 -0
  31. data/lib/faraday/request/basic_authentication.rb +13 -0
  32. data/lib/faraday/request/instrumentation.rb +36 -0
  33. data/lib/faraday/request/multipart.rb +15 -15
  34. data/lib/faraday/request/retry.rb +118 -0
  35. data/lib/faraday/request/token_authentication.rb +15 -0
  36. data/lib/faraday/request/url_encoded.rb +8 -9
  37. data/lib/faraday/request.rb +46 -45
  38. data/lib/faraday/response/logger.rb +4 -4
  39. data/lib/faraday/response/raise_error.rb +8 -3
  40. data/lib/faraday/response.rb +20 -25
  41. data/lib/faraday/upload_io.rb +51 -7
  42. data/lib/faraday/utils.rb +240 -44
  43. data/lib/faraday.rb +218 -38
  44. data/script/console +7 -0
  45. data/script/generate_certs +42 -0
  46. data/script/package +7 -0
  47. data/script/proxy-server +42 -0
  48. data/script/release +17 -0
  49. data/script/server +36 -0
  50. data/script/test +172 -0
  51. data/test/adapters/default_test.rb +14 -0
  52. data/test/adapters/em_http_test.rb +20 -0
  53. data/test/adapters/em_synchrony_test.rb +20 -0
  54. data/test/adapters/excon_test.rb +20 -0
  55. data/test/adapters/httpclient_test.rb +21 -0
  56. data/test/adapters/integration.rb +254 -0
  57. data/test/adapters/logger_test.rb +3 -3
  58. data/test/adapters/net_http_persistent_test.rb +20 -0
  59. data/test/adapters/net_http_test.rb +6 -25
  60. data/test/adapters/patron_test.rb +20 -0
  61. data/test/adapters/rack_test.rb +31 -0
  62. data/test/adapters/test_middleware_test.rb +74 -3
  63. data/test/adapters/typhoeus_test.rb +28 -0
  64. data/test/authentication_middleware_test.rb +65 -0
  65. data/test/composite_read_io_test.rb +111 -0
  66. data/test/connection_test.rb +381 -104
  67. data/test/env_test.rb +116 -40
  68. data/test/helper.rb +61 -25
  69. data/test/live_server.rb +55 -29
  70. data/test/middleware/instrumentation_test.rb +88 -0
  71. data/test/middleware/retry_test.rb +109 -0
  72. data/test/middleware_stack_test.rb +87 -5
  73. data/test/multibyte.txt +1 -0
  74. data/test/options_test.rb +252 -0
  75. data/test/request_middleware_test.rb +78 -21
  76. data/test/response_middleware_test.rb +32 -7
  77. data/test/strawberry.rb +2 -0
  78. data/test/utils_test.rb +58 -0
  79. metadata +116 -117
  80. data/lib/faraday/adapter/action_dispatch.rb +0 -30
  81. data/lib/faraday/builder.rb +0 -137
  82. data/lib/faraday/request/json.rb +0 -31
  83. data/test/adapters/live_test.rb +0 -186
metadata CHANGED
@@ -1,182 +1,181 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: faraday
3
- version: !ruby/object:Gem::Version
4
- hash: 7
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 6
9
- - 0
10
- version: 0.6.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.0
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - Rick Olson
14
8
  autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
-
18
- date: 2011-03-31 00:00:00 -07:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
22
- name: rake
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ~>
28
- - !ruby/object:Gem::Version
29
- hash: 27
30
- segments:
31
- - 0
32
- - 8
33
- version: "0.8"
34
- type: :development
35
- version_requirements: *id001
36
- - !ruby/object:Gem::Dependency
37
- name: addressable
38
- prerelease: false
39
- requirement: &id002 !ruby/object:Gem::Requirement
40
- none: false
41
- requirements:
42
- - - ~>
43
- - !ruby/object:Gem::Version
44
- hash: 15
45
- segments:
46
- - 2
47
- - 2
48
- - 4
49
- version: 2.2.4
50
- type: :runtime
51
- version_requirements: *id002
52
- - !ruby/object:Gem::Dependency
11
+ date: 2014-01-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
53
14
  name: multipart-post
54
- prerelease: false
55
- requirement: &id003 !ruby/object:Gem::Requirement
56
- none: false
57
- requirements:
58
- - - ~>
59
- - !ruby/object:Gem::Version
60
- hash: 19
61
- segments:
62
- - 1
63
- - 1
64
- - 0
65
- version: 1.1.0
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'
66
23
  type: :runtime
67
- version_requirements: *id003
68
- - !ruby/object:Gem::Dependency
69
- name: rack
70
24
  prerelease: false
71
- requirement: &id004 !ruby/object:Gem::Requirement
72
- none: false
73
- requirements:
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
74
27
  - - ">="
75
- - !ruby/object:Gem::Version
76
- hash: 19
77
- segments:
78
- - 1
79
- - 1
80
- - 0
81
- version: 1.1.0
82
- - - <
83
- - !ruby/object:Gem::Version
84
- hash: 7
85
- segments:
86
- - 2
87
- version: "2"
88
- type: :runtime
89
- version_requirements: *id004
90
- description: HTTP/REST API client library.
28
+ - !ruby/object:Gem::Version
29
+ version: '1.2'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '3'
33
+ - !ruby/object:Gem::Dependency
34
+ name: bundler
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.0'
40
+ type: :development
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '1.0'
47
+ description:
91
48
  email: technoweenie@gmail.com
92
49
  executables: []
93
-
94
50
  extensions: []
95
-
96
51
  extra_rdoc_files: []
97
-
98
- files:
52
+ files:
53
+ - ".document"
54
+ - CHANGELOG.md
55
+ - CONTRIBUTING.md
99
56
  - Gemfile
100
- - LICENSE
57
+ - LICENSE.md
101
58
  - README.md
102
59
  - Rakefile
103
60
  - faraday.gemspec
104
61
  - lib/faraday.rb
105
62
  - lib/faraday/adapter.rb
106
- - lib/faraday/adapter/action_dispatch.rb
63
+ - lib/faraday/adapter/em_http.rb
64
+ - lib/faraday/adapter/em_http_ssl_patch.rb
107
65
  - lib/faraday/adapter/em_synchrony.rb
66
+ - lib/faraday/adapter/em_synchrony/parallel_manager.rb
108
67
  - lib/faraday/adapter/excon.rb
68
+ - lib/faraday/adapter/httpclient.rb
109
69
  - lib/faraday/adapter/net_http.rb
70
+ - lib/faraday/adapter/net_http_persistent.rb
110
71
  - lib/faraday/adapter/patron.rb
72
+ - lib/faraday/adapter/rack.rb
111
73
  - lib/faraday/adapter/test.rb
112
74
  - lib/faraday/adapter/typhoeus.rb
113
- - lib/faraday/builder.rb
75
+ - lib/faraday/autoload.rb
114
76
  - lib/faraday/connection.rb
115
77
  - lib/faraday/error.rb
116
78
  - lib/faraday/middleware.rb
79
+ - lib/faraday/options.rb
80
+ - lib/faraday/parameters.rb
81
+ - lib/faraday/rack_builder.rb
117
82
  - lib/faraday/request.rb
118
- - lib/faraday/request/json.rb
83
+ - lib/faraday/request/authorization.rb
84
+ - lib/faraday/request/basic_authentication.rb
85
+ - lib/faraday/request/instrumentation.rb
119
86
  - lib/faraday/request/multipart.rb
87
+ - lib/faraday/request/retry.rb
88
+ - lib/faraday/request/token_authentication.rb
120
89
  - lib/faraday/request/url_encoded.rb
121
90
  - lib/faraday/response.rb
122
91
  - lib/faraday/response/logger.rb
123
92
  - lib/faraday/response/raise_error.rb
124
93
  - lib/faraday/upload_io.rb
125
94
  - lib/faraday/utils.rb
126
- - test/adapters/live_test.rb
95
+ - script/console
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
127
108
  - test/adapters/logger_test.rb
109
+ - test/adapters/net_http_persistent_test.rb
128
110
  - test/adapters/net_http_test.rb
111
+ - test/adapters/patron_test.rb
112
+ - test/adapters/rack_test.rb
129
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
130
117
  - test/connection_test.rb
131
118
  - test/env_test.rb
132
119
  - test/helper.rb
133
120
  - test/live_server.rb
121
+ - test/middleware/instrumentation_test.rb
122
+ - test/middleware/retry_test.rb
134
123
  - test/middleware_stack_test.rb
124
+ - test/multibyte.txt
125
+ - test/options_test.rb
135
126
  - test/request_middleware_test.rb
136
127
  - test/response_middleware_test.rb
137
- has_rdoc: true
138
- homepage: http://github.com/technoweenie/faraday
139
- licenses: []
140
-
128
+ - test/strawberry.rb
129
+ - test/utils_test.rb
130
+ homepage: https://github.com/lostisland/faraday
131
+ licenses:
132
+ - MIT
133
+ metadata: {}
141
134
  post_install_message:
142
135
  rdoc_options: []
143
-
144
- require_paths:
136
+ require_paths:
145
137
  - lib
146
- required_ruby_version: !ruby/object:Gem::Requirement
147
- none: false
148
- requirements:
138
+ required_ruby_version: !ruby/object:Gem::Requirement
139
+ requirements:
149
140
  - - ">="
150
- - !ruby/object:Gem::Version
151
- hash: 3
152
- segments:
153
- - 0
154
- version: "0"
155
- required_rubygems_version: !ruby/object:Gem::Requirement
156
- none: false
157
- requirements:
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ required_rubygems_version: !ruby/object:Gem::Requirement
144
+ requirements:
158
145
  - - ">="
159
- - !ruby/object:Gem::Version
160
- hash: 17
161
- segments:
162
- - 1
163
- - 3
164
- - 5
146
+ - !ruby/object:Gem::Version
165
147
  version: 1.3.5
166
148
  requirements: []
167
-
168
- rubyforge_project: faraday
169
- rubygems_version: 1.3.7
149
+ rubyforge_project:
150
+ rubygems_version: 2.2.0
170
151
  signing_key:
171
152
  specification_version: 2
172
153
  summary: HTTP/REST API client library.
173
- test_files:
174
- - test/adapters/live_test.rb
154
+ test_files:
155
+ - test/adapters/default_test.rb
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
175
161
  - test/adapters/logger_test.rb
162
+ - test/adapters/net_http_persistent_test.rb
176
163
  - test/adapters/net_http_test.rb
164
+ - test/adapters/patron_test.rb
165
+ - test/adapters/rack_test.rb
177
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
178
170
  - test/connection_test.rb
179
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
180
176
  - test/middleware_stack_test.rb
177
+ - test/options_test.rb
181
178
  - test/request_middleware_test.rb
182
179
  - test/response_middleware_test.rb
180
+ - test/strawberry.rb
181
+ - test/utils_test.rb
@@ -1,30 +0,0 @@
1
- module Faraday
2
- class Adapter
3
- class ActionDispatch < Faraday::Adapter
4
- attr_reader :session
5
-
6
- # Initializes a new middleware instance for each request. Instead of
7
- # initiating an HTTP request with a web server, this adapter calls
8
- # a Rails 3 app using integration tests.
9
- #
10
- # app - The current Faraday request.
11
- # session - An ActionDispatch::Integration::Session instance.
12
- #
13
- # Returns nothing.
14
- def initialize(app, session)
15
- super(app)
16
- @session = session
17
- @session.reset!
18
- end
19
-
20
- def call(env)
21
- super
22
- @session.__send__(env[:method], env[:url].request_uri, env[:body], env[:request_headers])
23
- resp = @session.response
24
- env.update :status => resp.status, :body => resp.body
25
- response_headers(env).update resp.headers
26
- @app.call env
27
- end
28
- end
29
- end
30
- end
@@ -1,137 +0,0 @@
1
- module Faraday
2
- # Possibly going to extend this a bit.
3
- #
4
- # Faraday::Connection.new(:url => 'http://sushi.com') do |builder|
5
- # builder.request :url_encoded # Faraday::Request::UrlEncoded
6
- # builder.adapter :net_http # Faraday::Adapter::NetHttp
7
- # end
8
- class Builder
9
- attr_accessor :handlers
10
-
11
- def self.create
12
- new { |builder| yield builder }
13
- end
14
-
15
- # borrowed from ActiveSupport::Dependencies::Reference &
16
- # ActionDispatch::MiddlewareStack::Middleware
17
- class Handler
18
- @@constants = Hash.new { |h, k|
19
- h[k] = k.respond_to?(:constantize) ? k.constantize : Object.const_get(k)
20
- }
21
-
22
- attr_reader :name
23
-
24
- def initialize(klass, *args, &block)
25
- @name = klass.to_s
26
- @@constants[@name] = klass if klass.respond_to?(:name)
27
- @args, @block = args, block
28
- end
29
-
30
- def klass() @@constants[@name] end
31
- def inspect() @name end
32
-
33
- def ==(other)
34
- if other.respond_to? :name
35
- klass == other
36
- else
37
- @name == other.to_s
38
- end
39
- end
40
-
41
- def build(app)
42
- klass.new(app, *@args, &@block)
43
- end
44
- end
45
-
46
- def initialize(handlers = [])
47
- @handlers = handlers
48
- if block_given?
49
- build(&Proc.new)
50
- elsif @handlers.empty?
51
- # default stack, if nothing else is configured
52
- self.request :url_encoded
53
- self.adapter Faraday.default_adapter
54
- end
55
- end
56
-
57
- def build(options = {})
58
- @handlers.clear unless options[:keep]
59
- yield self if block_given?
60
- end
61
-
62
- def [](idx)
63
- @handlers[idx]
64
- end
65
-
66
- def ==(other)
67
- other.is_a?(self.class) && @handlers == other.handlers
68
- end
69
-
70
- def dup
71
- self.class.new(@handlers.dup)
72
- end
73
-
74
- def to_app(inner_app)
75
- # last added handler is the deepest and thus closest to the inner app
76
- @handlers.reverse.inject(inner_app) { |app, handler| handler.build(app) }
77
- end
78
-
79
- def use(klass, *args)
80
- block = block_given? ? Proc.new : nil
81
- @handlers << self.class::Handler.new(klass, *args, &block)
82
- end
83
-
84
- def request(key, *args)
85
- block = block_given? ? Proc.new : nil
86
- use_symbol(Faraday::Request, key, *args, &block)
87
- end
88
-
89
- def response(key, *args)
90
- block = block_given? ? Proc.new : nil
91
- use_symbol(Faraday::Response, key, *args, &block)
92
- end
93
-
94
- def adapter(key, *args)
95
- block = block_given? ? Proc.new : nil
96
- use_symbol(Faraday::Adapter, key, *args, &block)
97
- end
98
-
99
- ## methods to push onto the various positions in the stack:
100
-
101
- def insert(index, *args, &block)
102
- index = assert_index(index)
103
- handler = self.class::Handler.new(*args, &block)
104
- @handlers.insert(index, handler)
105
- end
106
-
107
- alias_method :insert_before, :insert
108
-
109
- def insert_after(index, *args, &block)
110
- index = assert_index(index)
111
- insert(index + 1, *args, &block)
112
- end
113
-
114
- def swap(index, *args, &block)
115
- index = assert_index(index)
116
- @handlers.delete_at(index)
117
- insert(index, *args, &block)
118
- end
119
-
120
- def delete(handler)
121
- @handlers.delete(handler)
122
- end
123
-
124
- private
125
-
126
- def use_symbol(mod, key, *args)
127
- block = block_given? ? Proc.new : nil
128
- use(mod.lookup_module(key), *args, &block)
129
- end
130
-
131
- def assert_index(index)
132
- idx = index.is_a?(Integer) ? index : @handlers.index(index)
133
- raise "No such handler: #{index.inspect}" unless idx
134
- idx
135
- end
136
- end
137
- end
@@ -1,31 +0,0 @@
1
- module Faraday
2
- class Request::JSON < Request::UrlEncoded
3
- self.mime_type = 'application/json'.freeze
4
-
5
- class << self
6
- attr_accessor :adapter
7
- end
8
-
9
- # loads the JSON encoder either from yajl-ruby or activesupport
10
- dependency do
11
- begin
12
- require 'yajl'
13
- self.adapter = Yajl::Encoder
14
- rescue LoadError, NameError
15
- require 'active_support/core_ext/module/attribute_accessors' # AS 2.3.11
16
- require 'active_support/core_ext/kernel/reporting' # AS 2.3.11
17
- require 'active_support/json/encoding'
18
- require 'active_support/ordered_hash' # AS 3.0.4
19
- self.adapter = ActiveSupport::JSON
20
- end
21
- end
22
-
23
- def call(env)
24
- match_content_type(env) do |data|
25
- # encode with the first successfully loaded adapter
26
- env[:body] = self.class.adapter.encode data
27
- end
28
- @app.call env
29
- end
30
- end
31
- end
@@ -1,186 +0,0 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), '..', 'helper'))
2
-
3
- if !Faraday::TestCase::LIVE_SERVER
4
- warn "warning: test server is not up; skipping live server tests"
5
- else
6
- module Adapters
7
- class LiveTest < Faraday::TestCase
8
- adapters = if ENV['ADAPTER']
9
- ENV['ADAPTER'].split(':').map { |name| Faraday::Adapter.lookup_module name.to_sym }
10
- else
11
- loaded_adapters = Faraday::Adapter.all_loaded_constants
12
- loaded_adapters -= [Faraday::Adapter::ActionDispatch]
13
- loaded_adapters << :default
14
- end
15
-
16
- adapters.each do |adapter|
17
- define_method "test_#{adapter}_GET_retrieves_the_response_body" do
18
- assert_equal 'hello world', create_connection(adapter).get('hello_world').body
19
- end
20
-
21
- define_method "test_#{adapter}_GET_send_url_encoded_params" do
22
- resp = create_connection(adapter).get do |req|
23
- req.url 'hello', 'name' => 'zack'
24
- end
25
- assert_equal('hello zack', resp.body)
26
- end
27
-
28
- define_method "test_#{adapter}_GET_retrieves_the_response_headers" do
29
- response = create_connection(adapter).get('hello_world')
30
- assert_match /text\/html/, response.headers['Content-Type'], 'original case fail'
31
- assert_match /text\/html/, response.headers['content-type'], 'lowercase fail'
32
- end
33
-
34
- # https://github.com/geemus/excon/issues/10
35
- unless %[Faraday::Adapter::Excon] == adapter.to_s
36
- define_method "test_#{adapter}_GET_handles_headers_with_multiple_values" do
37
- response = create_connection(adapter).get('multi')
38
- assert_equal 'one, two', response.headers['set-cookie']
39
- end
40
- end
41
-
42
- define_method "test_#{adapter}_POST_send_url_encoded_params" do
43
- resp = create_connection(adapter).post do |req|
44
- req.url 'echo_name'
45
- req.body = {'name' => 'zack'}
46
- end
47
- assert_equal %("zack"), resp.body
48
- end
49
-
50
- define_method "test_#{adapter}_POST_send_url_encoded_nested_params" do
51
- resp = create_connection(adapter).post do |req|
52
- req.url 'echo_name'
53
- req.body = {'name' => {'first' => 'zack'}}
54
- end
55
- assert_equal %({"first"=>"zack"}), resp.body
56
- end
57
-
58
- define_method "test_#{adapter}_POST_retrieves_the_response_headers" do
59
- assert_match /text\/html/, create_connection(adapter).post('echo_name').headers['content-type']
60
- end
61
-
62
- define_method "test_#{adapter}_POST_sends_files" do
63
- resp = create_connection(adapter).post do |req|
64
- req.url 'file'
65
- req.body = {'uploaded_file' => Faraday::UploadIO.new(__FILE__, 'text/x-ruby')}
66
- end
67
- assert_equal "file live_test.rb text/x-ruby", resp.body
68
- end unless :default == adapter # isn't configured for multipart
69
-
70
- # http://github.com/toland/patron/issues/#issue/9
71
- if ENV['FORCE'] || adapter != Faraday::Adapter::Patron
72
- define_method "test_#{adapter}_PUT_send_url_encoded_params" do
73
- resp = create_connection(adapter).put do |req|
74
- req.url 'echo_name'
75
- req.body = {'name' => 'zack'}
76
- end
77
- assert_equal %("zack"), resp.body
78
- end
79
-
80
- define_method "test_#{adapter}_PUT_send_url_encoded_nested_params" do
81
- resp = create_connection(adapter).put do |req|
82
- req.url 'echo_name'
83
- req.body = {'name' => {'first' => 'zack'}}
84
- end
85
- assert_equal %({"first"=>"zack"}), resp.body
86
- end
87
-
88
- define_method "test_#{adapter}_PUT_retrieves_the_response_headers" do
89
- assert_match /text\/html/, create_connection(adapter).put('echo_name').headers['content-type']
90
- end
91
- end
92
-
93
- define_method "test_#{adapter}_HEAD_send_url_encoded_params" do
94
- resp = create_connection(adapter).head do |req|
95
- req.url 'hello', 'name' => 'zack'
96
- end
97
- assert_match /text\/html/, resp.headers['content-type']
98
- end
99
-
100
- define_method "test_#{adapter}_HEAD_retrieves_no_response_body" do
101
- assert_equal '', create_connection(adapter).head('hello_world').body.to_s
102
- end
103
-
104
- define_method "test_#{adapter}_HEAD_retrieves_the_response_headers" do
105
- assert_match /text\/html/, create_connection(adapter).head('hello_world').headers['content-type']
106
- end
107
-
108
- define_method "test_#{adapter}_DELETE_retrieves_the_response_headers" do
109
- assert_match /text\/html/, create_connection(adapter).delete('delete_with_json').headers['content-type']
110
- end
111
-
112
- define_method "test_#{adapter}_DELETE_retrieves_the_body" do
113
- assert_match /deleted/, create_connection(adapter).delete('delete_with_json').body
114
- end
115
-
116
- define_method "test_#{adapter}_async_requests_clear_parallel_manager_after_running_a_single_request" do
117
- connection = create_connection(adapter)
118
- assert !connection.in_parallel?
119
- resp = connection.get('hello_world')
120
- assert !connection.in_parallel?
121
- assert_equal 'hello world', connection.get('hello_world').body
122
- end
123
-
124
- define_method "test_#{adapter}_async_requests_uses_parallel_manager_to_run_multiple_json_requests" do
125
- resp1, resp2 = nil, nil
126
-
127
- connection = create_connection(adapter)
128
- adapter = real_adapter_for(adapter)
129
-
130
- connection.in_parallel(adapter.setup_parallel_manager) do
131
- resp1 = connection.get('json')
132
- resp2 = connection.get('json')
133
- if adapter.supports_parallel_requests?
134
- assert connection.in_parallel?
135
- assert_nil resp1.body
136
- assert_nil resp2.body
137
- end
138
- end
139
- assert !connection.in_parallel?
140
- assert_equal '[1,2,3]', resp1.body
141
- assert_equal '[1,2,3]', resp2.body
142
- end
143
-
144
- if adapter.to_s == "Faraday::Adapter::EMSynchrony"
145
- instance_methods.grep(%r{Faraday::Adapter::EMSynchrony}).each do |method|
146
- em = method.to_s.sub %r{^test_}, "test_under_em_"
147
- define_method em do
148
- EM.run do
149
- Fiber.new do
150
- self.send method
151
- EM.stop
152
- end.resume
153
- end
154
- end
155
- end
156
- end
157
- end
158
-
159
- def create_connection(adapter)
160
- if adapter == :default
161
- Faraday.default_connection.tap do |conn|
162
- conn.url_prefix = LIVE_SERVER
163
- conn.headers['X-Faraday-Adapter'] = adapter.to_s
164
- end
165
- else
166
- Faraday::Connection.new LIVE_SERVER, :headers => {'X-Faraday-Adapter' => adapter.to_s} do |b|
167
- b.request :multipart
168
- b.request :url_encoded
169
- b.use adapter
170
- end
171
- end.tap do |conn|
172
- target = conn.builder.handlers.last
173
- conn.builder.insert_before target, Faraday::Response::RaiseError
174
- end
175
- end
176
-
177
- def real_adapter_for(adapter)
178
- if adapter == :default
179
- Faraday::Adapter.lookup_module(Faraday.default_adapter)
180
- else
181
- adapter
182
- end
183
- end
184
- end
185
- end
186
- end