money_mover 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +0 -14
- data/Gemfile.lock +11 -14
- data/lib/money_mover.rb +3 -5
- data/lib/money_mover/dwolla.rb +3 -2
- data/lib/money_mover/dwolla/models/api_resource.rb +6 -4
- data/lib/money_mover/dwolla/models/receive_only_business_customer.rb +1 -9
- data/lib/money_mover/dwolla/models/receive_only_customer.rb +11 -4
- data/lib/money_mover/dwolla/request_signature_validator.rb +24 -0
- data/lib/money_mover/version.rb +1 -1
- data/money_mover.gemspec +11 -4
- data/spec/integration/money_mover/dwolla/request_signature_validator_spec.rb +52 -0
- data/spec/support/dwolla_helper.rb +17 -0
- metadata +108 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 539a311851902d5ab85946c0722879850cd5c8b7
|
4
|
+
data.tar.gz: c6147bebb234f5b70abc1c5b276c1c22eadbc5d2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 204cb3879e4d423c4d65717c0ec4a40de1038b5f76daa6f7c64d88757270386221b35eaa69a6ee99222ad8f7c9f02fb8decc8be45e53fdf14d1c68f666d1e603
|
7
|
+
data.tar.gz: cc3a3b581cfe26aa293bbd06de1d30d36c3fd7350b9646c995051d0d921384f73ec0a4f705798f7cd9cdb271352ce54ddfa1511afdf6f9ba1da092320a24d281
|
data/Gemfile
CHANGED
@@ -1,17 +1,3 @@
|
|
1
1
|
source "https://rubygems.org"
|
2
2
|
|
3
3
|
gemspec
|
4
|
-
|
5
|
-
group :development do
|
6
|
-
gem 'rake'
|
7
|
-
gem 'rspec'
|
8
|
-
gem 'webmock'
|
9
|
-
gem 'shoulda-matchers'
|
10
|
-
gem 'activesupport'
|
11
|
-
|
12
|
-
gem 'activemodel'
|
13
|
-
gem 'faraday'
|
14
|
-
gem 'faraday_middleware'
|
15
|
-
|
16
|
-
gem "rack-test"
|
17
|
-
end
|
data/Gemfile.lock
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
money_mover (0.0.
|
5
|
-
activemodel (
|
6
|
-
activesupport (
|
7
|
-
faraday (~> 0.9
|
8
|
-
faraday_middleware (~> 0.9
|
4
|
+
money_mover (0.0.3)
|
5
|
+
activemodel (>= 4.0, < 5.1)
|
6
|
+
activesupport (>= 4.0, < 5.1)
|
7
|
+
faraday (~> 0.9)
|
8
|
+
faraday_middleware (~> 0.9)
|
9
|
+
rack (>= 1.6, < 2.1)
|
9
10
|
|
10
11
|
GEM
|
11
12
|
remote: https://rubygems.org/
|
@@ -65,16 +66,12 @@ PLATFORMS
|
|
65
66
|
ruby
|
66
67
|
|
67
68
|
DEPENDENCIES
|
68
|
-
activemodel
|
69
|
-
activesupport
|
70
|
-
faraday
|
71
|
-
faraday_middleware
|
72
69
|
money_mover!
|
73
|
-
rack-test
|
74
|
-
rake
|
75
|
-
rspec
|
76
|
-
shoulda-matchers
|
77
|
-
webmock
|
70
|
+
rack-test (~> 0.6)
|
71
|
+
rake (~> 11.2)
|
72
|
+
rspec (~> 3.5)
|
73
|
+
shoulda-matchers (~> 3.1)
|
74
|
+
webmock (~> 2.1)
|
78
75
|
|
79
76
|
BUNDLED WITH
|
80
77
|
1.11.2
|
data/lib/money_mover.rb
CHANGED
@@ -1,14 +1,12 @@
|
|
1
|
-
require 'active_support/core_ext/hash'
|
2
|
-
|
3
|
-
|
1
|
+
require 'active_support/core_ext/hash' # for hash with indifferent access
|
2
|
+
require 'openssl'
|
3
|
+
require 'rack/utils'
|
4
4
|
require 'faraday'
|
5
5
|
require 'faraday_middleware'
|
6
6
|
require 'active_model'
|
7
7
|
|
8
8
|
require 'money_mover/version'
|
9
9
|
require 'money_mover/standalone_errors'
|
10
|
-
|
11
|
-
# dwolla
|
12
10
|
require 'money_mover/dwolla'
|
13
11
|
|
14
12
|
module MoneyMover; end
|
data/lib/money_mover/dwolla.rb
CHANGED
@@ -24,13 +24,14 @@ require 'money_mover/dwolla/models/transfer'
|
|
24
24
|
require 'money_mover/dwolla/models/root_account'
|
25
25
|
# customer models
|
26
26
|
require 'money_mover/dwolla/models/customer'
|
27
|
-
require 'money_mover/dwolla/models/receive_only_business_customer'
|
28
27
|
require 'money_mover/dwolla/models/receive_only_customer'
|
28
|
+
require 'money_mover/dwolla/models/receive_only_business_customer'
|
29
29
|
require 'money_mover/dwolla/models/unverified_customer'
|
30
30
|
require 'money_mover/dwolla/models/unverified_business_customer'
|
31
31
|
require 'money_mover/dwolla/models/verified_business_customer'
|
32
32
|
|
33
|
-
#
|
33
|
+
# other stuff
|
34
|
+
require 'money_mover/dwolla/request_signature_validator'
|
34
35
|
require 'money_mover/dwolla/models/webhook_subscription'
|
35
36
|
|
36
37
|
module MoneyMover
|
@@ -38,7 +38,7 @@ module MoneyMover
|
|
38
38
|
@resource_location = response.resource_location
|
39
39
|
@id = response.resource_id
|
40
40
|
else
|
41
|
-
|
41
|
+
add_errors_from response
|
42
42
|
end
|
43
43
|
|
44
44
|
errors.empty?
|
@@ -47,15 +47,17 @@ module MoneyMover
|
|
47
47
|
def destroy
|
48
48
|
response = @client.delete resource_endpoint
|
49
49
|
|
50
|
-
|
50
|
+
add_errors_from response unless response.success?
|
51
51
|
|
52
52
|
errors.empty?
|
53
53
|
end
|
54
54
|
|
55
55
|
private
|
56
56
|
|
57
|
-
def
|
58
|
-
|
57
|
+
def add_errors_from(model)
|
58
|
+
model.errors.each do |key, messages|
|
59
|
+
errors.add key, messages
|
60
|
+
end
|
59
61
|
end
|
60
62
|
|
61
63
|
def resource_endpoint
|
@@ -1,14 +1,6 @@
|
|
1
1
|
module MoneyMover
|
2
2
|
module Dwolla
|
3
|
-
class ReceiveOnlyBusinessCustomer <
|
4
|
-
def initialize(attrs = {})
|
5
|
-
attrs[:type] = 'receive-only'
|
6
|
-
super attrs
|
7
|
-
end
|
8
|
-
private
|
9
|
-
|
10
|
-
validates_presence_of :firstName, :lastName, :email
|
11
|
-
|
3
|
+
class ReceiveOnlyBusinessCustomer < ReceiveOnlyCustomer
|
12
4
|
def create_params
|
13
5
|
create_attrs = {
|
14
6
|
firstName: firstName,
|
@@ -1,18 +1,25 @@
|
|
1
1
|
module MoneyMover
|
2
2
|
module Dwolla
|
3
3
|
class ReceiveOnlyCustomer < Customer
|
4
|
-
private
|
5
|
-
|
6
4
|
validates_presence_of :firstName, :lastName, :email
|
7
5
|
|
6
|
+
def initialize(attrs = {})
|
7
|
+
super attrs.merge(type: 'receive-only')
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
|
8
12
|
def create_params
|
9
|
-
{
|
13
|
+
create_attrs = {
|
10
14
|
firstName: firstName,
|
11
15
|
lastName: lastName,
|
12
16
|
email: email,
|
13
17
|
type: 'receive-only',
|
14
|
-
ipAddress: ipAddress
|
15
18
|
}
|
19
|
+
|
20
|
+
create_attrs[:ipAddress] = ipAddress if ipAddress.present?
|
21
|
+
|
22
|
+
create_attrs
|
16
23
|
end
|
17
24
|
end
|
18
25
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module MoneyMover
|
2
|
+
module Dwolla
|
3
|
+
class RequestSignatureValidator
|
4
|
+
include ActiveModel::Model
|
5
|
+
validate :valid_request_signature
|
6
|
+
|
7
|
+
def initialize(request_body, request_headers, ach_config = Config.new)
|
8
|
+
@request_body = request_body
|
9
|
+
@ach_request_signature = request_headers['HTTP_X_REQUEST_SIGNATURE_SHA_256']
|
10
|
+
@ach_webhook_secret_key = ach_config.webhook_secret_key
|
11
|
+
end
|
12
|
+
|
13
|
+
def valid_request_signature
|
14
|
+
unless @ach_request_signature && Rack::Utils.secure_compare(signed_body, @ach_request_signature)
|
15
|
+
errors.add :base, "Request Signature Invalid"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def signed_body
|
20
|
+
OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new("sha256"), @ach_webhook_secret_key, @request_body.string)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/money_mover/version.rb
CHANGED
data/money_mover.gemspec
CHANGED
@@ -15,10 +15,17 @@ Gem::Specification.new do |s|
|
|
15
15
|
s.homepage = 'https://github.com/danoph/money_mover'
|
16
16
|
s.license = 'MIT'
|
17
17
|
|
18
|
-
s.add_dependency
|
19
|
-
s.add_dependency
|
20
|
-
s.add_dependency
|
21
|
-
s.add_dependency
|
18
|
+
s.add_dependency 'faraday', '~> 0.9'
|
19
|
+
s.add_dependency 'faraday_middleware', '~> 0.9'
|
20
|
+
s.add_dependency 'activemodel', '>= 4.0', '< 5.1'
|
21
|
+
s.add_dependency 'activesupport', '>= 4.0', '< 5.1'
|
22
|
+
s.add_dependency 'rack', '>= 1.6', '< 2.1'
|
23
|
+
|
24
|
+
s.add_development_dependency 'rake', '~> 11.2'
|
25
|
+
s.add_development_dependency 'rspec', '~> 3.5'
|
26
|
+
s.add_development_dependency 'webmock', '~> 2.1'
|
27
|
+
s.add_development_dependency 'shoulda-matchers', '~> 3.1'
|
28
|
+
s.add_development_dependency 'rack-test', '~> 0.6'
|
22
29
|
|
23
30
|
s.files = `git ls-files`.split("\n")
|
24
31
|
s.test_files = `git ls-files -- spec/*`.split("\n")
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MoneyMover::Dwolla::RequestSignatureValidator do
|
4
|
+
let(:event_params) {
|
5
|
+
{
|
6
|
+
id: "177dd734-3ce1-4701-8f92-9e57386d20f2",
|
7
|
+
resourceId: 'some-id',
|
8
|
+
topic: "some_topic",
|
9
|
+
timestamp: "2016-03-24T20:29:40.346Z",
|
10
|
+
_links: {
|
11
|
+
self: {href: "https://api-uat.dwolla.com/events/177dd734-3ce1-4701-8f92-9e57386d20f2"},
|
12
|
+
account: {href: "https://api-uat.dwolla.com/accounts/0f6589ac-588d-4283-81fc-325cbaa33d54"},
|
13
|
+
resource: {href: "https://api-uat.dwolla.com/funding-sources/something"},
|
14
|
+
customer: {href:"https://api-uat.dwolla.com/customers/2b4af2fe-4d2c-4a5f-8f06-898449086b7b"}
|
15
|
+
}
|
16
|
+
}
|
17
|
+
}
|
18
|
+
|
19
|
+
let(:request_body) { double 'request body', string: request_body_string }
|
20
|
+
let(:request_body_string) { Rack::Utils.build_nested_query event_params }
|
21
|
+
|
22
|
+
subject { described_class.new request_body, request_headers }
|
23
|
+
|
24
|
+
describe '#valid?' do
|
25
|
+
context 'request correctly signed' do
|
26
|
+
let(:request_headers) { dwolla_helper.webhook_signed_header(event_params) }
|
27
|
+
|
28
|
+
it 'returns true' do
|
29
|
+
expect(subject.valid?).to eq(true)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context 'request NOT correctly signed' do
|
35
|
+
let(:request_headers) { dwolla_helper.webhook_header }
|
36
|
+
|
37
|
+
it 'rejects the request with a 401' do
|
38
|
+
expect(subject.valid?).to eq(false)
|
39
|
+
expect(subject.errors[:base]).to eq(['Request Signature Invalid'])
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
context 'request DOES NOT have signature header' do
|
44
|
+
let(:request_headers) {{}}
|
45
|
+
|
46
|
+
it 'rejects the request with a 401' do
|
47
|
+
expect(subject.valid?).to eq(false)
|
48
|
+
expect(subject.errors[:base]).to eq(['Request Signature Invalid'])
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
@@ -327,4 +327,21 @@ class DwollaHelper
|
|
327
327
|
def customer_url(customer_token)
|
328
328
|
"#{customers_url}/#{customer_token}"
|
329
329
|
end
|
330
|
+
|
331
|
+
def body_signature(body)
|
332
|
+
OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new("sha256"), webhook_secret_key, body)
|
333
|
+
end
|
334
|
+
|
335
|
+
def header_signature(hash)
|
336
|
+
body_signature Rack::Utils.build_nested_query(hash)
|
337
|
+
end
|
338
|
+
|
339
|
+
def webhook_signed_header(hash)
|
340
|
+
webhook_header header_signature(hash)
|
341
|
+
end
|
342
|
+
|
343
|
+
def webhook_header(value = 'invalid')
|
344
|
+
#{ 'X-Request-Signature-Sha-256' => value } # real value from rack
|
345
|
+
{ 'HTTP_X_REQUEST_SIGNATURE_SHA_256' => value }
|
346
|
+
end
|
330
347
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: money_mover
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Errante
|
@@ -17,9 +17,6 @@ dependencies:
|
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0.9'
|
20
|
-
- - ">="
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: 0.9.0
|
23
20
|
type: :runtime
|
24
21
|
prerelease: false
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -27,9 +24,6 @@ dependencies:
|
|
27
24
|
- - "~>"
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '0.9'
|
30
|
-
- - ">="
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
version: 0.9.0
|
33
27
|
- !ruby/object:Gem::Dependency
|
34
28
|
name: faraday_middleware
|
35
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -37,9 +31,6 @@ dependencies:
|
|
37
31
|
- - "~>"
|
38
32
|
- !ruby/object:Gem::Version
|
39
33
|
version: '0.9'
|
40
|
-
- - ">="
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
version: 0.9.0
|
43
34
|
type: :runtime
|
44
35
|
prerelease: false
|
45
36
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -47,49 +38,136 @@ dependencies:
|
|
47
38
|
- - "~>"
|
48
39
|
- !ruby/object:Gem::Version
|
49
40
|
version: '0.9'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: activemodel
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
50
45
|
- - ">="
|
51
46
|
- !ruby/object:Gem::Version
|
52
|
-
version:
|
47
|
+
version: '4.0'
|
48
|
+
- - "<"
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: '5.1'
|
51
|
+
type: :runtime
|
52
|
+
prerelease: false
|
53
|
+
version_requirements: !ruby/object:Gem::Requirement
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: '4.0'
|
58
|
+
- - "<"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '5.1'
|
53
61
|
- !ruby/object:Gem::Dependency
|
54
|
-
name:
|
62
|
+
name: activesupport
|
55
63
|
requirement: !ruby/object:Gem::Requirement
|
56
64
|
requirements:
|
57
|
-
- - "
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '4.0'
|
68
|
+
- - "<"
|
58
69
|
- !ruby/object:Gem::Version
|
59
|
-
version: '
|
70
|
+
version: '5.1'
|
71
|
+
type: :runtime
|
72
|
+
prerelease: false
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
60
75
|
- - ">="
|
61
76
|
- !ruby/object:Gem::Version
|
62
|
-
version: 4.
|
77
|
+
version: '4.0'
|
78
|
+
- - "<"
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '5.1'
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
|
+
name: rack
|
83
|
+
requirement: !ruby/object:Gem::Requirement
|
84
|
+
requirements:
|
85
|
+
- - ">="
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '1.6'
|
88
|
+
- - "<"
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '2.1'
|
63
91
|
type: :runtime
|
64
92
|
prerelease: false
|
65
93
|
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - ">="
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '1.6'
|
98
|
+
- - "<"
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: '2.1'
|
101
|
+
- !ruby/object:Gem::Dependency
|
102
|
+
name: rake
|
103
|
+
requirement: !ruby/object:Gem::Requirement
|
66
104
|
requirements:
|
67
105
|
- - "~>"
|
68
106
|
- !ruby/object:Gem::Version
|
69
|
-
version: '
|
70
|
-
|
107
|
+
version: '11.2'
|
108
|
+
type: :development
|
109
|
+
prerelease: false
|
110
|
+
version_requirements: !ruby/object:Gem::Requirement
|
111
|
+
requirements:
|
112
|
+
- - "~>"
|
71
113
|
- !ruby/object:Gem::Version
|
72
|
-
version:
|
114
|
+
version: '11.2'
|
73
115
|
- !ruby/object:Gem::Dependency
|
74
|
-
name:
|
116
|
+
name: rspec
|
75
117
|
requirement: !ruby/object:Gem::Requirement
|
76
118
|
requirements:
|
77
119
|
- - "~>"
|
78
120
|
- !ruby/object:Gem::Version
|
79
|
-
version: '
|
80
|
-
|
121
|
+
version: '3.5'
|
122
|
+
type: :development
|
123
|
+
prerelease: false
|
124
|
+
version_requirements: !ruby/object:Gem::Requirement
|
125
|
+
requirements:
|
126
|
+
- - "~>"
|
81
127
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
83
|
-
|
128
|
+
version: '3.5'
|
129
|
+
- !ruby/object:Gem::Dependency
|
130
|
+
name: webmock
|
131
|
+
requirement: !ruby/object:Gem::Requirement
|
132
|
+
requirements:
|
133
|
+
- - "~>"
|
134
|
+
- !ruby/object:Gem::Version
|
135
|
+
version: '2.1'
|
136
|
+
type: :development
|
84
137
|
prerelease: false
|
85
138
|
version_requirements: !ruby/object:Gem::Requirement
|
86
139
|
requirements:
|
87
140
|
- - "~>"
|
88
141
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
90
|
-
|
142
|
+
version: '2.1'
|
143
|
+
- !ruby/object:Gem::Dependency
|
144
|
+
name: shoulda-matchers
|
145
|
+
requirement: !ruby/object:Gem::Requirement
|
146
|
+
requirements:
|
147
|
+
- - "~>"
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '3.1'
|
150
|
+
type: :development
|
151
|
+
prerelease: false
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
requirements:
|
154
|
+
- - "~>"
|
155
|
+
- !ruby/object:Gem::Version
|
156
|
+
version: '3.1'
|
157
|
+
- !ruby/object:Gem::Dependency
|
158
|
+
name: rack-test
|
159
|
+
requirement: !ruby/object:Gem::Requirement
|
160
|
+
requirements:
|
161
|
+
- - "~>"
|
162
|
+
- !ruby/object:Gem::Version
|
163
|
+
version: '0.6'
|
164
|
+
type: :development
|
165
|
+
prerelease: false
|
166
|
+
version_requirements: !ruby/object:Gem::Requirement
|
167
|
+
requirements:
|
168
|
+
- - "~>"
|
91
169
|
- !ruby/object:Gem::Version
|
92
|
-
version:
|
170
|
+
version: '0.6'
|
93
171
|
description: Moves Money with ACH integrations (dwolla, stripe)
|
94
172
|
email: danoph@gmail.com
|
95
173
|
executables: []
|
@@ -127,6 +205,7 @@ files:
|
|
127
205
|
- lib/money_mover/dwolla/models/unverified_customer.rb
|
128
206
|
- lib/money_mover/dwolla/models/verified_business_customer.rb
|
129
207
|
- lib/money_mover/dwolla/models/webhook_subscription.rb
|
208
|
+
- lib/money_mover/dwolla/request_signature_validator.rb
|
130
209
|
- lib/money_mover/dwolla/token.rb
|
131
210
|
- lib/money_mover/standalone_errors.rb
|
132
211
|
- lib/money_mover/version.rb
|
@@ -137,6 +216,7 @@ files:
|
|
137
216
|
- spec/integration/money_mover/dwolla/documents/create_spec.rb
|
138
217
|
- spec/integration/money_mover/dwolla/funding-sources/micro-deposits/initiation_spec.rb
|
139
218
|
- spec/integration/money_mover/dwolla/funding-sources/micro-deposits/verification_spec.rb
|
219
|
+
- spec/integration/money_mover/dwolla/request_signature_validator_spec.rb
|
140
220
|
- spec/integration/money_mover/dwolla/transfers/create_spec.rb
|
141
221
|
- spec/lib/money_mover/dwolla/client_spec.rb
|
142
222
|
- spec/lib/money_mover/dwolla/config_spec.rb
|
@@ -170,7 +250,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
170
250
|
version: '0'
|
171
251
|
requirements: []
|
172
252
|
rubyforge_project:
|
173
|
-
rubygems_version: 2.
|
253
|
+
rubygems_version: 2.6.6
|
174
254
|
signing_key:
|
175
255
|
specification_version: 4
|
176
256
|
summary: Money Mover
|
@@ -181,6 +261,7 @@ test_files:
|
|
181
261
|
- spec/integration/money_mover/dwolla/documents/create_spec.rb
|
182
262
|
- spec/integration/money_mover/dwolla/funding-sources/micro-deposits/initiation_spec.rb
|
183
263
|
- spec/integration/money_mover/dwolla/funding-sources/micro-deposits/verification_spec.rb
|
264
|
+
- spec/integration/money_mover/dwolla/request_signature_validator_spec.rb
|
184
265
|
- spec/integration/money_mover/dwolla/transfers/create_spec.rb
|
185
266
|
- spec/lib/money_mover/dwolla/client_spec.rb
|
186
267
|
- spec/lib/money_mover/dwolla/config_spec.rb
|