dwolla 0.0.13 → 0.0.14
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/dwolla.gemspec +1 -1
- data/lib/dwolla/connection.rb +2 -2
- data/lib/dwolla/response/follow_redirects.rb +44 -0
- data/lib/dwolla/response/parse_json.rb +0 -3
- data/lib/dwolla/version.rb +1 -1
- data/lib/dwolla.rb +4 -2
- data/spec/dwolla/response/follow_redirects_spec.rb +38 -0
- data/spec/dwolla_spec.rb +1 -0
- metadata +24 -21
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 '
|
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'
|
data/lib/dwolla/connection.rb
CHANGED
@@ -11,9 +11,9 @@ module Dwolla
|
|
11
11
|
}
|
12
12
|
|
13
13
|
@connection ||= Faraday.new(Dwolla.endpoint, default_options) do |builder|
|
14
|
-
builder.use
|
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
|
data/lib/dwolla/version.rb
CHANGED
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
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.
|
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-
|
12
|
+
date: 2012-02-19 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
16
|
-
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.
|
21
|
+
version: 0.7.6
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2158790800
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: multi_json
|
27
|
-
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: *
|
35
|
+
version_requirements: *2158789780
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: bundler
|
38
|
-
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: *
|
46
|
+
version_requirements: *2158789140
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rake
|
49
|
-
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: *
|
57
|
+
version_requirements: *2158788300
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: rspec
|
60
|
-
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: *
|
68
|
+
version_requirements: *2158787580
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: webmock
|
71
|
-
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: *
|
79
|
+
version_requirements: *2158786780
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: simplecov
|
82
|
-
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: *
|
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: -
|
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: -
|
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
|