faraday 0.5.2 → 0.5.3

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.
data/Gemfile CHANGED
@@ -7,6 +7,9 @@ group :development, :test do
7
7
  gem 'patron', '~> 0.4'
8
8
  gem 'sinatra', '~> 1.1'
9
9
  gem 'typhoeus', '~> 0.1'
10
+ gem 'eventmachine', '~> 0.12'
11
+ gem 'em-http-request', '~> 0.2', :require => 'em-http'
12
+ gem 'em-synchrony', '~> 0.2', :require => ['em-synchrony', 'em-synchrony/em-http']
10
13
  end
11
14
 
12
15
  gemspec
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- faraday (0.5.2)
4
+ faraday (0.5.3)
5
5
  addressable (~> 2.2.2)
6
6
  multipart-post (~> 1.0.1)
7
7
  rack (>= 1.1.0, < 2)
@@ -10,8 +10,14 @@ GEM
10
10
  remote: http://rubygems.org/
11
11
  specs:
12
12
  addressable (2.2.2)
13
+ em-http-request (0.2.14)
14
+ addressable (>= 2.0.0)
15
+ eventmachine (>= 0.12.9)
16
+ em-synchrony (0.2.0)
17
+ eventmachine (>= 0.12.9)
18
+ eventmachine (0.12.10)
13
19
  multipart-post (1.0.1)
14
- patron (0.4.9)
20
+ patron (0.4.10)
15
21
  rack (1.2.1)
16
22
  rake (0.8.7)
17
23
  sinatra (1.1.0)
@@ -26,6 +32,9 @@ PLATFORMS
26
32
 
27
33
  DEPENDENCIES
28
34
  addressable (~> 2.2.2)
35
+ em-http-request (~> 0.2)
36
+ em-synchrony (~> 0.2)
37
+ eventmachine (~> 0.12)
29
38
  faraday!
30
39
  multipart-post (~> 1.0.1)
31
40
  patron (~> 0.4)
data/README.md CHANGED
@@ -7,16 +7,18 @@ This mess is gonna get raw, like sushi. So, haters to the left.
7
7
  ## Usage
8
8
 
9
9
  conn = Faraday::Connection.new(:url => 'http://sushi.com') do |builder|
10
- builder.use Faraday::Request::Yajl # convert body to json with Yajl lib
11
- builder.use Faraday::Adapter::Logger # log the request somewhere?
12
- builder.use Faraday::Adapter::Typhoeus # make http request with typhoeus
13
- builder.use Faraday::Response::Yajl # # parse body with yajl
10
+ builder.use Faraday::Request::Yajl # convert body to json with Yajl lib
11
+ builder.use Faraday::Adapter::Logger # log the request somewhere?
12
+ builder.use Faraday::Adapter::Typhoeus # make http request with typhoeus
13
+ builder.use Faraday::Adapter::EMSynchrony # make http request with eventmachine and synchrony
14
+ builder.use Faraday::Response::Yajl # parse body with yajl
14
15
 
15
16
  # or use shortcuts
16
- builder.request :yajl # Faraday::Request::Yajl
17
- builder.adapter :logger # Faraday::Adapter::Logger
18
- builder.adapter :typhoeus # Faraday::Adapter::Typhoeus
19
- builder.response :yajl # Faraday::Response::Yajl
17
+ builder.request :yajl # Faraday::Request::Yajl
18
+ builder.adapter :logger # Faraday::Adapter::Logger
19
+ builder.adapter :typhoeus # Faraday::Adapter::Typhoeus
20
+ builder.adapter :em_synchrony # Faraday::Adapter::EMSynchrony
21
+ builder.response :yajl # Faraday::Response::Yajl
20
22
  end
21
23
 
22
24
  resp1 = conn.get '/nigiri/sake.json'
@@ -12,8 +12,8 @@ Gem::Specification.new do |s|
12
12
  ## If your rubyforge_project name is different, then edit it and comment out
13
13
  ## the sub! line in the Rakefile
14
14
  s.name = 'faraday'
15
- s.version = '0.5.2'
16
- s.date = '2010-10-29'
15
+ s.version = '0.5.3'
16
+ s.date = '2010-11-09'
17
17
  s.rubyforge_project = 'faraday'
18
18
 
