avdi-faraday 0.8.1

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 (60) hide show
  1. data/Gemfile +27 -0
  2. data/LICENSE.md +20 -0
  3. data/README.md +250 -0
  4. data/Rakefile +87 -0
  5. data/config.ru +6 -0
  6. data/faraday.gemspec +86 -0
  7. data/lib/faraday.rb +276 -0
  8. data/lib/faraday/adapter.rb +71 -0
  9. data/lib/faraday/adapter/em_http.rb +217 -0
  10. data/lib/faraday/adapter/em_synchrony.rb +89 -0
  11. data/lib/faraday/adapter/em_synchrony/parallel_manager.rb +66 -0
  12. data/lib/faraday/adapter/excon.rb +59 -0
  13. data/lib/faraday/adapter/httpclient.rb +92 -0
  14. data/lib/faraday/adapter/net_http.rb +116 -0
  15. data/lib/faraday/adapter/net_http_persistent.rb +37 -0
  16. data/lib/faraday/adapter/patron.rb +65 -0
  17. data/lib/faraday/adapter/rack.rb +57 -0
  18. data/lib/faraday/adapter/test.rb +162 -0
  19. data/lib/faraday/adapter/typhoeus.rb +107 -0
  20. data/lib/faraday/builder.rb +184 -0
  21. data/lib/faraday/connection.rb +468 -0
  22. data/lib/faraday/error.rb +40 -0
  23. data/lib/faraday/middleware.rb +41 -0
  24. data/lib/faraday/request.rb +101 -0
  25. data/lib/faraday/request/authorization.rb +40 -0
  26. data/lib/faraday/request/basic_authentication.rb +13 -0
  27. data/lib/faraday/request/multipart.rb +62 -0
  28. data/lib/faraday/request/retry.rb +67 -0
  29. data/lib/faraday/request/token_authentication.rb +15 -0
  30. data/lib/faraday/request/url_encoded.rb +35 -0
  31. data/lib/faraday/response.rb +99 -0
  32. data/lib/faraday/response/logger.rb +34 -0
  33. data/lib/faraday/response/raise_error.rb +16 -0
  34. data/lib/faraday/upload_io.rb +23 -0
  35. data/lib/faraday/utils.rb +274 -0
  36. data/script/test +91 -0
  37. data/test/adapters/default_test.rb +14 -0
  38. data/test/adapters/em_http_test.rb +19 -0
  39. data/test/adapters/em_synchrony_test.rb +20 -0
  40. data/test/adapters/excon_test.rb +15 -0
  41. data/test/adapters/httpclient_test.rb +16 -0
  42. data/test/adapters/integration.rb +193 -0
  43. data/test/adapters/logger_test.rb +37 -0
  44. data/test/adapters/net_http_persistent_test.rb +11 -0
  45. data/test/adapters/net_http_test.rb +49 -0
  46. data/test/adapters/patron_test.rb +17 -0
  47. data/test/adapters/rack_test.rb +26 -0
  48. data/test/adapters/test_middleware_test.rb +70 -0
  49. data/test/adapters/typhoeus_test.rb +20 -0
  50. data/test/authentication_middleware_test.rb +65 -0
  51. data/test/connection_test.rb +375 -0
  52. data/test/env_test.rb +183 -0
  53. data/test/helper.rb +75 -0
  54. data/test/live_server.rb +57 -0
  55. data/test/middleware/retry_test.rb +62 -0
  56. data/test/middleware_stack_test.rb +203 -0
  57. data/test/middleware_test.rb +12 -0
  58. data/test/request_middleware_test.rb +108 -0
  59. data/test/response_middleware_test.rb +74 -0
  60. metadata +182 -0
