actionkit_connector 0.1.4 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/actionkit_connector/version.rb +1 -1
- data/lib/actionkit_connector.rb +62 -0
- data/spec/connector_spec.rb +100 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4eeb4b6e7d0bde25857028d38896ff19d78b604a
|
4
|
+
data.tar.gz: b1fc898fca46658d916db5019725a7a12da08255
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 580bd61fe4bfbcb047d65b3188d762d6192168774d2241625c84496204dc2138498eb4b7481dcfca8329913c0491529909b0e5ee3a4c50dbc0705d7ec6b62eb1
|
7
|
+
data.tar.gz: cc98ec77802888dcc844dc7d8306350bd957fc9e1440f83ffdaf3f64fde51acbbbddf0369637f2172f0863367ebd576daf68ce92decf6af56b503e7a65c61de8
|
data/lib/actionkit_connector.rb
CHANGED
@@ -137,6 +137,22 @@ module ActionKitConnector
|
|
137
137
|
self.class.post(target, options)
|
138
138
|
end
|
139
139
|
|
140
|
+
# Creates an action which registers a donation with a user account.
|
141
|
+
#
|
142
|
+
# @param [Hash] options The hash of values sent to ActionKit which contain information about this transaction.
|
143
|
+
def create_donation_action(options={})
|
144
|
+
target = "#{self.base_url}/donationpush/"
|
145
|
+
options = self.validate_donation_options(options)
|
146
|
+
page_opts = {
|
147
|
+
basic_auth: self.auth,
|
148
|
+
body: options.to_json,
|
149
|
+
headers: {
|
150
|
+
'Content-Type' => 'application/json'
|
151
|
+
}
|
152
|
+
}
|
153
|
+
self.class.post(target, page_opts)
|
154
|
+
end
|
155
|
+
|
140
156
|
def parse_action_options(options)
|
141
157
|
included_options = {}
|
142
158
|
acceptable_options = [
|
@@ -154,5 +170,51 @@ module ActionKitConnector
|
|
154
170
|
end
|
155
171
|
included_options
|
156
172
|
end
|
173
|
+
|
174
|
+
def validate_donation_options(options)
|
175
|
+
required_base_keys = [:donationpage, :order, :user]
|
176
|
+
if required_base_keys.all? {|s| options.key? s}
|
177
|
+
options[:donationpage] = validate_donationpage_options(options[:donationpage])
|
178
|
+
options[:order] = validate_donation_order_options(options[:order])
|
179
|
+
options[:user] = validate_donation_user_options(options[:user])
|
180
|
+
else
|
181
|
+
raise 'Donation options require donationpage, order and user keys in the base hash.'
|
182
|
+
end
|
183
|
+
options
|
184
|
+
end
|
185
|
+
|
186
|
+
def validate_donationpage_options(options)
|
187
|
+
required_base_keys = [:name, :payment_account]
|
188
|
+
if required_base_keys.all? {|s| options.key? s}
|
189
|
+
options
|
190
|
+
else
|
191
|
+
raise 'Donation Page options require name and payment_account keys in the hash.'
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
def validate_donation_order_options(options)
|
196
|
+
required_base_keys = [:amount, :exp_date_month, :exp_date_year]
|
197
|
+
if required_base_keys.all? {|s| options.key? s}
|
198
|
+
if options[:card_num].nil?
|
199
|
+
options[:card_num] = '4111111111111111' # Default placeholder card number.
|
200
|
+
end
|
201
|
+
|
202
|
+
if options[:card_code].nil?
|
203
|
+
options[:card_code] = '007' # Default AK Card Code.
|
204
|
+
end
|
205
|
+
else
|
206
|
+
raise 'Donation Order options require amount, exp_date_month and exp_date_year keys.'
|
207
|
+
end
|
208
|
+
options
|
209
|
+
end
|
210
|
+
|
211
|
+
def validate_donation_user_options(options)
|
212
|
+
required_base_keys = [:email, :country]
|
213
|
+
if required_base_keys.all? {|s| options.key? s}
|
214
|
+
options
|
215
|
+
else
|
216
|
+
raise 'Donation User options require email and country keys in the hash.'
|
217
|
+
end
|
218
|
+
end
|
157
219
|
end
|
158
220
|
end
|
data/spec/connector_spec.rb
CHANGED
@@ -63,5 +63,105 @@ describe 'Connector' do
|
|
63
63
|
with(body: request_body)
|
64
64
|
end
|
65
65
|
end
|
66
|
+
|
67
|
+
# Used for the donation validations below.
|
68
|
+
let(:full_donation_options) {
|
69
|
+
{
|
70
|
+
donationpage: {
|
71
|
+
name: 'donation',
|
72
|
+
payment_account: 'Default Import Stub'
|
73
|
+
},
|
74
|
+
order: {
|
75
|
+
amount: '1',
|
76
|
+
card_num: '4111111111111111',
|
77
|
+
card_code: '007',
|
78
|
+
exp_date_month: '01',
|
79
|
+
exp_date_year: '2016'
|
80
|
+
},
|
81
|
+
user: {
|
82
|
+
email: 'eric@sumofus.org',
|
83
|
+
country: 'United States',
|
84
|
+
}
|
85
|
+
}
|
86
|
+
}
|
87
|
+
|
88
|
+
describe '#create_donation_action' do
|
89
|
+
let(:request_body) {
|
90
|
+
full_donation_options.to_json
|
91
|
+
}
|
92
|
+
|
93
|
+
before do
|
94
|
+
stub_request(:post, "http://username:password@api.example.com/donationpush/").
|
95
|
+
with(body: request_body)
|
96
|
+
end
|
97
|
+
|
98
|
+
it 'creates a donationpush action' do
|
99
|
+
client.create_donation_action(full_donation_options)
|
100
|
+
expect(WebMock).to have_requested(:post, 'http://username:password@api.example.com/donationpush/').
|
101
|
+
with(body: request_body, headers: {'Content-Type' => 'application/json'})
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
describe 'donation validation methods' do
|
106
|
+
let(:expected_donationpage) {
|
107
|
+
full_donation_options[:donationpage]
|
108
|
+
}
|
109
|
+
let(:expected_order) {
|
110
|
+
full_donation_options[:order]
|
111
|
+
}
|
112
|
+
let(:expected_user) {
|
113
|
+
full_donation_options[:user]
|
114
|
+
}
|
115
|
+
describe '#validate_donation_options' do
|
116
|
+
it 'sends back the correct options when provided a valid hash' do
|
117
|
+
expect(client.validate_donation_options(full_donation_options)).to eq(full_donation_options)
|
118
|
+
end
|
119
|
+
|
120
|
+
it 'raises when provided an incorrect set of base hash values' do
|
121
|
+
expect { client.validate_donation_options({}) }.to raise_error(RuntimeError)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
describe '#validate_donationpage_options' do
|
126
|
+
it 'sends back the correct options when provided a valid hash' do
|
127
|
+
expect(client.validate_donationpage_options(expected_donationpage)).to eq(expected_donationpage)
|
128
|
+
end
|
129
|
+
|
130
|
+
it 'raises when provided an incorrect set of hash values' do
|
131
|
+
expect { client.validate_donationpage_options({}) }.to raise_error(RuntimeError)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
describe '#validate_donation_user_options' do
|
136
|
+
it 'sends back the correct options when provided a valid hash' do
|
137
|
+
expect(client.validate_donation_user_options(expected_user)).to eq(expected_user)
|
138
|
+
end
|
139
|
+
|
140
|
+
it 'raises when provided an incorrect set of hash values' do
|
141
|
+
expect { client.validate_donation_user_options({}) }.to raise_error(RuntimeError)
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
describe '#validate_donation_order_options' do
|
146
|
+
it 'sends back the correct options when provided a correct hash' do
|
147
|
+
expect(client.validate_donation_order_options(expected_order)).to eq(expected_order)
|
148
|
+
end
|
149
|
+
|
150
|
+
it 'raises when provided an incorrect set of hash values' do
|
151
|
+
expect { client.validate_donation_order_options({}) }.to raise_error(RuntimeError)
|
152
|
+
end
|
153
|
+
|
154
|
+
it 'fills in default values if they are not provided' do
|
155
|
+
sent_values = expected_order.tap { |hash|
|
156
|
+
hash.delete(:card_num)
|
157
|
+
hash.delete(:card_code)
|
158
|
+
}
|
159
|
+
expect(client.validate_donation_order_options(sent_values)).to eq(expected_order)
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
end
|
164
|
+
|
165
|
+
|
66
166
|
end
|
67
167
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: actionkit_connector
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eric Boersma
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-12-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -132,7 +132,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
132
132
|
version: '0'
|
133
133
|
requirements: []
|
134
134
|
rubyforge_project:
|
135
|
-
rubygems_version: 2.4.
|
135
|
+
rubygems_version: 2.4.8
|
136
136
|
signing_key:
|
137
137
|
specification_version: 4
|
138
138
|
summary: A gem for interacting with the ActionKit API.
|