actionkit_connector 0.1.4 → 0.2.0

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.
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.