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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e16a7ee6f6fa3884352858162d9e633191c65a78
4
- data.tar.gz: 1993fbb2afe1cba96fbdb876497be2e234af7193
3
+ metadata.gz: 4eeb4b6e7d0bde25857028d38896ff19d78b604a
4
+ data.tar.gz: b1fc898fca46658d916db5019725a7a12da08255
5
5
  SHA512:
6
- metadata.gz: 4b6d0a6854ae046da9da1a5356d17ead15e6a026e56319ebba3f408594d8f4315ea5eafc548b303ac4724a11aa7f31a29a0c8b45d7bd5d0f7cf4e0698dd90534
7
- data.tar.gz: aacd7d4f95e0e5269d86a33dc9a9681ce4805036749163d467f1208b82b3fd2fde23f17f47abd6214cdaa9a97cb023f57534a07c0681f1d609d5e6c83034403a
6
+ metadata.gz: 580bd61fe4bfbcb047d65b3188d762d6192168774d2241625c84496204dc2138498eb4b7481dcfca8329913c0491529909b0e5ee3a4c50dbc0705d7ec6b62eb1
7
+ data.tar.gz: cc98ec77802888dcc844dc7d8306350bd957fc9e1440f83ffdaf3f64fde51acbbbddf0369637f2172f0863367ebd576daf68ce92decf6af56b503e7a65c61de8
@@ -1,3 +1,3 @@
1
1
  module ActionkitConnector
2
- VERSION = '0.1.4'
2
+ VERSION = '0.2.0'
3
3
  end
@@ -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
@@ -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.1.4
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-10-13 00:00:00.000000000 Z
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.3
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.