faraday 0.5.7 → 0.6.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 (45) hide show
  1. data/Gemfile +9 -8
  2. data/README.md +99 -20
  3. data/faraday.gemspec +9 -11
  4. data/lib/faraday.rb +1 -1
  5. data/lib/faraday/adapter.rb +11 -86
  6. data/lib/faraday/adapter/action_dispatch.rb +3 -12
  7. data/lib/faraday/adapter/em_synchrony.rb +9 -24
  8. data/lib/faraday/adapter/excon.rb +7 -19
  9. data/lib/faraday/adapter/net_http.rb +37 -35
  10. data/lib/faraday/adapter/patron.rb +16 -23
  11. data/lib/faraday/adapter/test.rb +4 -10
  12. data/lib/faraday/adapter/typhoeus.rb +11 -39
  13. data/lib/faraday/builder.rb +82 -33
  14. data/lib/faraday/connection.rb +3 -10
  15. data/lib/faraday/error.rb +20 -15
  16. data/lib/faraday/middleware.rb +7 -2
  17. data/lib/faraday/request.rb +13 -10
  18. data/lib/faraday/request/json.rb +31 -0
  19. data/lib/faraday/request/multipart.rb +63 -0
  20. data/lib/faraday/request/url_encoded.rb +37 -0
  21. data/lib/faraday/response.rb +72 -30
  22. data/lib/faraday/response/logger.rb +34 -0
  23. data/lib/faraday/response/raise_error.rb +16 -0
  24. data/lib/faraday/upload_io.rb +14 -6
  25. data/lib/faraday/utils.rb +54 -17
  26. data/test/adapters/live_test.rb +36 -14
  27. data/test/adapters/logger_test.rb +1 -1
  28. data/test/adapters/net_http_test.rb +33 -0
  29. data/test/connection_test.rb +0 -39
  30. data/test/env_test.rb +84 -6
  31. data/test/helper.rb +17 -8
  32. data/test/live_server.rb +19 -17
  33. data/test/middleware_stack_test.rb +91 -0
  34. data/test/request_middleware_test.rb +75 -21
  35. data/test/response_middleware_test.rb +34 -31
  36. metadata +21 -17
  37. data/lib/faraday/adapter/logger.rb +0 -32
  38. data/lib/faraday/request/active_support_json.rb +0 -21
  39. data/lib/faraday/request/yajl.rb +0 -18
  40. data/lib/faraday/response/active_support_json.rb +0 -30
  41. data/lib/faraday/response/yajl.rb +0 -26
  42. data/test/adapters/typhoeus_test.rb +0 -31
  43. data/test/connection_app_test.rb +0 -60
  44. data/test/form_post_test.rb +0 -58
  45. data/test/multipart_test.rb +0 -48