19
19
  ## Make sure your summary is short. The description may be as long
@@ -51,6 +51,7 @@ Gem::Specification.new do |s|
51
51
  lib/faraday.rb
52
52
  lib/faraday/adapter.rb
53
53
  lib/faraday/adapter/action_dispatch.rb
54
+ lib/faraday/adapter/em_synchrony.rb
54
55
  lib/faraday/adapter/net_http.rb
55
56
  lib/faraday/adapter/patron.rb
56
57
  lib/faraday/adapter/test.rb
@@ -1,5 +1,5 @@
1
1
  module Faraday
2
- VERSION = "0.5.2"
2
+ VERSION = "0.5.3"
3
3
 
4
4
  class << self
5
5
  attr_accessor :default_adapter
@@ -10,6 +10,7 @@ module Faraday
10
10
  :ActionDispatch => 'action_dispatch',
11
11
  :NetHttp => 'net_http',
12
12
  :Typhoeus => 'typhoeus',
13
+ :EMSynchrony => 'em_synchrony',
13
14
  :Patron => 'patron',
14
15
  :Test => 'test'
15
16
 
@@ -19,7 +20,7 @@ module Faraday
19
20
  :net_http => :NetHttp,
20
21
  :typhoeus => :Typhoeus,
21
22
  :patron => :Patron,
22
- :net_http => :NetHttp
23
+ :em_synchrnoy => :EMSynchrony
23
24
 
24
25
  def call(env)
25
26
  process_body_for_request(env)
@@ -77,9 +78,14 @@ module Faraday
77
78
  end
78
79
 
79
80
  def process_to_params(pieces, params, base = nil, &block)
80
- params.each do |key, value|
81
+ params.to_a.each do |key, value|
81
82
  key_str = base ? "#{base}[#{key}]" : key
82
- if value.kind_of?(Hash)
83
+
84
+ case value
85
+ when Array
86
+ values = value.inject([]) { |a,v| a << [nil, v] }
87
+ process_to_params(pieces, values, key_str, &block)
88
+ when Hash
83
89
  process_to_params(pieces, value, key_str, &block)
84
90
  else
85
91
  pieces << block.call(key_str, value)
@@ -0,0 +1,78 @@
1
+ require 'em-synchrony/em-http'
2
+ require 'fiber'
3
+
4
+ module Faraday
5
+ class Adapter
6
+ class EMSynchrony < Faraday::Adapter
7
+
8
+ class Header
9
+ include Net::HTTPHeader
10
+ def initialize response
11
+ @header = {}
12
+ response.response_header.each do |key, value|
13
+ case key
14
+ when "CONTENT_TYPE"; self.content_type = value
15
+ when "CONTENT_LENGTH"; self.content_length = value
16
+ else; self[key] = value
17
+ end
18
+ end
19
+ end
20
+ end
21
+
22
+ def call(env)
23
+ process_body_for_request(env)
24
+
25
+ request = EventMachine::HttpRequest.new(URI::parse(env[:url].to_s))
26
+
27
+ options = {:head => env[:request_headers]}
28
+
29
+ if env[:body]
30
+ if env[:body].respond_to? :read
31
+ options[:body] = env[:body].read
32
+ else
33
+ options[:body] = env[:body]
34
+ end
35
+ end
36
+
37
+ if req = env[:request]
38
+ if proxy = req[:proxy]
39
+ uri = Addressable::URI.parse(proxy[:uri])
40
+ options[:proxy] = {
41
+ :host => uri.host,
42
+ :port => uri.port
43
+ }
44
+ if proxy[:username] && proxy[:password]
45
+ options[:proxy][:authorization] = [proxy[:username], proxy[:password]]
46
+ end
47
+ end
48
+
49
+ # only one timeout currently supported by em http request
50
+ if req[:timeout] or req[:open_timeout]
51
+ options[:timeout] = [req[:timeout] || 0, req[:open_timeout] || 0].max
52
+ end
53
+ end
54
+
55
+ client = nil
56
+ block = lambda { request.send env[:method].to_s.downcase.to_sym, options }
57
+ if !EM.reactor_running?
58
+ EM.run {
59
+ Fiber.new do
60
+ client = block.call
61
+ EM.stop
62
+ end.resume
63
+ }
64
+ else
65
+ client = block.call
66
+ end
67
+
68
+ env.update(:status => client.response_header.http_status.to_i,
69
+ :response_headers => Header.new(client),
70
+ :body => client.response)
71
+
72
+ @app.call env
73
+ rescue Errno::ECONNREFUSED
74
+ raise Error::ConnectionFailed, "connection refused"
75
+ end
76
+ end
77
+ end
78
+ end
@@ -124,6 +124,21 @@ if Faraday::TestCase::LIVE_SERVER
124
124
  assert_equal '[1,2,3]', resp1.body