@@ -0,0 +1,12 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
2
+
3
+ class TestConnection < Faraday::TestCase
4
+
5
+ def test_adapters_know_they_are_adapters
6
+ assert Faraday::Adapter.adapter?
7
+ end
8
+
9
+ def test_middleware_is_not_adapter_by_default
10
+ assert !Faraday::Middleware.adapter?
11
+ end
12
+ end
@@ -0,0 +1,108 @@
1
+ # encoding: utf-8
2
+ require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
3
+
4
+ Faraday::CompositeReadIO.class_eval { attr_reader :ios }
5
+
6
+ class RequestMiddlewareTest < Faraday::TestCase
7
+ def setup
8
+ @conn = Faraday.new do |b|
9
+ b.request :multipart
10
+ b.request :url_encoded
11
+ b.adapter :test do |stub|
12
+ stub.post('/echo') do |env|
13
+ posted_as = env[:request_headers]['Content-Type']
14
+ [200, {'Content-Type' => posted_as}, env[:body]]
15
+ end
16
+ end
17
+ end
18
+ end
19
+
20
+ def test_does_nothing_without_payload
21
+ response = @conn.post('/echo')
22
+ assert_nil response.headers['Content-Type']
23
+ assert response.body.empty?
24
+ end
25
+
26
+ def test_ignores_custom_content_type
27
+ response = @conn.post('/echo', { :some => 'data' }, 'content-type' => 'application/x-foo')
28
+ assert_equal 'application/x-foo', response.headers['Content-Type']
29
+ assert_equal({ :some => 'data' }, response.body)
30
+ end
31
+
32
+ def test_url_encoded_no_header
33
+ response = @conn.post('/echo', { :fruit => %w[apples oranges] })
34
+ assert_equal 'application/x-www-form-urlencoded', response.headers['Content-Type']
35
+ assert_equal 'fruit%5B%5D=apples&fruit%5B%5D=oranges', response.body
36
+ end
37
+
38
+ def test_url_encoded_with_header
39
+ response = @conn.post('/echo', {'a'=>123}, 'content-type' => 'application/x-www-form-urlencoded')
40
+ assert_equal 'application/x-www-form-urlencoded', response.headers['Content-Type']
41
+ assert_equal 'a=123', response.body
42
+ end
43
+
44
+ def test_url_encoded_nested
45
+ response = @conn.post('/echo', { :user => {:name => 'Mislav', :web => 'mislav.net'} })
46
+ assert_equal 'application/x-www-form-urlencoded', response.headers['Content-Type']
47
+ expected = { 'user' => {'name' => 'Mislav', 'web' => 'mislav.net'} }
48
+ assert_equal expected, Faraday::Utils.parse_nested_query(response.body)
49
+ end
50
+
51
+ def test_url_encoded_unicode
52
+ err = capture_warnings {
53
+ response = @conn.post('/echo', {:str => "eé cç aã aâ"})
54
+ assert_equal "str=e%C3%A9+c%C3%A7+a%C3%A3+a%C3%A2", response.body
55
+ }
56
+ assert err.empty?
57
+ end
58
+
59
+ def test_url_encoded_nested_keys
60
+ response = @conn.post('/echo', {'a'=>{'b'=>{'c'=>['d']}}})
61
+ assert_equal "a%5Bb%5D%5Bc%5D%5B%5D=d", response.body
62
+ end
63
+
64
+ def test_multipart
65
+ # assume params are out of order
66
+ regexes = [
67
+ /name\=\"a\"/,
68
+ /name=\"b\[c\]\"\; filename\=\"request_middleware_test\.rb\"/,
69
+ /name=\"b\[d\]\"/]
70
+
71
+ payload = {:a => 1, :b => {:c => Faraday::UploadIO.new(__FILE__, 'text/x-ruby'), :d => 2}}
72
+ response = @conn.post('/echo', payload)
73
+
74
+ assert_kind_of Faraday::CompositeReadIO, response.body
75
+ assert_equal "multipart/form-data;boundary=%s" % Faraday::Request::Multipart::DEFAULT_BOUNDARY,
76
+ response.headers['Content-Type']
77
+
78
+ response.body.send(:ios).map{|io| io.read}.each do |io|
79
+ if re = regexes.detect { |r| io =~ r }
80
+ regexes.delete re
81
+ end
82
+ end
83
+ assert_equal [], regexes
84
+ end
85
+
86
+ def test_multipart_with_arrays
87
+ # assume params are out of order
88
+ regexes = [
89
+ /name\=\"a\"/,
90
+ /name=\"b\[\]\[c\]\"\; filename\=\"request_middleware_test\.rb\"/,
91
+ /name=\"b\[\]\[d\]\"/]
92
+
93
+ payload = {:a => 1, :b =>[{:c => Faraday::UploadIO.new(__FILE__, 'text/x-ruby'), :d => 2}]}
94
+ response = @conn.post('/echo', payload)
95
+
96
+ assert_kind_of Faraday::CompositeReadIO, response.body
97
+ assert_equal "multipart/form-data;boundary=%s" % Faraday::Request::Multipart::DEFAULT_BOUNDARY,
98
+ response.headers['Content-Type']
99
+
100
+ response.body.send(:ios).map{|io| io.read}.each do |io|
101
+ if re = regexes.detect { |r| io =~ r }
102
+ regexes.delete re
103
+ end
104
+ end
105
+ assert_equal [], regexes
106
+ end
107
+
108
+ end
@@ -0,0 +1,74 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
2
+
3
+ class ResponseMiddlewareTest < Faraday::TestCase
4
+ def setup
5
+ @conn = Faraday.new do |b|
6
+ b.response :raise_error
7
+ b.adapter :test do |stub|
8
+ stub.get('ok') { [200, {'Content-Type' => 'text/html'}, '<body></body>'] }
9
+ stub.get('not-found') { [404, {'X-Reason' => 'because'}, 'keep looking'] }
10
+ stub.get('error') { [500, {'X-Error' => 'bailout'}, 'fail'] }
11
+ end
12
+ end
13
+ end
14
+
15
+ class ResponseUpcaser < Faraday::Response::Middleware
16
+ def parse(body)
17
+ body.upcase
18
+ end
19
+ end
20
+
21
+ def test_success
22
+ assert_nothing_raised do
23
+ @conn.get('ok')
24
+ end
25
+ end
26
+
27
+ def test_raises_not_found
28
+ error = assert_raises Faraday::Error::ResourceNotFound do
29
+ @conn.get('not-found')
30
+ end
31
+ assert_equal 'the server responded with status 404', error.message
32
+ assert_equal 'because', error.response[:headers]['X-Reason']
33
+ end
34
+
35
+ def test_raises_error
36
+ error = assert_raises Faraday::Error::ClientError do
37
+ @conn.get('error')
38
+ end
39
+ assert_equal 'the server responded with status 500', error.message
40
+ assert_equal 'bailout', error.response[:headers]['X-Error']
41
+ end
42
+
43
+ def test_upcase
44
+ @conn.builder.insert(0, ResponseUpcaser)
45
+ assert_equal '<BODY></BODY>', @conn.get('ok').body
46
+ end
47
+ end
48
+
49
+ class ResponseNoBodyMiddleWareTest < Faraday::TestCase
50
+ def setup
51
+ @conn = Faraday.new do |b|
52
+ b.response :raise_error
53
+ b.adapter :test do |stub|
54
+ stub.get('not_modified') { [304, nil, nil] }
55
+ stub.get('no_content') { [204, nil, nil] }
56
+ end
57
+ end
58
+ @conn.builder.insert(0, NotCalled)
59
+ end
60
+
61
+ class NotCalled < Faraday::Response::Middleware
62
+ def parse(body)
63
+ raise "this should not be called"
64
+ end
65
+ end
66
+
67
+ def test_204
68
+ assert_equal nil, @conn.get('no_content').body
69
+ end
70
+
71
+ def test_304
72
+ assert_equal nil, @conn.get('not_modified').body
73
+ end
74
+ end
metadata ADDED
@@ -0,0 +1,182 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: avdi-faraday
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.8.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Rick Olson
9
+ - Avdi Grimm
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2012-06-21 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: multipart-post
17
+ requirement: &26448080 !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ~>
21
+ - !ruby/object:Gem::Version
22
+ version: '1.1'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: *26448080
26
+ - !ruby/object:Gem::Dependency
27
+ name: rake
28
+ requirement: &26447700 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: *26447700
37
+ - !ruby/object:Gem::Dependency
38
+ name: simplecov
39
+ requirement: &26447240 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ type: :development
46
+ prerelease: false
47
+ version_requirements: *26447240
48
+ - !ruby/object:Gem::Dependency
49
+ name: test-unit
50
+ requirement: &26446820 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ type: :development
57
+ prerelease: false
58
+ version_requirements: *26446820
59
+ - !ruby/object:Gem::Dependency
60
+ name: webmock
61
+ requirement: &26446400 !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ! '>='
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ type: :development
68
+ prerelease: false
69
+ version_requirements: *26446400
70
+ description: Just a fork so I can satisfy gem dependencies in Leadlight.
71
+ email: avdi@avdi.org
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - Gemfile
77
+ - LICENSE.md
78
+ - README.md
79
+ - Rakefile
80
+ - config.ru
81
+ - faraday.gemspec
82
+ - lib/faraday.rb
83
+ - lib/faraday/adapter.rb
84
+ - lib/faraday/adapter/em_http.rb
85
+ - lib/faraday/adapter/em_synchrony.rb
86
+ - lib/faraday/adapter/em_synchrony/parallel_manager.rb
87
+ - lib/faraday/adapter/excon.rb
88
+ - lib/faraday/adapter/httpclient.rb
89
+ - lib/faraday/adapter/net_http.rb
90
+ - lib/faraday/adapter/net_http_persistent.rb
91
+ - lib/faraday/adapter/patron.rb
92
+ - lib/faraday/adapter/rack.rb
93
+ - lib/faraday/adapter/test.rb
94
+ - lib/faraday/adapter/typhoeus.rb
95
+ - lib/faraday/builder.rb
96
+ - lib/faraday/connection.rb
97
+ - lib/faraday/error.rb
98
+ - lib/faraday/middleware.rb
99
+ - lib/faraday/request.rb
100
+ - lib/faraday/request/authorization.rb
101
+ - lib/faraday/request/basic_authentication.rb
102
+ - lib/faraday/request/multipart.rb
103
+ - lib/faraday/request/retry.rb
104
+ - lib/faraday/request/token_authentication.rb
105
+ - lib/faraday/request/url_encoded.rb
106
+ - lib/faraday/response.rb
107
+ - lib/faraday/response/logger.rb
108
+ - lib/faraday/response/raise_error.rb
109
+ - lib/faraday/upload_io.rb
110
+ - lib/faraday/utils.rb
111
+ - script/test
112
+ - test/adapters/default_test.rb
113
+ - test/adapters/em_http_test.rb
114
+ - test/adapters/em_synchrony_test.rb
115
+ - test/adapters/excon_test.rb
116
+ - test/adapters/httpclient_test.rb
117
+ - test/adapters/integration.rb
118
+ - test/adapters/logger_test.rb
119
+ - test/adapters/net_http_persistent_test.rb
120
+ - test/adapters/net_http_test.rb
121
+ - test/adapters/patron_test.rb
122
+ - test/adapters/rack_test.rb
123
+ - test/adapters/test_middleware_test.rb
124
+ - test/adapters/typhoeus_test.rb
125
+ - test/authentication_middleware_test.rb
126
+ - test/connection_test.rb
127
+ - test/env_test.rb
128
+ - test/helper.rb
129
+ - test/live_server.rb
130
+ - test/middleware/retry_test.rb
131
+ - test/middleware_stack_test.rb
132
+ - test/middleware_test.rb
133
+ - test/request_middleware_test.rb
134
+ - test/response_middleware_test.rb
135
+ homepage: https://github.com/avdi/faraday
136
+ licenses: []
137
+ post_install_message:
138
+ rdoc_options: []
139
+ require_paths:
140
+ - lib
141
+ required_ruby_version: !ruby/object:Gem::Requirement
142
+ none: false
143
+ requirements:
144
+ - - ! '>='
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ required_rubygems_version: !ruby/object:Gem::Requirement
148
+ none: false
149
+ requirements:
150
+ - - ! '>='
151
+ - !ruby/object:Gem::Version
152
+ version: 1.3.5
153
+ requirements: []
154
+ rubyforge_project:
155
+ rubygems_version: 1.8.10
156
+ signing_key:
157
+ specification_version: 2
158
+ summary: Avdi's personal fork of Faraday. Nothing to see here. Move along.
159
+ test_files:
160
+ - test/adapters/default_test.rb
161
+ - test/adapters/em_http_test.rb
162
+ - test/adapters/em_synchrony_test.rb
163
+ - test/adapters/excon_test.rb
164
+ - test/adapters/httpclient_test.rb
165
+ - test/adapters/integration.rb
166
+ - test/adapters/logger_test.rb
167
+ - test/adapters/net_http_persistent_test.rb
168
+ - test/adapters/net_http_test.rb
169
+ - test/adapters/patron_test.rb
170
+ - test/adapters/rack_test.rb
171
+ - test/adapters/test_middleware_test.rb
172
+ - test/adapters/typhoeus_test.rb
173
+ - test/authentication_middleware_test.rb
174
+ - test/connection_test.rb
175
+ - test/env_test.rb
176
+ - test/helper.rb
177
+ - test/live_server.rb
178
+ - test/middleware/retry_test.rb
179
+ - test/middleware_stack_test.rb
180
+ - test/middleware_test.rb
181
+ - test/request_middleware_test.rb
182
+ - test/response_middleware_test.rb