@@ -1,18 +0,0 @@
1
- module Faraday
2
- class Request::Yajl < Faraday::Middleware
3
- begin
4
- require 'yajl'
5
-
6
- rescue LoadError, NameError => e
7
- self.load_error = e
8
- end
9
-
10
- def call(env)
11
- env[:request_headers]['Content-Type'] = 'application/json'
12
- if env[:body] && !env[:body].respond_to?(:to_str)
13
- env[:body] = Yajl::Encoder.encode(env[:body])
14
- end
15
- @app.call env
16
- end
17
- end
18
- end
@@ -1,30 +0,0 @@
1
- module Faraday
2
- class Response::ActiveSupportJson < Response::Middleware
3
- begin
4
- if !defined?(ActiveSupport::JSON)
5
- require 'active_support'
6
- ActiveSupport::JSON
7
- end
8
-
9
- def self.register_on_complete(env)
10
- env[:response].on_complete do |finished_env|
11
- finished_env[:body] = parse(finished_env[:body])
12
-
13
- end
14
- end
15
- rescue LoadError, NameError => e
16
- self.load_error = e
17
- end
18
-
19
- def initialize(app)
20
- super
21
- @parser = nil
22
- end
23
-
24
- def self.parse(body)
25
- ActiveSupport::JSON.decode(body)
26
- rescue Object
27
- raise Faraday::Error::ParsingError, $!
28
- end
29
- end
30
- end
@@ -1,26 +0,0 @@
1
- module Faraday
2
- class Response::Yajl < Response::Middleware
3
- begin
4
- require 'yajl'
5
-
6
- def self.register_on_complete(env)
7
- env[:response].on_complete do |finished_env|
8
- finished_env[:body] = parse(finished_env[:body])
9
- end
10
- end
11
- rescue LoadError, NameError => e
12
- self.load_error = e
13
- end
14
-
15
- def initialize(app)
16
- super
17
- @parser = nil
18
- end
19
-
20
- def self.parse(body)
21
- Yajl::Parser.parse(body)
22
- rescue Object
23
- raise Faraday::Error::ParsingError, $!
24
- end
25
- end
26
- end
@@ -1,31 +0,0 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), '..', 'helper'))
2
-
3
- if Faraday::Adapter::Typhoeus.loaded?
4
- module Adapters
5
- class TestTyphoeus < Faraday::TestCase
6
- def setup
7
- @adapter = Faraday::Adapter::Typhoeus.new
8
- end
9
-
10
- def test_parse_response_headers_leaves_http_status_line_out
11
- headers = @adapter.parse_response_headers("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n")
12
- assert_equal %w(content-type), headers.keys
13
- end
14
-
15
- def test_parse_response_headers_parses_lower_cased_header_name_and_value
16
- headers = @adapter.parse_response_headers("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n")
17
- assert_equal 'text/html', headers['content-type']
18
- end
19
-
20
- def test_parse_response_headers_parses_lower_cased_header_name_and_value_with_colon
21
- headers = @adapter.parse_response_headers("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nLocation: http://sushi.com/\r\n\r\n")
22
- assert_equal 'http://sushi.com/', headers['location']
23
- end
24
-
25
- def test_parse_response_headers_parses_blank_lines
26
- headers = @adapter.parse_response_headers("HTTP/1.1 200 OK\r\n\r\nContent-Type: text/html\r\n\r\n")
27
- assert_equal 'text/html', headers['content-type']
28
- end
29
- end
30
- end
31
- end
@@ -1,60 +0,0 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
2
-
3
- class TestConnectionApps < Faraday::TestCase
4
- class TestAdapter
5
- def initialize(app)
6
- @app = app
7
- end
8
-
9
- def call(env)
10
- [200, {}, env[:test]]
11
- end
12
- end
13
-
14
- class TestMiddleWare
15
- def initialize(app)
16
- @app = app
17
- end
18
-
19
- def call(env)
20
- env[:test] = 'hi'
21
- @app.call(env)
22
- end
23
- end
24
-
25
- def setup
26
- @conn = Faraday.new do |b|
27
- b.use TestMiddleWare
28
- b.use TestAdapter
29
- end
30
- end
31
-
32
- def test_builder_is_built_from_faraday_connection
33
- assert_kind_of Faraday::Builder, @conn.builder
34
- assert_equal 3, @conn.builder.handlers.size
35
- end
36
-
37
- def test_builder_adds_middleware_to_builder_stack
38
- assert_kind_of TestMiddleWare, @conn.builder[0].call(nil)
39
- assert_kind_of TestAdapter, @conn.builder[1].call(nil)
40
- end
41
-
42
- def test_to_app_returns_rack_object
43
- assert @conn.to_app.respond_to?(:call)
44
- end
45
-
46
- def test_builder_is_passed_to_new_faraday_connection
47
- new_conn = Faraday::Connection.new :builder => @conn.builder
48
- assert_equal @conn.builder, new_conn.builder
49
- end
50
-
51
- def test_builder_is_built_on_new_faraday_connection
52
- new_conn = Faraday::Connection.new
53
- new_conn.build do |b|
54
- b.run @conn.builder[0]
55
- b.run @conn.builder[1]
56
- end
57
- assert_kind_of TestMiddleWare, new_conn.builder[0].call(nil)
58
- assert_kind_of TestAdapter, new_conn.builder[1].call(nil)
59
- end
60
- end
@@ -1,58 +0,0 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
2
-
3
- class FormPostTest < Faraday::TestCase
4
- def setup
5
- @app = Faraday::Adapter.new nil
6
- @env = {:request_headers => {}}
7
- end
8
-
9
- def test_processes_nested_body
10
- @env[:body] = {:a => 1, :b => {:c => 2}}
11
- @app.process_body_for_request @env
12
- assert_match /^|\&a=1/, @env[:body]
13
- assert_match /^|\&b\[c\]=2/, @env[:body]
14
- assert_equal Faraday::Adapter::FORM_TYPE, @env[:request_headers]['Content-Type']
15
- end
16
-
17
- def test_processes_with_custom_type
18
- @env[:body] = {:a => 1}
19
- @env[:request_headers]['Content-Type'] = 'test/type'
20
- @app.process_body_for_request @env
21
- assert_equal 'a=1', @env[:body]
22
- assert_equal 'test/type', @env[:request_headers]['Content-Type']
23
- end
24
-
25
- def test_processes_nil_body
26
- @env[:body] = nil
27
- @app.process_body_for_request @env
28
- assert_nil @env[:body]
29
- end
30
-
31
- def test_processes_empty_body
32
- @env[:body] = ''
33
- @app.process_body_for_request @env
34
- assert_equal '', @env[:body]
35
- end
36
-
37
- def test_processes_string_body
38
- @env[:body] = 'abc'
39
- @app.process_body_for_request @env
40
- assert_equal 'abc', @env[:body]
41
- end
42
-
43
- def test_processes_array_values
44
- @env[:body] = {:a => [:b, 1]}
45
- @app.process_body_for_request @env
46
- assert_equal 'a[]=b&a[]=1', @env[:body]
47
- end
48
-
49
- def test_processes_nested_array_values
50
- @env[:body] = {:a => [:b, {:c => :d}, [:e]]}
51
- @app.process_body_for_request @env
52
-
53
- # a[]=b&a[][c]=d&a[][]=e
54
- assert_match /a\[\]=b/, @env[:body]
55
- assert_match /a\[\]\[c\]=d/, @env[:body]
56
- assert_match /a\[\]\[\]=e/, @env[:body]
57
- end
58
- end
@@ -1,48 +0,0 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
2
-
3
- Faraday::CompositeReadIO.send :attr_reader, :ios
4
-
5
- class MultipartTest < Faraday::TestCase
6
- def setup
7
- @app = Faraday::Adapter.new nil
8
- @env = {:request_headers => {}}
9
- end
10
-
11
- def test_processes_nested_body
12
- # assume params are out of order
13
- regexes = [
14
- /name\=\"a\"/,
15
- /name=\"b\[c\]\"\; filename\=\"multipart_test\.rb\"/,
16
- /name=\"b\[d\]\"/]
17
- @env[:body] = {:a => 1, :b => {:c => Faraday::UploadIO.new(__FILE__, 'text/x-ruby'), :d => 2}}
18
- @app.process_body_for_request @env
19
- @env[:body].send(:ios).map(&:read).each do |io|
20
- if re = regexes.detect { |r| io =~ r }
21
- regexes.delete re
22
- end
23
- end
24
- assert_equal [], regexes
25
- assert_kind_of CompositeReadIO, @env[:body]
26
- assert_equal "%s;boundary=%s" %
27
- [Faraday::Adapter::MULTIPART_TYPE, Faraday::Adapter::DEFAULT_BOUNDARY],
28
- @env[:request_headers]['Content-Type']
29
- end
30
-
31
- def test_processes_nil_body
32
- @env[:body] = nil
33
- @app.process_body_for_request @env
34
- assert_nil @env[:body]
35
- end
36
-
37
- def test_processes_empty_body
38
- @env[:body] = ''
39
- @app.process_body_for_request @env
40
- assert_equal '', @env[:body]
41
- end
42
-
43
- def test_processes_string_body
44
- @env[:body] = 'abc'
45
- @app.process_body_for_request @env
46
- assert_equal 'abc', @env[:body]
47
- end
48
- end