125
125
  assert_equal '[1,2,3]', resp2.body
126
126
  end
127
+
128
+ if adapter.to_s == "Faraday::Adapter::EMSynchrony"
129
+ instance_methods.grep(%r{Faraday::Adapter::EMSynchrony}).each do |method|
130
+ em = method.to_s.sub %r{^test_}, "test_under_em_"
131
+ define_method em do
132
+ EM.run do
133
+ Fiber.new do
134
+ self.send method
135
+ EM.stop
136
+ end.resume
137
+ end
138
+ end
139
+ end
140
+
141
+ end
127
142
  end
128
143
 
129
144
  def create_connection(adapter)
@@ -39,4 +39,20 @@ class FormPostTest < Faraday::TestCase
39
39
  @app.process_body_for_request @env
40
40
  assert_equal 'abc', @env[:body]
41
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
42
58
  end
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: faraday
3
3
  version: !ruby/object:Gem::Version
4
- hash: 15
5
4
  prerelease: false
6
5
  segments:
7
6
  - 0
8
7
  - 5
9
- - 2
10
- version: 0.5.2
8
+ - 3
9
+ version: 0.5.3
11
10
  platform: ruby
12
11
  authors:
13
12
  - Rick Olson
@@ -15,7 +14,7 @@ autorequire:
15
14
  bindir: bin
16
15
  cert_chain: []
17
16
 
18
- date: 2010-10-29 00:00:00 -07:00
17
+ date: 2010-11-09 00:00:00 -08:00
19
18
  default_executable:
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
@@ -26,7 +25,6 @@ dependencies:
26
25
  requirements:
27
26
  - - ~>
28
27
  - !ruby/object:Gem::Version
29
- hash: 27
30
28
  segments:
31
29
  - 0
32
30
  - 8
@@ -41,7 +39,6 @@ dependencies:
41
39
  requirements:
42
40
  - - ~>
43
41
  - !ruby/object:Gem::Version
44
- hash: 3
45
42
  segments:
46
43
  - 2
47
44
  - 2
@@ -57,7 +54,6 @@ dependencies:
57
54
  requirements:
58
55
  - - ~>
59
56
  - !ruby/object:Gem::Version
60
- hash: 21
61
57
  segments:
62
58
  - 1
63
59
  - 0
@@ -73,7 +69,6 @@ dependencies:
73
69
  requirements:
74
70
  - - ">="
75
71
  - !ruby/object:Gem::Version
76
- hash: 19
77
72
  segments:
78
73
  - 1
79
74
  - 1
@@ -81,7 +76,6 @@ dependencies:
81
76
  version: 1.1.0
82
77
  - - <
83
78
  - !ruby/object:Gem::Version
84
- hash: 7
85
79
  segments:
86
80
  - 2
87
81
  version: "2"
@@ -105,6 +99,7 @@ files:
105
99
  - lib/faraday.rb
106
100
  - lib/faraday/adapter.rb
107
101
  - lib/faraday/adapter/action_dispatch.rb
102
+ - lib/faraday/adapter/em_synchrony.rb
108
103
  - lib/faraday/adapter/net_http.rb
109
104
  - lib/faraday/adapter/patron.rb
110
105
  - lib/faraday/adapter/test.rb
@@ -147,7 +142,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
147
142
  requirements:
148
143
  - - ">="
149
144
  - !ruby/object:Gem::Version
150
- hash: 3
151
145
  segments:
152
146
  - 0
153
147
  version: "0"
@@ -156,7 +150,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
156
150
  requirements:
157
151
  - - ">="
158
152
  - !ruby/object:Gem::Version
159
- hash: 23
160
153
  segments:
161
154
  - 1
162
155
  - 3