dwolla 0.0.13 → 0.0.14

Sign up to get free protection for your applications and to get access to all the features.
data/dwolla.gemspec CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |s|
18
18
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
19
  s.require_paths = ["lib"]
20
20
 
21
- s.add_dependency 'jeffersongirao_faraday-stack', '0.1.5'
21
+ s.add_dependency 'faraday', '>= 0.7.6'
22
22
  s.add_dependency 'multi_json', '~> 1.0'
23
23
 
24
24
  s.add_development_dependency 'bundler'
@@ -11,9 +11,9 @@ module Dwolla
11
11
  }
12
12
 
13
13
  @connection ||= Faraday.new(Dwolla.endpoint, default_options) do |builder|
14
- builder.use FaradayStack::FollowRedirects
15
-
14
+ builder.use Dwolla::Response::FollowRedirects
16
15
  builder.use Dwolla::Response::ParseJson
16
+
17
17
  builder.use Faraday::Request::UrlEncoded
18
18
 
19
19
  builder.response :logger if Dwolla.debugging?
@@ -0,0 +1,44 @@
1
+ module Dwolla
2
+ module Response
3
+ class RedirectLimitReached < Faraday::Error::ClientError
4
+ attr_reader :response
5
+
6
+ def initialize(response)
7
+ super "too many redirects; last one to: #{response['location']}"
8
+ @response = response
9
+ end
10
+ end
11
+
12
+ class FollowRedirects < Faraday::Middleware
13
+ REDIRECTS = [301, 302, 303, 307]
14
+ # default value for max redirects followed
15
+ FOLLOW_LIMIT = 3
16
+
17
+ def initialize(app, options = {})
18
+ super(app)
19
+ @options = options
20
+ @follow_limit = options[:limit] || FOLLOW_LIMIT
21
+ end
22
+
23
+ def call(env)
24
+ process_response(@app.call(env), @follow_limit)
25
+ end
26
+
27
+ def process_response(response, follows)
28
+ response.on_complete do |env|
29
+ if redirect? response
30
+ raise RedirectLimitReached, response if follows.zero?
31
+ env[:url] += response['location']
32
+ env[:method] = :get
33
+ response = process_response(@app.call(env), follows - 1)
34
+ end
35
+ end
36
+ response
37
+ end
38
+
39
+ def redirect?(response)
40
+ REDIRECTS.include? response.status
41
+ end
42
+ end
43
+ end
44
+ end
@@ -1,6 +1,3 @@
1
- require 'faraday'
2
- require 'multi_json'
3
-
4
1
  module Dwolla
5
2
  module Response
6
3
  class ParseJson < Faraday::Response::Middleware
@@ -1,3 +1,3 @@
1
1
  module Dwolla
2
- VERSION = "0.0.13"
2
+ VERSION = "0.0.14"
3
3
  end
data/lib/dwolla.rb CHANGED
@@ -1,5 +1,3 @@
1
- require 'faraday_stack'
2
-
3
1
  module Dwolla
4
2
  def self.endpoint=(endpoint)
5
3
  @@endpoint = endpoint
@@ -30,8 +28,12 @@ module Dwolla
30
28
  self.endpoint = "https://www.dwolla.com/oauth/rest"
31
29
  end
32
30
 
31
+ require 'faraday'
32
+ require 'multi_json'
33
+
33
34
  require "dwolla/exceptions"
34
35
  require "dwolla/response/parse_json"
36
+ require "dwolla/response/follow_redirects"
35
37
  require "dwolla/connection"
36
38
  require "dwolla/client"
37
39
  require "dwolla/transaction"
@@ -0,0 +1,38 @@
1
+ require 'spec_helper'
2
+ require 'forwardable'
3
+
4
+ describe Dwolla::Response::FollowRedirects do
5
+
6
+ before do
7
+ @conn = Faraday.new do |b|
8
+ b.use Dwolla::Response::FollowRedirects
9
+ b.adapter :test do |stub|
10
+ stub.get('/') { [301, {'Location' => '/found'}, ''] }
11
+ stub.post('/create') { [302, {'Location' => '/'}, ''] }
12
+ stub.get('/found') { [200, {'Content-Type' => 'text/plain'}, 'fin'] }
13
+ stub.get('/loop') { [302, {'Location' => '/loop'}, ''] }
14
+ stub.get('/temp') { [307, {'Location' => '/found'}, ''] }
15
+ end
16
+ end
17
+ end
18
+
19
+ extend Forwardable
20
+ def_delegators :@conn, :get, :post
21
+
22
+ it 'follow one redirect' do
23
+ get('/').body.should == 'fin'
24
+ end
25
+
26
+ it 'follow twice redirect' do
27
+ post('/create').body.should == 'fin'
28
+ end
29
+
30
+ it 'follows 307 redirects' do
31
+ get('/temp').body.should == 'fin'
32
+ end
33
+
34
+ it 'has a redirect limit' do
35
+ expect { get('/loop') }.to raise_error(Dwolla::Response::RedirectLimitReached)
36
+ end
37
+ end
38
+
data/spec/dwolla_spec.rb CHANGED
@@ -13,6 +13,7 @@ describe Dwolla do
13
13
 
