dwolla-ruby 2.0.0 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,8 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.8.7
4
+ - 1.9.2
5
+ - 1.9.3
6
+ - 2.0.0
7
+ gemfile:
8
+ - gemfiles/json.gemfile
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source "https://rubygems.org"
2
+ gemspec
data/README.md CHANGED
@@ -1,8 +1,10 @@
1
1
  # dwolla-ruby: Ruby Wrapper for Dwolla's API
2
2
  =================================================================================
3
3
 
4
+ [![Build Status](https://travis-ci.org/Dwolla/dwolla-ruby.png?branch=master)](https://travis-ci.org/Dwolla/dwolla-ruby)
5
+
4
6
  ## Version
5
- 1.0.0
7
+ 2.1.0
6
8
 
7
9
  ## Requirements
8
10
  - [Ruby](http://www.ruby-lang.org/)
@@ -16,84 +18,39 @@ The recommended way to install dwolla-ruby is through RubyGems:
16
18
 
17
19
  gem install dwolla-ruby
18
20
 
19
- ## Usage
20
-
21
21
  ## Examples / Quickstart
22
22
 
23
23
  This repo includes various usage examples, including:
24
24
 
25
25
  * Authenticating with OAuth [oauth.rb]
26
26
  * Sending money [send.rb]
27
- * Fetching account information [accountInfo.rb]
27
+ * Fetching user information [users.rb]
28
28
  * Grabbing a user's contacts [contacts.rb]
29
29
  * Listing a user's funding sources [fundingSources.rb]
30
- * Creating offsite gateway sessions [offsiteGateway.rb]
31
-
32
- ## Methods
33
-
34
- Authentication Methods:
35
-
36
- getAuthUrl() ==> (string) OAuth permissions page URL
37
- requestToken($code) ==> (string) a never-expiring OAuth access token
38
- setToken($token) ==> (bool) was token saved?
39
- getToken() ==> (string) current OAuth token
40
-
41
- Users Methods:
42
-
43
- me() ==> (array) the user entity associated with the token
44
- getUser($user_id) ==> (array) the user entity for {$user_id}
45
-
46
- Register Methods:
30
+ * Transacting money [transactions.rb]
31
+ * Getting a user's balance [balance.rb]
47
32
 
48
- register($email, $password, $pin, $firstName, $lastName, $address, $address2, $city, $state, $zip, $phone, $dateOfBirth, $acceptTerms[, $type, $organization, $ein]) ==> (array) the newly created user record
49
-
50
- Contacts Methods:
51
-
52
- contacts([$search, $types, $limit]) ==> (array) list of contacts matching the search criteria
53
- nearbyContacts([$search, $types, $limit]) ==> (array) list of nearby spots matching the search criteria
54
-
55
- Funding Sources Methods:
56
-
57
- fundingSources() ==> (array) a list of funding sources associated with the token
58
- fundingSource($id) ==> (array) information about the {$id} funding source
59
-
60
- Balance Methods:
33
+ ## Changelog
61
34
 
62
- balance() ==> (string) the Dwolla balance of the account associated with the token
63
-
64
- Transactions Methods:
35
+ 2.1.0
65
36
 
66
- send($pin, $destinationId, $amount[, $destinationType, $notes, $facilitatorAmount, $assumeCosts]) ==> (string) transaction ID
67
- request($pin, $sourceId, $amount[, $sourceType, $notes, $facilitatorAmount]) ==> (string) request ID
68
- transaction($transactionId) ==> (array) transaction details
69
- listings([$sinceDate, $types, $limit, $skip]) ==> (array) a list of recent transactions matching the search criteria
70
- stats([$types, $sinceDate, $endDate]) ==> (array) statistics about the account associated with the token
71
-
72
- Offsite Gateway Methods:
37
+ * Add tests! (OMG WOOT JK </LOL>)
73
38
 
74
- startGatewaySession() ==> (bool) did session start?
75
- addGatewayProduct($name, $amount[, $quantity, $description]) ==> (bool) was product added?
76
- verifyGatewaySignature($signature, $checkoutId, $amount) ==> (bool) is signature valid?
77
- getGatewayURL($destinationId[, $orderId, $discount, $shipping, $tax, $notes, $callback]) ==> (string) checkout URL
78
-
79
- Helper Methods:
39
+ 2.0.0
80
40
 
81
- getError() ==> (string) error message
82
- parseDwollaID($id) ==> (bool) is valid Dwolla ID?
83
- setMode($mode) ==> (bool) did mode change?
41
+ * Reworked Gem.
84
42
 
85
- ## Changelog
43
+ ## Testing
86
44
 
87
- 1.0.0
45
+ To run the gem's tests:
88
46
 
89
- * Reworked Gem.
47
+ bundle exec rake test
90
48
 
91
49
  ## Credits
92
50
 
93
- This wrapper is a forked extension of Jefferson Girao's &lt;@jeffersongirao&gt; 'dwolla' module.
51
+ This wrapper is heavily based off Stripe's Ruby Gem
94
52
 
95
53
  - Michael Schonfeld &lt;michael@dwolla.com&gt;
96
- - Jefferson Gir�o &lt;contato@jefferson.eti.br&gt;
97
54
 
98
55
  ## Support
99
56
 
data/Rakefile CHANGED
@@ -1,5 +1,9 @@
1
- require 'bundler/gem_tasks'
2
- require 'rspec/core/rake_task'
1
+ task :default => [:test]
3
2
 
4
- desc "Run specs"
5
- RSpec::Core::RakeTask.new
3
+ task :test do
4
+ ret = true
5
+ Dir["test/**/*.rb"].each do |f|
6
+ ret = ret && ruby(f, '')
7
+ end
8
+ exit(ret)
9
+ end
@@ -13,12 +13,15 @@ Gem::Specification.new do |s|
13
13
  s.rubyforge_project = "dwolla-ruby"
14
14
 
15
15
  s.files = `git ls-files`.split("\n")
16
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
16
+ s.test_files = `git ls-files -- test/*`.split("\n")
17
17
  s.require_paths = %w{lib}
18
18
 
19
19
  s.add_dependency('rest-client', '~> 1.4')
20
20
  s.add_dependency('multi_json', '>= 1.0.4', '< 2')
21
21
  s.add_dependency('addressable', '>= 2')
22
22
 
23
+ s.add_development_dependency('mocha')
24
+ s.add_development_dependency('shoulda')
25
+ s.add_development_dependency('test-unit')
23
26
  s.add_development_dependency('rake')
24
27
  end
@@ -4,7 +4,7 @@ require 'pp'
4
4
  require 'dwolla'
5
5
 
6
6
  # Include any required keys
7
- require '_keys.rb'
7
+ require './_keys.rb'
8
8
 
9
9
  # Instantiate a new Dwolla User client
10
10
  # And, seed a previously generated access token
@@ -13,5 +13,4 @@ Dwolla::token = @token
13
13
 
14
14
  # EXAMPLE 1:
15
15
  # Get the balance of the authenticated user
16
- balance = Dwolla::Balance.get
17
- pp balance
16
+ pp Dwolla::Balance.get
@@ -4,24 +4,30 @@ require 'pp'
4
4
  require 'dwolla'
5
5
 
6
6
  # Include any required keys
7
- require '_keys.rb'
7
+ require './_keys.rb'
8
8
 
9
9
  # Instantiate a new Dwolla User client
10
10
  # And, seed a previously generated access token
11
- Dwolla::token = $token
11
+ Dwolla::token = @token
12
+ Dwolla::api_key = @api_key
13
+ Dwolla::api_secret = @api_secret
12
14
 
13
15
 
14
16
  # EXAMPLE 1:
15
17
  # Fetch last 10 contacts from the
16
18
  # account associated with the provided
17
19
  # OAuth token
18
- contacts = Dwolla::Contacts.get
19
- pp contacts
20
+ pp Dwolla::Contacts.get
20
21
 
21
22
 
22
23
  # EXAMPLE 2:
23
24
  # Search through the contacts of the
24
25
  # account associated with the provided
25
26
  # OAuth token
26
- contacts = Dwolla::Contacts.get({:search => 'Ben'})
27
- pp contacts
27
+ pp Dwolla::Contacts.get({:search => 'Ben'})
28
+
29
+
30
+ # EXAMPLE 3:
31
+ # Get a list of nearby Dwolla spots
32
+ # for a given set of coordinates
33
+ pp Dwolla::Contacts.nearby({:latitude => 1, :longitude => 2})
@@ -4,23 +4,21 @@ require 'pp'
4
4
  require 'dwolla'
5
5
 
6
6
  # Include any required keys
7
- require '_keys.rb'
7
+ require './_keys.rb'
8
8
 
9
9
  # Instantiate a new Dwolla User client
10
10
  # And, seed a previously generated access token
11
- Dwolla::token = $token
11
+ Dwolla::token = @token
12
12
 
13
13
 
14
14
  # EXAMPLE 1:
15
15
  # Fetch all funding sources for the
16
16
  # account associated with the provided
17
17
  # OAuth token
18
- sources = Dwolla::FundingSources.get
19
- pp sources
18
+ pp Dwolla::FundingSources.get
20
19
 
21
20
 
22
21
  # EXAMPLE 2:
23
22
  # Fetch detailed information for the
24
23
  # funding source with a specific ID
25
- source = Dwolla::FundingSources.get('pJRq4tK38fiAeQ8xo2iH9Q==')
26
- pp source
24
+ pp Dwolla::FundingSources.get('funding_source_id')
@@ -5,7 +5,7 @@ require 'sinatra'
5
5
  require 'dwolla'
6
6
 
7
7
  # Include any required keys
8
- require '_keys.rb'
8
+ require './_keys.rb'
9
9
 
10
10
  # Instantiate a new Dwolla User client
11
11
  Dwolla::api_key = @api_key
@@ -4,11 +4,11 @@ require 'pp'
4
4
  require 'dwolla'
5
5
 
6
6
  # Include any required keys
7
- require '_keys.rb'
7
+ require './_keys.rb'
8
8
 
9
9
  # Instantiate a new Dwolla User client
10
10
  # And, seed a previously generated access token
11
- Dwolla::token = $token
11
+ Dwolla::token = @token
12
12
 
13
13
 
14
14
  # EXAMPLE 1:
@@ -23,10 +23,8 @@ pp transactionId
23
23
 
24
24
  # EXAMPLE 3:
25
25
  # Get details about all recent transactions
26
- transactions = Dwolla::Transactions.get
27
- pp transactions
26
+ pp Dwolla::Transactions.get
28
27
 
29
28
  # EXAMPLE 4:
30
29
  # Get details about a certain Transaction
31
- transactionId = Dwolla::Transactions.get(transactionId)
32
- pp transactionId
30
+ pp Dwolla::Transactions.get(transactionId)
File without changes
@@ -0,0 +1,3 @@
1
+ source "https://rubygems.org"
2
+ gemspec :path => File.join(File.dirname(__FILE__), "..")
3
+ gem "json"
@@ -1,3 +1,3 @@
1
1
  module Dwolla
2
- VERSION = "2.0.0"
2
+ VERSION = "2.1.0"
3
3
  end
@@ -0,0 +1,198 @@
1
+ # -*- coding: utf-8 -*-
2
+ require File.expand_path('../test_helper', __FILE__)
3
+ require 'test/unit'
4
+ require 'shoulda'
5
+ require 'mocha/setup'
6
+ require 'pp'
7
+ require 'rest-client'
8
+ require 'cgi'
9
+ require 'uri'
10
+
11
+ class TestDwollaRuby < Test::Unit::TestCase
12
+ include Mocha
13
+
14
+ context "API Wrapper" do
15
+ setup do
16
+ @mock = mock
17
+ Dwolla.mock_rest_client = @mock
18
+ end
19
+
20
+ teardown do
21
+ Dwolla.mock_rest_client = nil
22
+ end
23
+
24
+ should "not specifying a token should raise an exception on user-centric calls" do
25
+ Dwolla.token = nil
26
+ assert_raises Dwolla::AuthenticationError do
27
+ Dwolla::Balance.get
28
+ end
29
+ end
30
+
31
+ should "not specifying api credentials should raise an exception on app-centric calls" do
32
+ Dwolla.api_key = nil
33
+ assert_raises Dwolla::AuthenticationError do
34
+ Dwolla::Contacts.nearby
35
+ end
36
+ end
37
+
38
+ context "with valid token" do
39
+ setup do
40
+ Dwolla.token="foo"
41
+ end
42
+
43
+ teardown do
44
+ Dwolla.token=nil
45
+ end
46
+
47
+ context "balance tests" do
48
+ should "balance should be retrievable" do
49
+ @mock.expects(:get).once.returns(test_response(test_balance))
50
+ balance = Dwolla::Balance.get
51
+ assert balance.kind_of? Float
52
+ end
53
+ end
54
+
55
+ context "contacts tests" do
56
+ should "be able to get a user's contacts" do
57
+ @mock.expects(:get).once.returns(test_response(test_contacts_array))
58
+ contacts = Dwolla::Contacts.get
59
+ assert contacts.kind_of? Array
60
+ end
61
+ end
62
+
63
+ context "funding sources tests" do
64
+ should "should be able to get a user's funding source by its id" do
65
+ @mock.expects(:get).once.returns(test_response(test_fundingsource_byid))
66
+ fundingsource = Dwolla::FundingSources.get('funding_source_id')
67
+ assert fundingsource.kind_of? Object
68
+ end
69
+
70
+ should "should be able to get a user's funding sources" do
71
+ @mock.expects(:get).once.returns(test_response(test_fundingsources_array))
72
+ fundingsources = Dwolla::FundingSources.get
73
+ assert fundingsources.kind_of? Array
74
+ end
75
+
76
+ should "should be able to withdraw to a user's funding source" do
77
+ @mock.expects(:post).once.returns(test_response(test_fundingsource_withdraw))
78
+ withdraw = Dwolla::FundingSources.withdraw('funding_source_id', {:pin => '0000', :amount => '1.00'})
79
+ assert withdraw.kind_of? Object
80
+ end
81
+
82
+ should "should be able to deposit from a user's funding source" do
83
+ @mock.expects(:post).once.returns(test_response(test_fundingsource_deposit))
84
+ withdraw = Dwolla::FundingSources.withdraw('funding_source_id', {:pin => '0000', :amount => '1.00'})
85
+ assert withdraw.kind_of? Object
86
+ end
87
+
88
+ should "should be able to add a funding source for a user" do
89
+
90
+ end
91
+
92
+ should "should be able to verify a user's funding source" do
93
+
94
+ end
95
+ end
96
+
97
+ context "requests tests" do
98
+ should "should be able to get a user's pending money requests" do
99
+ @mock.expects(:get).once.returns(test_response(test_requests_array))
100
+ requests = Dwolla::Requests.get
101
+ assert requests.kind_of? Array
102
+ end
103
+
104
+ should "should be able to get a user's pending money request by its id" do
105
+ @mock.expects(:get).once.returns(test_response(test_request_byid))
106
+ request = Dwolla::Requests.get('request_id')
107
+ assert request.kind_of? Object
108
+ end
109
+
110
+ should "should be able to cancel a user's pending money request" do
111
+ @mock.expects(:post).once.returns(test_response(test_request_cancel))
112
+ request = Dwolla::Requests.cancel('request_id')
113
+ assert request.kind_of? String
114
+ end
115
+
116
+ should "should be able to create a new money request for a user" do
117
+ @mock.expects(:post).once.returns(test_response(test_request))
118
+ request = Dwolla::Requests.request({:pin => 1111, :amount => 0.01, :sourceId => 'alex@dwolla.com'})
119
+ assert request.kind_of? Integer
120
+ end
121
+
122
+ should "should be a able to fulfill a user's pending money request" do
123
+ @mock.expects(:post).once.returns(test_response(test_request_fulfill))
124
+ request = Dwolla::Requests.fulfill('2219682', {:pin => 1111})
125
+ assert request.kind_of? Object
126
+ end
127
+ end
128
+
129
+ context "transactions tests" do
130
+ should "should be able to get a user's transaction information by its id" do
131
+ @mock.expects(:get).once.returns(test_response(test_transaction_byid))
132
+ transactions = Dwolla::Transactions.get('transaction_id')
133
+ assert transactions.kind_of? Object
134
+ end
135
+
136
+ should "should be able to get a user's transaction history" do
137
+ @mock.expects(:get).once.returns(test_response(test_transactions_array))
138
+ transactions = Dwolla::Transactions.get
139
+ assert transactions.kind_of? Array
140
+ end
141
+
142
+ should "should be able to get a user's transaction statistics" do
143
+ @mock.expects(:get).once.returns(test_response(test_transactions_stats))
144
+ stats = Dwolla::Transactions.stats
145
+ assert stats.kind_of? Object
146
+ end
147
+
148
+ should "should be able to send money from a user's account" do
149
+ @mock.expects(:post).once.returns(test_response(test_send))
150
+ send = Dwolla::Transactions.send({:pin => 1111, :destinationId => '812-734-7288', :amount => 0.01})
151
+ assert send.kind_of? Integer
152
+ end
153
+ end
154
+
155
+ context "users tests" do
156
+ should "should be able to get a user's information" do
157
+ @mock.expects(:get).once.returns(test_response(test_user_self))
158
+ user = Dwolla::Users.me
159
+ assert user.kind_of? Object
160
+ end
161
+ end
162
+ end
163
+
164
+ context "with valid app credentials" do
165
+ setup do
166
+ Dwolla.api_key="foo"
167
+ Dwolla.api_secret="bar"
168
+ end
169
+
170
+ teardown do
171
+ Dwolla.api_key=nil
172
+ Dwolla.api_secret=nil
173
+ end
174
+
175
+ context "contacts tests" do
176
+ should "be able to get a list of nearby spots" do
177
+ @mock.expects(:get).once.returns(test_response(test_contacts_array))
178
+ spots = Dwolla::Contacts.nearby
179
+ assert spots.kind_of? Array
180
+ end
181
+ end
182
+
183
+ context "users tests" do
184
+ should "should be able to get any user's information" do
185
+ @mock.expects(:get).once.returns(test_response(test_user_byid))
186
+ user = Dwolla::Users.get('alex@dwolla.com')
187
+ assert user.kind_of? Object
188
+ end
189
+
190
+ should "should be able to get a list of nearby users" do
191
+ @mock.expects(:get).once.returns(test_response(test_users_array))
192
+ users = Dwolla::Users.nearby
193
+ assert users.kind_of? Array
194
+ end
195
+ end
196
+ end
197
+ end
198
+ end
@@ -0,0 +1,424 @@
1
+ require 'stringio'
2
+ require 'test/unit'
3
+ require 'dwolla'
4
+ require 'mocha/setup'
5
+ include Mocha
6
+
7
+ #monkeypatch request methods
8
+ module Dwolla
9
+ @mock_rest_client = nil
10
+
11
+ def self.mock_rest_client=(mock_client)
12
+ @mock_rest_client = mock_client
13
+ end
14
+
15
+ def self.execute_request(opts)
16
+ get_params = (opts[:headers] || {})[:params]
17
+ post_params = opts[:payload]
18
+
19
+ case opts[:method]
20
+ when :get then @mock_rest_client.get opts[:url], get_params, post_params
21
+ when :post then @mock_rest_client.post opts[:url], get_params, post_params
22
+ end
23
+ end
24
+ end
25
+
26
+ def test_response(body, code=200)
27
+ # When an exception is raised, restclient clobbers method_missing. Hence we
28
+ # can't just use the stubs interface.
29
+ body = MultiJson.dump(body) if !(body.kind_of? String)
30
+ m = mock
31
+ m.instance_variable_set('@dwolla_values', { :body => body, :code => code })
32
+ def m.body; @dwolla_values[:body]; end
33
+ def m.code; @dwolla_values[:code]; end
34
+ m
35
+ end
36
+
37
+ def test_transaction_byid(params={})
38
+ {
39
+ :Success => true,
40
+ :Message => 'Success',
41
+ :Response => {
42
+ :Id => 2834469,
43
+ :Amount => 1,
44
+ :Date => "05/02/2013 17:18:09",
45
+ :Type => "withdrawal",
46
+ :UserType => "Dwolla",
47
+ :DestinationId => "XXX80-1",
48
+ :DestinationName => "Veridian Credit Union",
49
+ :SourceId => "812-734-7288",
50
+ :SourceName => "Michael Schonfeld",
51
+ :ClearingDate => "5/2/2013",
52
+ :Status => "processed",
53
+ :Notes => nil,
54
+ :Fees => nil
55
+ }
56
+ }.merge(params)
57
+ end
58
+
59
+ def test_transactions_array(params={})
60
+ {
61
+ :Success => true,
62
+ :Message => 'Success',
63
+ :Response => [
64
+ {
65
+ :Id => 2834469,
66
+ :Amount => 1,
67
+ :Date => "05/02/2013 17:18:09",
68
+ :Type => "withdrawal",
69
+ :UserType => "Dwolla",
70
+ :DestinationId => "XXX80-1",
71
+ :DestinationName => "Veridian Credit Union",
72
+ :SourceId => "812-734-7288",
73
+ :SourceName => "Michael Schonfeld",
74
+ :ClearingDate => "5/2/2013",
75
+ :Status => "processed",
76
+ :Notes => nil,
77
+ :Fees => nil
78
+ },
79
+ {
80
+ :Id => 2834457,
81
+ :Amount => 1,
82
+ :Date => "05/02/2013 17:17:02",
83
+ :Type => "deposit",
84
+ :UserType => "Dwolla",
85
+ :DestinationId => "812-734-7288",
86
+ :DestinationName => "Michael Schonfeld",
87
+ :SourceId => "XXX80-1",
88
+ :SourceName => "Veridian Credit Union",
89
+ :ClearingDate => "5/2/2013",
90
+ :Status => "processed",
91
+ :Notes => nil,
92
+ :Fees => nil
93
+ }
94
+ ]
95
+ }.merge(params)
96
+ end
97
+
98
+ def test_transactions_stats(params={})
99
+ {
100
+ :Success => true,
101
+ :Message => 'Success',
102
+ :Response => [
103
+ {
104
+ :TransactionsCount => 3,
105
+ :TransactionsTotal => 0.03
106
+ }
107
+ ]
108
+ }.merge(params)
109
+ end
110
+
111
+ def test_balance(params={})
112
+ {
113
+ :Success => true,
114
+ :Message => 'Success',
115
+ :Response => 10.00
116
+ }.merge(params)
117
+ end
118
+
119
+ def test_send(params={})
120
+ {
121
+ :Success => true,
122
+ :Message => 'Success',
123
+ :Response => 2834853
124
+ }.merge(params)
125
+ end
126
+
127
+ def test_request(params={})
128
+ {
129
+ :Success => true,
130
+ :Message => 'Success',
131
+ :Response => 2221134
132
+ }.merge(params)
133
+ end
134
+
135
+ def test_request_byid(params={})
136
+ {
137
+ :Success => true,
138
+ :Message => 'Success',
139
+ :Response => {
140
+ :Id => 2209516,
141
+ :Source => {
142
+ :Id => "812-734-7288",
143
+ :Name => "Michael Schonfeld",
144
+ :Type => "Dwolla",
145
+ :Image => nil
146
+ },
147
+ :Destination => {
148
+ :Id => "812-552-5325",
149
+ :Name => "Mark Littlewood",
150
+ :Type => "Dwolla",
151
+ :Image => nil
152
+ },
153
+ :Amount => 8,
154
+ :DateRequested => "8/15/2012 10:18:46 PM",
155
+ :Status => "Pending",
156
+ :Transaction => nil
157
+ }
158
+ }.merge(params)
159
+ end
160
+
161
+ def test_requests_array(params={})
162
+ {
163
+ :Success => true,
164
+ :Message => 'Success',
165
+ :Response => [
166
+ {
167
+ :Id => 2209516,
168
+ :Source => {
169
+ :Id => "812-734-7288",
170
+ :Name => "Michael Schonfeld",
171
+ :Type => "Dwolla",
172
+ :Image => nil
173
+ },
174
+ :Destination => {
175
+ :Id => "812-552-5325",
176
+ :Name => "Mark Littlewood",
177
+ :Type => "Dwolla",
178
+ :Image => nil
179
+ },
180
+ :Amount => 8,
181
+ :DateRequested => "8/15/2012 10:18:46 PM",
182
+ :Status => "Pending",
183
+ :Transaction => nil
184
+ },
185
+ {
186
+ :Id => 2213417,
187
+ :Source => {
188
+ :Id => "812-713-9234",
189
+ :Name => "Dwolla",
190
+ :Type => "Dwolla",
191
+ :Image => nil
192
+ },
193
+ :Destination => {
194
+ :Id => "812-734-7288",
195
+ :Name => "Michael Schonfeld",
196
+ :Type => "Dwolla",
197
+ :Image => nil
198
+ },
199
+ :Amount => 0.1,
200
+ :DateRequested => "12/4/2012 5:20:38 PM",
201
+ :Status => "Pending",
202
+ :Transaction => nil
203
+ }
204
+ ]
205
+ }.merge(params)
206
+ end
207
+
208
+ def test_request_cancel(params={})
209
+ {
210
+ :Success => true,
211
+ :Message => 'Success',
212
+ :Response => ''
213
+ }.merge(params)
214
+ end
215
+
216
+ def test_request_fulfill(params={})
217
+ {
218
+ :Success => true,
219
+ :Message => 'Success',
220
+ :Response => {
221
+ :Id => 2844131,
222
+ :RequestId => 2219682,
223
+ :Source => {
224
+ :Id => "812-734-7288",
225
+ :Name => "Michael Schonfeld",
226
+ :Type => "Dwolla",
227
+ :Image => nil
228
+ },
229
+ :Destination => {
230
+ :Id => "812-726-8148",
231
+ :Name => "Paul Liberman",
232
+ :Type => "Dwolla",
233
+ :Image => nil
234
+ },
235
+ :Amount => 1,
236
+ :SentDate => "5/3/2013 10:55:56 AM",
237
+ :ClearingDate => "5/3/2013 10:55:56 AM",
238
+ :Status => "processed"
239
+ }
240
+ }.merge(params)
241
+ end
242
+
243
+ def test_fundingsource_byid(params={})
244
+ {
245
+ :Success => true,
246
+ :Message => 'Success',
247
+ :Response => {
248
+ :Balance => 7.74,
249
+ :Id => "a4946ae2d2b7f1f880790f31a36887f5",
250
+ :Name => "Veridian Credit Union - Savings",
251
+ :Type => "Savings",
252
+ :Verified => true,
253
+ :ProcessingType => "FiSync"
254
+ }
255
+ }.merge(params)
256
+ end
257
+
258
+ def test_fundingsources_array(params={})
259
+ {
260
+ :Success => true,
261
+ :Message => 'Success',
262
+ :Response => [
263
+ {
264
+ :Id => "a4946ae2d2b7f1f880790f31a36887f5",
265
+ :Name => "Veridian Credit Union - Savings",
266
+ :Type => "Savings",
267
+ :Verified => true,
268
+ :ProcessingType => "FiSync"
269
+ },
270
+ {
271
+ :Id => "c21012f98742d4b0affcd8aeabefb369",
272
+ :Name => "My Checking Account - Checking",
273
+ :Type => "Checking",
274
+ :Verified => true,
275
+ :ProcessingType => "ACH"
276
+ }
277
+ ]
278
+ }.merge(params)
279
+ end
280
+
281
+ def test_fundingsource_withdraw(params={})
282
+ {
283
+ :Success => true,
284
+ :Message => 'Success',
285
+ :Response => {
286
+ :Id => 2834469,
287
+ :Amount => 1,
288
+ :Date => "5/2/2013 9:18:09 PM",
289
+ :Type => "withdrawal",
290
+ :UserType => "Dwolla",
291
+ :DestinationId => "XXX80-1",
292
+ :DestinationName => "Veridian Credit Union",
293
+ :SourceId => "812-734-7288",
294
+ :SourceName => "Michael Schonfeld",
295
+ :ClearingDate => "5/2/2013",
296
+ :Status => "pending",
297
+ :Notes => nil,
298
+ :Fees => nil
299
+ }
300
+ }.merge(params)
301
+ end
302
+
303
+ def test_fundingsource_deposit(params={})
304
+ {
305
+ :Success => true,
306
+ :Message => 'Success',
307
+ :Response => {
308
+ :Id => 2834457,
309
+ :Amount => 1,
310
+ :Date => "5/2/2013 9:17:02 PM",
311
+ :Type => "deposit",
312
+ :UserType => "Dwolla",
313
+ :DestinationId => "812-734-7288",
314
+ :DestinationName => "Michael Schonfeld",
315
+ :SourceId => "XXX80-1",
316
+ :SourceName => "Veridian Credit Union",
317
+ :ClearingDate => "5/2/2013",
318
+ :Status => "pending",
319
+ :Notes => nil,
320
+ :Fees => nil
321
+ }
322
+ }.merge(params)
323
+ end
324
+
325
+ def test_user_self(params={})
326
+ {
327
+ :Success => true,
328
+ :Message => 'Success',
329
+ :Response => {
330
+ :City => "Paris",
331
+ :State => "TN",
332
+ :Type => "Personal",
333
+ :Id => "812-629-2658",
334
+ :Name => "Codeacademy Course",
335
+ :Latitude => 0,
336
+ :Longitude => 0
337
+ }
338
+ }.merge(params)
339
+ end
340
+
341
+ def test_user_byid(params={})
342
+ {
343
+ :Success => true,
344
+ :Message => 'Success',
345
+ :Response => {
346
+ :Name => "Alex Hart",
347
+ :Id => "812-499-5823",
348
+ :Type => "Dwolla",
349
+ :Image => "https://www.dwolla.com/avatars/812-499-5823",
350
+ :City => nil,
351
+ :State => nil
352
+ }
353
+ }.merge(params)
354
+ end
355
+
356
+ def test_users_array(params={})
357
+ {
358
+ :Success => true,
359
+ :Message => 'Success',
360
+ :Response => [
361
+ {
362
+ :Name => "Alex Hart",
363
+ :Id => "812-499-5823",
364
+ :Type => "Dwolla",
365
+ :Image => "https://www.dwolla.com/avatars/812-499-5823",
366
+ :City => nil,
367
+ :State => nil
368
+ },
369
+ {
370
+ :Name => "Alexander Taub",
371
+ :Id => "812-626-8794",
372
+ :Type => "Dwolla",
373
+ :Image => "https://www.dwolla.com/avatars/812-626-8794",
374
+ :City => nil,
375
+ :State => nil
376
+ }
377
+ ]
378
+ }.merge(params)
379
+ end
380
+
381
+ def test_contacts_array(params={})
382
+ {
383
+ :Success => true,
384
+ :Message => 'Success',
385
+ :Response => [
386
+ {
387
+ :Name => "Pinnacle Marketing",
388
+ :Id => "812-464-9495",
389
+ :Type => "Dwolla",
390
+ :Image => "https://www.dwolla.com/avatars/812-464-9495",
391
+ :Latitude => 0,
392
+ :Longitude => 0,
393
+ :Address => "Box 311\n134 Moore Hill Road",
394
+ :City => "Newbury",
395
+ :State => "VT",
396
+ :PostalCode => "05051",
397
+ :Group => "812-534-7970,812-530-2592,812-451-7983,812-554-6122,812-499-3232,812-475-9151,812-568-7828,812-518-8055,812-514-9530",
398
+ :Delta => 0
399
+ },
400
+ {
401
+ :Name => "CMS Plus Hosting LLC",
402
+ :Id => "812-534-7970",
403
+ :Type => "Dwolla",
404
+ :Image => "https://www.dwolla.com/avatars/812-534-7970",
405
+ :Latitude => 0,
406
+ :Longitude => 0,
407
+ :Address => "20 E BEECH\nPO BOX 47",
408
+ :City => "Cedar Springs",
409
+ :State => "MI",
410
+ :PostalCode => "49319",
411
+ :Group => "812-464-9495,812-530-2592,812-451-7983,812-554-6122,812-499-3232,812-475-9151,812-568-7828,812-518-8055,812-514-9530",
412
+ :Delta => 0
413
+ }
414
+ ]
415
+ }.merge(params)
416
+ end
417
+
418
+ def test_api_error
419
+ {
420
+ :Success => false,
421
+ :Message => 'Success',
422
+ :Response => ''
423
+ }
424
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dwolla-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-04-09 00:00:00.000000000 Z
12
+ date: 2013-05-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rest-client
@@ -65,6 +65,54 @@ dependencies:
65
65
  - - ! '>='
66
66
  - !ruby/object:Gem::Version
67
67
  version: '2'
68
+ - !ruby/object:Gem::Dependency
69
+ name: mocha
70
+ requirement: !ruby/object:Gem::Requirement
71
+ none: false
72
+ requirements:
73
+ - - ! '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ none: false
80
+ requirements:
81
+ - - ! '>='
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: shoulda
86
+ requirement: !ruby/object:Gem::Requirement
87
+ none: false
88
+ requirements:
89
+ - - ! '>='
90
+ - !ruby/object:Gem::Version
91
+ version: '0'
92
+ type: :development
93
+ prerelease: false
94
+ version_requirements: !ruby/object:Gem::Requirement
95
+ none: false
96
+ requirements:
97
+ - - ! '>='
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ - !ruby/object:Gem::Dependency
101
+ name: test-unit
102
+ requirement: !ruby/object:Gem::Requirement
103
+ none: false
104
+ requirements:
105
+ - - ! '>='
106
+ - !ruby/object:Gem::Version
107
+ version: '0'
108
+ type: :development
109
+ prerelease: false
110
+ version_requirements: !ruby/object:Gem::Requirement
111
+ none: false
112
+ requirements:
113
+ - - ! '>='
114
+ - !ruby/object:Gem::Version
115
+ version: '0'
68
116
  - !ruby/object:Gem::Dependency
69
117
  name: rake
70
118
  requirement: !ruby/object:Gem::Requirement
@@ -90,17 +138,20 @@ extensions: []
90
138
  extra_rdoc_files: []
91
139
  files:
92
140
  - .gitignore
141
+ - .travis.yml
142
+ - Gemfile
93
143
  - README.md
94
144
  - Rakefile
95
145
  - dwolla-ruby.gemspec
96
146
  - examples/_keys.rb
97
- - examples/accountInfo.rb
98
147
  - examples/balance.rb
99
148
  - examples/contacts.rb
100
149
  - examples/fundingSources.rb
101
150
  - examples/oauth.rb
102
151
  - examples/offsiteGateway.rb
103
152
  - examples/transactions.rb
153
+ - examples/users.rb
154
+ - gemfiles/json.gemfile
104
155
  - lib/dwolla.rb
105
156
  - lib/dwolla/balance.rb
106
157
  - lib/dwolla/contacts.rb
@@ -119,6 +170,8 @@ files:
119
170
  - lib/dwolla/transactions.rb
120
171
  - lib/dwolla/users.rb
121
172
  - lib/dwolla/version.rb
173
+ - test/test_dwolla.rb
174
+ - test/test_helper.rb
122
175
  homepage: https://github.com/dwolla/dwolla-ruby
123
176
  licenses: []
124
177
  post_install_message:
@@ -143,4 +196,6 @@ rubygems_version: 1.8.24
143
196
  signing_key:
144
197
  specification_version: 3
145
198
  summary: Official Ruby Wrapper for Dwolla's API
146
- test_files: []
199
+ test_files:
200
+ - test/test_dwolla.rb
201
+ - test/test_helper.rb