saferpay 0.1.0.pre
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 +7 -0
- data/.gitignore +34 -0
- data/.rspec +1 -0
- data/Gemfile +2 -0
- data/LICENSE +22 -0
- data/README.md +29 -0
- data/Rakefile +7 -0
- data/lib/saferpay.rb +1 -0
- data/lib/saferpay/client.rb +141 -0
- data/lib/saferpay/configuration.rb +38 -0
- data/lib/saferpay/error.rb +89 -0
- data/lib/saferpay/version.rb +3 -0
- data/saferpay.gemspec +29 -0
- data/spec/fixtures/vcr/saferpay_api.yml +1354 -0
- data/spec/saferpay/api_responses_spec.rb +83 -0
- data/spec/saferpay/api_spec.rb +264 -0
- data/spec/saferpay/configuration_spec.rb +48 -0
- data/spec/saferpay/saferpay_spec.rb +7 -0
- data/spec/spec_helper.rb +25 -0
- data/spec/support/vcr_setup.rb +7 -0
- metadata +157 -0
@@ -0,0 +1,83 @@
|
|
1
|
+
shared_examples_for 'the get payment url response' do
|
2
|
+
let(:response) { subject.get_payment_url(options) }
|
3
|
+
|
4
|
+
it 'is a string' do
|
5
|
+
expect(response).to be_a String
|
6
|
+
end
|
7
|
+
|
8
|
+
it 'contains the payment url' do
|
9
|
+
expect(response).to match /^https:\/\/www.saferpay.com\/.+/
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
shared_examples_for 'the verify pay confirm response' do
|
14
|
+
let(:response) { subject.handle_pay_confirm(options) }
|
15
|
+
|
16
|
+
it 'is an hash' do
|
17
|
+
expect(response).to be_an Hash
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'contains normalized keys' do
|
21
|
+
expect(response.keys).to include(:id, :callback_data, :token)
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'contains the id' do
|
25
|
+
expect(response[:id]).to match /\w{28}/
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'contains callback data' do
|
29
|
+
expect(response[:callback_data]).not_to be_nil
|
30
|
+
end
|
31
|
+
|
32
|
+
describe 'the callback data' do
|
33
|
+
let(:callback_data) { response[:callback_data] }
|
34
|
+
|
35
|
+
it 'is an hash' do
|
36
|
+
expect(callback_data).to be_an Hash
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'contains normalized keys' do
|
40
|
+
expect(callback_data.keys).to include(:data, :signature)
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'contains the XML data' do
|
44
|
+
expect(callback_data[:data]).to be_an Hash
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'contains the expected Message Type' do
|
48
|
+
expect(callback_data[:data][:msgtype]).to eq 'PayConfirm'
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'contains the expected Account ID' do
|
52
|
+
expect(callback_data[:data][:accountid]).to eq subject.account_id
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'contains the expected Amount' do
|
56
|
+
expect(callback_data[:data][:amount]).to eq '1000'
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
shared_examples_for 'the complete payment response' do
|
62
|
+
let(:response) { subject.complete_payment(options) }
|
63
|
+
|
64
|
+
it 'is an hash' do
|
65
|
+
expect(response).to be_an Hash
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'contains normalized keys' do
|
69
|
+
expect(response.keys).to include(:id, :successful, :result, :msgtype)
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'contains the id' do
|
73
|
+
expect(response[:id]).to eq options['ID']
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'specifies if the request was successfully processed' do
|
77
|
+
expect(response[:successful]).to be_true
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'contains the expected Message Type' do
|
81
|
+
expect(response[:msgtype]).to eq 'PayConfirm'
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,264 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'saferpay'
|
3
|
+
|
4
|
+
shared_examples_for 'default redefinition' do
|
5
|
+
context 'when account_id is redefined' do
|
6
|
+
let (:redefined_options) { options.merge( {'ACCOUNTID' => 'random-ID'} ) }
|
7
|
+
|
8
|
+
it 'uses the new value instead of the default' do
|
9
|
+
expect(subject.class).to receive(:get).with anything, { :query => redefined_options }
|
10
|
+
subject.send(testing_method, redefined_options) rescue nil # don't care if it fails after
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe Saferpay::API do
|
16
|
+
subject { Saferpay::API.new }
|
17
|
+
|
18
|
+
before do
|
19
|
+
VCR.insert_cassette 'saferpay_api', :record => :new_episodes
|
20
|
+
end
|
21
|
+
|
22
|
+
after do
|
23
|
+
VCR.eject_cassette
|
24
|
+
end
|
25
|
+
|
26
|
+
describe 'configuration' do
|
27
|
+
context 'by default' do
|
28
|
+
Saferpay::Configuration::DEFAULTS.each do |key, val|
|
29
|
+
its(key) { should eq(val) }
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'with a custom global configuration' do
|
34
|
+
Saferpay::Configuration::VALID_CONFIG_KEYS.each do |key|
|
35
|
+
before(:each) { Saferpay.configure { |config| config.send "#{key}=", key } }
|
36
|
+
|
37
|
+
it "passes the user-defined global #{key} to the API instance" do
|
38
|
+
expect(subject.send(key)).to eq(key)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe 'HTTParty configuration' do
|
45
|
+
subject { Saferpay::API }
|
46
|
+
|
47
|
+
it 'includes HTTParty' do
|
48
|
+
expect(subject).to include(HTTParty)
|
49
|
+
end
|
50
|
+
|
51
|
+
context 'with default endpoint' do
|
52
|
+
subject { Saferpay::API.new.class }
|
53
|
+
its(:base_uri) { should eq Saferpay::Configuration::DEFAULTS[:endpoint] }
|
54
|
+
end
|
55
|
+
|
56
|
+
context 'with custom endpoint (via params)' do
|
57
|
+
subject { Saferpay::API.new(:endpoint => 'http://example.com').class }
|
58
|
+
its(:base_uri) { should_not eq 'http://example.com' }
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
describe 'GET payment url' do
|
63
|
+
|
64
|
+
context 'when amount is missing' do
|
65
|
+
let (:options) { {} }
|
66
|
+
it 'raises Missing AMOUNT error' do
|
67
|
+
expect { subject.get_payment_url(options) }.to raise_error(Saferpay::Error::BadRequest, 'Missing AMOUNT attribute')
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
context 'when currency is missing' do
|
72
|
+
let (:options) { {'AMOUNT' => 1000} }
|
73
|
+
it 'raises Missing CURRENCY error' do
|
74
|
+
expect { subject.get_payment_url(options) }.to raise_error(Saferpay::Error::BadRequest, 'Missing CURRENCY attribute')
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
context 'when description is missing' do
|
79
|
+
let (:options) { {'AMOUNT' => 1000, 'CURRENCY' => 'EUR'} }
|
80
|
+
it 'raises Missing DESCRIPTION error' do
|
81
|
+
expect { subject.get_payment_url(options) }.to raise_error(Saferpay::Error::BadRequest, 'Missing DESCRIPTION attribute')
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
context 'when amount, currency and description are defined' do
|
86
|
+
let (:options) { {'AMOUNT' => 1000, 'CURRENCY' => 'EUR', 'DESCRIPTION' => 'Test description.'} }
|
87
|
+
|
88
|
+
it 'does not raise an error' do
|
89
|
+
expect { subject.get_payment_url(options) }.not_to raise_error
|
90
|
+
end
|
91
|
+
|
92
|
+
it_behaves_like 'the get payment url response'
|
93
|
+
|
94
|
+
include_examples 'default redefinition' do
|
95
|
+
let (:testing_method) { :get_payment_url }
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
100
|
+
|
101
|
+
context 'when directly accessing a non-existent URL' do
|
102
|
+
|
103
|
+
%w(GET POST HEAD).each do |method|
|
104
|
+
context "via #{method}" do
|
105
|
+
it 'raises 404 NotFound error' do
|
106
|
+
expect { subject.class.send(method.downcase, '/foobar') }.to raise_error(Saferpay::Error::NotFound, 'Not Found')
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
%w(PUT DELETE MOVE COPY).each do |method|
|
112
|
+
context "via #{method}" do
|
113
|
+
it 'raises 405 MethodNotAllowed error' do
|
114
|
+
expect { subject.class.send(method.downcase, '/foobar') }.to raise_error(Saferpay::Error, 'Method Not Allowed')
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
describe 'GET verify pay confirm' do
|
121
|
+
|
122
|
+
context 'when data is missing' do
|
123
|
+
let (:options) { {} }
|
124
|
+
it 'raises Missing DATA error' do
|
125
|
+
expect { subject.handle_pay_confirm(options) }.to raise_error(Saferpay::Error::BadRequest, 'Missing DATA attribute')
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
context 'when signature is missing' do
|
130
|
+
let (:options) { {'DATA' => 'test-data'} }
|
131
|
+
it 'raises Missing SIGNATURE error' do
|
132
|
+
expect { subject.handle_pay_confirm(options) }.to raise_error(Saferpay::Error::BadRequest, 'Missing SIGNATURE attribute')
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
context 'when data and signature are defined' do
|
137
|
+
|
138
|
+
context 'when data is not valid XML' do
|
139
|
+
let (:options) { {'DATA' => 'test-data', 'SIGNATURE' => 'test-signature'} }
|
140
|
+
it 'raises could not load DATA XML error' do
|
141
|
+
expect { subject.handle_pay_confirm(options) }.to raise_error(Saferpay::Error::BadRequest, 'Could not load DATA XML')
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
context 'when data and signature don\'t match' do
|
146
|
+
let (:options) { {'DATA' => URI.encode('<IDP MSGTYPE="PayConfirm" TOKEN="(unused)" VTVERIFY="(obsolete)" KEYID="1-0" ID="A668MSAprOj4tAzv7G9lAQUfUr3A" ACCOUNTID="99867-94913159" PROVIDERID="90" PROVIDERNAME="Saferpay Test Card" ORDERID="123456789-001" AMOUNT="1000" CURRENCY="EUR" IP="193.247.180.193" IPCOUNTRY="CH" CCCOUNTRY="XX" MPI_LIABILITYSHIFT="yes" MPI_TX_CAVV="AAABBIIFmAAAAAAAAAAAAAAAAAA=" MPI_XID="CxMTYwhoUXtCBAEndBULcRIQaAY=" ECI="1" CAVV="AAABBIIFmAAAAAAAAAAAAAAAAAA=" XID="CxMTYwhoUXtCBAEndBULcRIQaAY=" />'), 'SIGNATURE' => 'test-signature'} }
|
147
|
+
it 'raises generic error' do
|
148
|
+
expect { subject.handle_pay_confirm(options) }.to raise_error(Saferpay::Error::BadRequest, 'An Error occurred')
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
context 'when data and signature match' do
|
153
|
+
let (:options) { {'DATA' => URI.encode('<IDP MSGTYPE="PayConfirm" TOKEN="(unused)" VTVERIFY="(obsolete)" KEYID="1-0" ID="A668MSAprOj4tAzv7G9lAQUfUr3A" ACCOUNTID="99867-94913159" PROVIDERID="90" PROVIDERNAME="Saferpay Test Card" ORDERID="123456789-001" AMOUNT="1000" CURRENCY="EUR" IP="193.247.180.193" IPCOUNTRY="CH" CCCOUNTRY="XX" MPI_LIABILITYSHIFT="yes" MPI_TX_CAVV="AAABBIIFmAAAAAAAAAAAAAAAAAA=" MPI_XID="CxMTYwhoUXtCBAEndBULcRIQaAY=" ECI="1" CAVV="AAABBIIFmAAAAAAAAAAAAAAAAAA=" XID="CxMTYwhoUXtCBAEndBULcRIQaAY=" />'), 'SIGNATURE' => '7b2bb163f4ef86d969d992b4e2d61ad48d3b9022e0ec68177e35fe53184e6b3399730d1a3641d2a984ce38699daad72ab006d5d6a9565c5ae1cff8bdc8a1eb63'} }
|
154
|
+
|
155
|
+
it 'does not raise an error' do
|
156
|
+
expect { subject.handle_pay_confirm(options) }.not_to raise_error
|
157
|
+
end
|
158
|
+
|
159
|
+
it_behaves_like 'the verify pay confirm response'
|
160
|
+
|
161
|
+
describe 'the original options parameter' do
|
162
|
+
subject { Saferpay::API.new(:account_id => '99867-94913159') }
|
163
|
+
|
164
|
+
context 'when nothing matches' do
|
165
|
+
subject { Saferpay::API.new(:account_id => '123123') }
|
166
|
+
let (:original_options) { {} }
|
167
|
+
it 'raises Possible Manipulation error' do
|
168
|
+
expect { subject.handle_pay_confirm(options, original_options) }.to raise_error(Saferpay::Error::BadRequest, 'Possible manipulation - AMOUNT, CURRENCY, ORDERID, ACCOUNTID not matching')
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
context 'when amount doesn\'t match' do
|
173
|
+
let (:original_options) { { 'CURRENCY' => 'EUR', 'ORDERID' => '123456789-001' } }
|
174
|
+
it 'raises Possible Manipulation error' do
|
175
|
+
expect { subject.handle_pay_confirm(options, original_options) }.to raise_error(Saferpay::Error::BadRequest, 'Possible manipulation - AMOUNT not matching')
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
context 'when currency doesn\'t match' do
|
180
|
+
let (:original_options) { { 'AMOUNT' => '1000', 'ORDERID' => '123456789-001' } }
|
181
|
+
it 'raises Possible Manipulation error' do
|
182
|
+
expect { subject.handle_pay_confirm(options, original_options) }.to raise_error(Saferpay::Error::BadRequest, 'Possible manipulation - CURRENCY not matching')
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
context 'when orderid doesn\'t match' do
|
187
|
+
let (:original_options) { { 'AMOUNT' => '1000', 'CURRENCY' => 'EUR', 'ORDERID' => 'random' } }
|
188
|
+
it 'raises Possible Manipulation error' do
|
189
|
+
expect { subject.handle_pay_confirm(options, original_options) }.to raise_error(Saferpay::Error::BadRequest, 'Possible manipulation - ORDERID not matching')
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
context 'when account_id doesn\'t match' do
|
194
|
+
subject { Saferpay::API.new(:account_id => '123123') }
|
195
|
+
let (:original_options) { { 'AMOUNT' => '1000', 'CURRENCY' => 'EUR', 'ORDERID' => '123456789-001' } }
|
196
|
+
it 'raises Possible Manipulation error' do
|
197
|
+
expect { subject.handle_pay_confirm(options, original_options) }.to raise_error(Saferpay::Error::BadRequest, 'Possible manipulation - ACCOUNTID not matching')
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
context 'when everything matches' do
|
202
|
+
let (:original_options) { { 'AMOUNT' => '1000', 'CURRENCY' => 'EUR', 'ORDERID' => '123456789-001' } }
|
203
|
+
it 'does not raise an error' do
|
204
|
+
expect { subject.handle_pay_confirm(options, original_options) }.not_to raise_error
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
context 'when more than data and signature are defined' do
|
212
|
+
let (:options) { {:id => 1, :controller => 'test', 'DATA' => URI.encode('<IDP MSGTYPE="PayConfirm" TOKEN="(unused)" VTVERIFY="(obsolete)" KEYID="1-0" ID="A668MSAprOj4tAzv7G9lAQUfUr3A" ACCOUNTID="99867-94913159" PROVIDERID="90" PROVIDERNAME="Saferpay Test Card" ORDERID="123456789-001" AMOUNT="1000" CURRENCY="EUR" IP="193.247.180.193" IPCOUNTRY="CH" CCCOUNTRY="XX" MPI_LIABILITYSHIFT="yes" MPI_TX_CAVV="AAABBIIFmAAAAAAAAAAAAAAAAAA=" MPI_XID="CxMTYwhoUXtCBAEndBULcRIQaAY=" ECI="1" CAVV="AAABBIIFmAAAAAAAAAAAAAAAAAA=" XID="CxMTYwhoUXtCBAEndBULcRIQaAY=" />'), 'SIGNATURE' => '7b2bb163f4ef86d969d992b4e2d61ad48d3b9022e0ec68177e35fe53184e6b3399730d1a3641d2a984ce38699daad72ab006d5d6a9565c5ae1cff8bdc8a1eb63'} }
|
213
|
+
|
214
|
+
it 'does not raise an error' do
|
215
|
+
expect { subject.handle_pay_confirm(options) }.not_to raise_error
|
216
|
+
end
|
217
|
+
|
218
|
+
it_behaves_like 'the verify pay confirm response'
|
219
|
+
|
220
|
+
include_examples 'default redefinition' do
|
221
|
+
let (:testing_method) { :handle_pay_confirm }
|
222
|
+
end
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
end
|
227
|
+
|
228
|
+
describe 'GET complete payment' do
|
229
|
+
let (:default_options) { {'spPassword' => 'XAjc3Kna'} } # only for test account on PayComplete method (via HTTPs interface)
|
230
|
+
|
231
|
+
context 'when id is missing' do
|
232
|
+
let (:options) { default_options.merge({}) }
|
233
|
+
it 'raises Missing ID error' do
|
234
|
+
expect { subject.complete_payment(options) }.to raise_error(Saferpay::Error::BadRequest, 'Missing ID attribute')
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
238
|
+
context 'when id is defined' do
|
239
|
+
|
240
|
+
context 'when id is not valid' do
|
241
|
+
let (:options) { default_options.merge({'ID' => 'test-id'}) }
|
242
|
+
it 'raises invalid ID error' do
|
243
|
+
expect { subject.complete_payment(options) }.to raise_error(Saferpay::Error::BadRequest, 'Transaction not available')
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
247
|
+
context 'when id is valid' do
|
248
|
+
let (:options) { default_options.merge({'ID' => 'WxWrIlA48W06rAjKKOp5bzS80E5A'}) }
|
249
|
+
|
250
|
+
it 'does not raise an error' do
|
251
|
+
expect { subject.complete_payment(options) }.not_to raise_error
|
252
|
+
end
|
253
|
+
|
254
|
+
it_behaves_like 'the complete payment response'
|
255
|
+
|
256
|
+
include_examples 'default redefinition' do
|
257
|
+
let (:testing_method) { :complete_payment }
|
258
|
+
end
|
259
|
+
end
|
260
|
+
end
|
261
|
+
|
262
|
+
end
|
263
|
+
|
264
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'saferpay'
|
3
|
+
|
4
|
+
describe Saferpay do
|
5
|
+
subject { Saferpay }
|
6
|
+
|
7
|
+
describe 'configuration' do
|
8
|
+
context 'by default' do
|
9
|
+
Saferpay::Configuration::VALID_CONFIG_KEYS.each do |key|
|
10
|
+
its(key) { should eq Saferpay::Configuration::DEFAULTS[key] }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe '.configure' do
|
15
|
+
Saferpay::Configuration::VALID_CONFIG_KEYS.each do |key|
|
16
|
+
it "sets #{key}" do
|
17
|
+
Saferpay.configure do |config|
|
18
|
+
config.send("#{key}=", key)
|
19
|
+
expect(Saferpay.send(key)).to eq(key)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe '.reset' do
|
26
|
+
|
27
|
+
Saferpay::Configuration::VALID_CONFIG_KEYS.each do |key|
|
28
|
+
|
29
|
+
it "resets #{key} to default value" do
|
30
|
+
subject.configure { |config| config.send "#{key}=", key }
|
31
|
+
subject.reset
|
32
|
+
|
33
|
+
expect(subject.send(key)).to eq Saferpay::Configuration::DEFAULTS[key]
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe 'DEFAULTS hash' do
|
39
|
+
|
40
|
+
Saferpay::Configuration::VALID_CONFIG_KEYS.each do |key|
|
41
|
+
it "does not allow direct manipulation of #{key}" do
|
42
|
+
expect { subject.options[key] = 'someothervalue' }.to raise_error
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'bundler/setup'
|
2
|
+
Bundler.setup
|
3
|
+
|
4
|
+
require 'saferpay'
|
5
|
+
require 'vcr'
|
6
|
+
|
7
|
+
# Requires supporting ruby files with custom matchers and macros, etc,
|
8
|
+
# in spec/support/ and its subdirectories.
|
9
|
+
Dir[File.join(File.dirname(__FILE__), 'support/**/*.rb')].each { |f| require f }
|
10
|
+
|
11
|
+
RSpec.configure do |config|
|
12
|
+
# Run specs in random order to surface order dependencies. If you find an
|
13
|
+
# order dependency and want to debug it, you can fix the order by providing
|
14
|
+
# the seed, which is printed after each run.
|
15
|
+
# --seed 1234
|
16
|
+
config.order = 'random'
|
17
|
+
|
18
|
+
config.expect_with :rspec do |c|
|
19
|
+
c.syntax = :expect
|
20
|
+
end
|
21
|
+
|
22
|
+
config.after(:each) do
|
23
|
+
Saferpay.reset
|
24
|
+
end
|
25
|
+
end
|
metadata
ADDED
@@ -0,0 +1,157 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: saferpay
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0.pre
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Pedro Gaspar
|
8
|
+
- Whitesmith
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2014-04-04 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: httparty
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ~>
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '0.12'
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ~>
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '0.12'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: bundler
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ~>
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '1.5'
|
35
|
+
type: :development
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ~>
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '1.5'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: rake
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ~>
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
49
|
+
type: :development
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ~>
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: rspec
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ~>
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 2.14.1
|
63
|
+
type: :development
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 2.14.1
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: webmock
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - '='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 1.15.2
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - '='
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: 1.15.2
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: vcr
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - ~>
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '2.8'
|
91
|
+
type: :development
|
92
|
+
prerelease: false
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - ~>
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '2.8'
|
98
|
+
description: Interact with Saferpay's HTTPS Interface with an object-oriented API
|
99
|
+
wrapper built with HTTParty.
|
100
|
+
email:
|
101
|
+
- me@pedrogaspar.com
|
102
|
+
- info@whitesmith.co
|
103
|
+
executables: []
|
104
|
+
extensions: []
|
105
|
+
extra_rdoc_files: []
|
106
|
+
files:
|
107
|
+
- .gitignore
|
108
|
+
- .rspec
|
109
|
+
- Gemfile
|
110
|
+
- LICENSE
|
111
|
+
- README.md
|
112
|
+
- Rakefile
|
113
|
+
- lib/saferpay.rb
|
114
|
+
- lib/saferpay/client.rb
|
115
|
+
- lib/saferpay/configuration.rb
|
116
|
+
- lib/saferpay/error.rb
|
117
|
+
- lib/saferpay/version.rb
|
118
|
+
- saferpay.gemspec
|
119
|
+
- spec/fixtures/vcr/saferpay_api.yml
|
120
|
+
- spec/saferpay/api_responses_spec.rb
|
121
|
+
- spec/saferpay/api_spec.rb
|
122
|
+
- spec/saferpay/configuration_spec.rb
|
123
|
+
- spec/saferpay/saferpay_spec.rb
|
124
|
+
- spec/spec_helper.rb
|
125
|
+
- spec/support/vcr_setup.rb
|
126
|
+
homepage: http://github.com/whitesmith/saferpay-gem
|
127
|
+
licenses:
|
128
|
+
- MIT
|
129
|
+
metadata: {}
|
130
|
+
post_install_message:
|
131
|
+
rdoc_options: []
|
132
|
+
require_paths:
|
133
|
+
- lib
|
134
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - '>='
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
140
|
+
requirements:
|
141
|
+
- - '>'
|
142
|
+
- !ruby/object:Gem::Version
|
143
|
+
version: 1.3.1
|
144
|
+
requirements: []
|
145
|
+
rubyforge_project:
|
146
|
+
rubygems_version: 2.2.1
|
147
|
+
signing_key:
|
148
|
+
specification_version: 4
|
149
|
+
summary: A Ruby Saferpay API wrapper
|
150
|
+
test_files:
|
151
|
+
- spec/fixtures/vcr/saferpay_api.yml
|
152
|
+
- spec/saferpay/api_responses_spec.rb
|
153
|
+
- spec/saferpay/api_spec.rb
|
154
|
+
- spec/saferpay/configuration_spec.rb
|
155
|
+
- spec/saferpay/saferpay_spec.rb
|
156
|
+
- spec/spec_helper.rb
|
157
|
+
- spec/support/vcr_setup.rb
|