14
14
  it 'should be debugging' do
15
15
  Dwolla.debug = true
16
+ Dwolla.should be_debugging
16
17
  end
17
18
  end
18
19
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dwolla
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.13
4
+ version: 0.0.14
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,22 +9,22 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-01-23 00:00:00.000000000Z
12
+ date: 2012-02-19 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: jeffersongirao_faraday-stack
16
- requirement: &2151918840 !ruby/object:Gem::Requirement
15
+ name: faraday
16
+ requirement: &2158790800 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
- - - =
19
+ - - ! '>='
20
20
  - !ruby/object:Gem::Version
21
- version: 0.1.5
21
+ version: 0.7.6
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2151918840
24
+ version_requirements: *2158790800
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: multi_json
27
- requirement: &2151910940 !ruby/object:Gem::Requirement
27
+ requirement: &2158789780 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '1.0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *2151910940
35
+ version_requirements: *2158789780
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: bundler
38
- requirement: &2151909320 !ruby/object:Gem::Requirement
38
+ requirement: &2158789140 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *2151909320
46
+ version_requirements: *2158789140
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rake
49
- requirement: &2151902740 !ruby/object:Gem::Requirement
49
+ requirement: &2158788300 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *2151902740
57
+ version_requirements: *2158788300
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rspec
60
- requirement: &2151901080 !ruby/object:Gem::Requirement
60
+ requirement: &2158787580 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *2151901080
68
+ version_requirements: *2158787580
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: webmock
71
- requirement: &2151900160 !ruby/object:Gem::Requirement
71
+ requirement: &2158786780 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *2151900160
79
+ version_requirements: *2158786780
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: simplecov
82
- requirement: &2151899360 !ruby/object:Gem::Requirement
82
+ requirement: &2158786280 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,7 +87,7 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *2151899360
90
+ version_requirements: *2158786280
91
91
  description: A Ruby wrapper for the Dwolla API.
92
92
  email:
93
93
  - contato@jefferson.eti.br
@@ -104,11 +104,13 @@ files:
104
104
  - lib/dwolla/client.rb
105
105
  - lib/dwolla/connection.rb
106
106
  - lib/dwolla/exceptions.rb
107
+ - lib/dwolla/response/follow_redirects.rb
107
108
  - lib/dwolla/response/parse_json.rb
108
109
  - lib/dwolla/transaction.rb
109
110
  - lib/dwolla/user.rb
110
111
  - lib/dwolla/version.rb
111
112
  - spec/dwolla/client_spec.rb
113
+ - spec/dwolla/response/follow_redirects_spec.rb
112
114
  - spec/dwolla/transaction_spec.rb
113
115
  - spec/dwolla/user_spec.rb
114
116
  - spec/dwolla_spec.rb
@@ -135,7 +137,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
135
137
  version: '0'
136
138
  segments:
137
139
  - 0
138
- hash: -1805413943356983281
140
+ hash: -3740545211785907564
139
141
  required_rubygems_version: !ruby/object:Gem::Requirement
140
142
  none: false
141
143
  requirements:
@@ -144,7 +146,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
144
146
  version: '0'
145
147
  segments:
146
148
  - 0
147
- hash: -1805413943356983281
149
+ hash: -3740545211785907564
148
150
  requirements: []
149
151
  rubyforge_project: dwolla
150
152
  rubygems_version: 1.8.10
@@ -153,6 +155,7 @@ specification_version: 3
153
155
  summary: A Ruby wrapper for the Dwolla API.
154
156
  test_files:
155
157
  - spec/dwolla/client_spec.rb
158
+ - spec/dwolla/response/follow_redirects_spec.rb
156
159
  - spec/dwolla/transaction_spec.rb
157
160
  - spec/dwolla/user_spec.rb
158
161
  - spec/dwolla_spec.rb