alpha_card 0.2.6 → 0.3.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 +4 -4
- data/.gitignore +5 -0
- data/.travis.yml +1 -5
- data/CHANGELOG.md +54 -0
- data/Gemfile.lock +25 -37
- data/LICENSE +1 -1
- data/README.md +207 -67
- data/ROADMAP.md +12 -0
- data/alpha_card.gemspec +5 -4
- data/lib/alpha_card.rb +11 -6
- data/lib/alpha_card/alpha_card_object.rb +59 -3
- data/lib/alpha_card/alpha_card_response.rb +99 -16
- data/lib/alpha_card/data/avs_responses.yml +20 -0
- data/lib/alpha_card/data/credit_card_codes.yml +1 -1
- data/lib/alpha_card/data/cvv_responses.yml +5 -0
- data/lib/alpha_card/data/response_messages.yml +33 -0
- data/lib/alpha_card/errors/alpha_card_error.rb +1 -1
- data/lib/alpha_card/errors/invalid_object_error.rb +8 -0
- data/lib/alpha_card/objects/account.rb +1 -1
- data/lib/alpha_card/objects/billing.rb +15 -4
- data/lib/alpha_card/objects/capture.rb +51 -0
- data/lib/alpha_card/objects/order.rb +41 -4
- data/lib/alpha_card/objects/refund.rb +20 -0
- data/lib/alpha_card/objects/sale.rb +32 -22
- data/lib/alpha_card/objects/shipping.rb +15 -4
- data/lib/alpha_card/objects/update.rb +54 -0
- data/lib/alpha_card/objects/void.rb +45 -0
- data/lib/alpha_card/version.rb +18 -2
- data/spec/alpha_card/objects/account_spec.rb +20 -0
- data/spec/alpha_card/objects/capture_spec.rb +51 -0
- data/spec/alpha_card/objects/deprecated_methods_spec.rb +32 -0
- data/spec/alpha_card/objects/refund_spec.rb +35 -0
- data/spec/alpha_card/objects/sale_spec.rb +143 -0
- data/spec/alpha_card/objects/update_spec.rb +36 -0
- data/spec/alpha_card/objects/void_spec.rb +48 -0
- data/spec/alpha_card/response_spec.rb +111 -0
- data/spec/spec_helper.rb +7 -2
- metadata +44 -9
- data/spec/alpha_card/alpha_card_account_spec.rb +0 -18
- data/spec/alpha_card/alpha_card_response_spec.rb +0 -63
- data/spec/alpha_card/alpha_card_spec.rb +0 -123
data/spec/spec_helper.rb
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
require 'rack/test'
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
if ENV['CI'] || ENV['TRAVIS'] || ENV['COVERALLS'] || ENV['JENKINS_URL']
|
4
|
+
require 'coveralls'
|
5
|
+
Coveralls.wear!
|
6
|
+
else
|
7
|
+
require 'simplecov'
|
8
|
+
SimpleCov.start
|
9
|
+
end
|
5
10
|
|
6
11
|
require 'bundler/setup'
|
7
12
|
Bundler.setup
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: alpha_card
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nikita Bulaj
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-09-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: virtus
|
@@ -30,20 +30,40 @@ dependencies:
|
|
30
30
|
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: 1.0.5
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: rack
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '1.2'
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '1.2'
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '1.2'
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '1.2'
|
33
53
|
- !ruby/object:Gem::Dependency
|
34
54
|
name: rspec
|
35
55
|
requirement: !ruby/object:Gem::Requirement
|
36
56
|
requirements:
|
37
57
|
- - "~>"
|
38
58
|
- !ruby/object:Gem::Version
|
39
|
-
version: '3'
|
59
|
+
version: '3.5'
|
40
60
|
type: :development
|
41
61
|
prerelease: false
|
42
62
|
version_requirements: !ruby/object:Gem::Requirement
|
43
63
|
requirements:
|
44
64
|
- - "~>"
|
45
65
|
- !ruby/object:Gem::Version
|
46
|
-
version: '3'
|
66
|
+
version: '3.5'
|
47
67
|
description: Gem for creating sales with Alpha Card Services
|
48
68
|
email: bulajnikita@gmail.com
|
49
69
|
executables: []
|
@@ -53,27 +73,42 @@ files:
|
|
53
73
|
- ".gitignore"
|
54
74
|
- ".rspec"
|
55
75
|
- ".travis.yml"
|
76
|
+
- CHANGELOG.md
|
56
77
|
- Gemfile
|
57
78
|
- Gemfile.lock
|
58
79
|
- LICENSE
|
59
80
|
- README.md
|
81
|
+
- ROADMAP.md
|
60
82
|
- Rakefile
|
61
83
|
- alpha_card.gemspec
|
62
84
|
- lib/alpha_card.rb
|
63
85
|
- lib/alpha_card/alpha_card_object.rb
|
64
86
|
- lib/alpha_card/alpha_card_response.rb
|
87
|
+
- lib/alpha_card/data/avs_responses.yml
|
65
88
|
- lib/alpha_card/data/credit_card_codes.yml
|
89
|
+
- lib/alpha_card/data/cvv_responses.yml
|
90
|
+
- lib/alpha_card/data/response_messages.yml
|
66
91
|
- lib/alpha_card/errors/alpha_card_error.rb
|
67
92
|
- lib/alpha_card/errors/api_connection_error.rb
|
93
|
+
- lib/alpha_card/errors/invalid_object_error.rb
|
68
94
|
- lib/alpha_card/objects/account.rb
|
69
95
|
- lib/alpha_card/objects/billing.rb
|
96
|
+
- lib/alpha_card/objects/capture.rb
|
70
97
|
- lib/alpha_card/objects/order.rb
|
98
|
+
- lib/alpha_card/objects/refund.rb
|
71
99
|
- lib/alpha_card/objects/sale.rb
|
72
100
|
- lib/alpha_card/objects/shipping.rb
|
101
|
+
- lib/alpha_card/objects/update.rb
|
102
|
+
- lib/alpha_card/objects/void.rb
|
73
103
|
- lib/alpha_card/version.rb
|
74
|
-
- spec/alpha_card/
|
75
|
-
- spec/alpha_card/
|
76
|
-
- spec/alpha_card/
|
104
|
+
- spec/alpha_card/objects/account_spec.rb
|
105
|
+
- spec/alpha_card/objects/capture_spec.rb
|
106
|
+
- spec/alpha_card/objects/deprecated_methods_spec.rb
|
107
|
+
- spec/alpha_card/objects/refund_spec.rb
|
108
|
+
- spec/alpha_card/objects/sale_spec.rb
|
109
|
+
- spec/alpha_card/objects/update_spec.rb
|
110
|
+
- spec/alpha_card/objects/void_spec.rb
|
111
|
+
- spec/alpha_card/response_spec.rb
|
77
112
|
- spec/spec_helper.rb
|
78
113
|
homepage: http://github.com/nbulaj/alpha_card
|
79
114
|
licenses:
|
@@ -87,7 +122,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
87
122
|
requirements:
|
88
123
|
- - ">="
|
89
124
|
- !ruby/object:Gem::Version
|
90
|
-
version:
|
125
|
+
version: 2.0.0
|
91
126
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
92
127
|
requirements:
|
93
128
|
- - ">="
|
@@ -95,7 +130,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
95
130
|
version: '0'
|
96
131
|
requirements: []
|
97
132
|
rubyforge_project:
|
98
|
-
rubygems_version: 2.
|
133
|
+
rubygems_version: 2.5.1
|
99
134
|
signing_key:
|
100
135
|
specification_version: 4
|
101
136
|
summary: Alpha Card Services API for Ruby
|
@@ -1,18 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe AlphaCard::Account do
|
4
|
-
let!(:valid_account) { AlphaCard::Account.new('demo', 'password') }
|
5
|
-
let!(:invalid_account) { AlphaCard::Account.new('', '') }
|
6
|
-
|
7
|
-
context 'with valid credentials' do
|
8
|
-
it 'should return true if credentials are filled' do
|
9
|
-
expect(valid_account.filled?).to be_truthy
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
context 'with invalid credentials' do
|
14
|
-
it 'should return false if credentials are filled' do
|
15
|
-
expect(invalid_account.filled?).to be_falsey
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,63 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe AlphaCard::AlphaCardResponse do
|
4
|
-
let!(:successful_response_mock) {
|
5
|
-
"authcode=083319&avsresponse=&cvvresponse=M&orderid=1&response=1&response_code=100&responsetext=AP&transactionid=2303767426&type=sale"
|
6
|
-
}
|
7
|
-
|
8
|
-
let!(:declined_response_mock) {
|
9
|
-
"authcode=&avsresponse=&cvvresponse=&orderid=1&response=2&response_code=220&responsetext=INVLD+ACCT&transactionid=2302720045&type=sale"
|
10
|
-
}
|
11
|
-
|
12
|
-
let!(:error_response_mock) {
|
13
|
-
"authcode=&avsresponse=&cvvresponse=&orderid=1&response=3&response_code=220&responsetext=ERROR&transactionid=2302620041&type=sale"
|
14
|
-
}
|
15
|
-
|
16
|
-
context 'successful request' do
|
17
|
-
let!(:response) { AlphaCard::AlphaCardResponse.new(successful_response_mock) }
|
18
|
-
|
19
|
-
it 'should be success' do
|
20
|
-
expect(response.success?).to be_truthy
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'should return responce code' do
|
24
|
-
expect(response.code).to eq('100')
|
25
|
-
end
|
26
|
-
|
27
|
-
it 'should return transaction id' do
|
28
|
-
expect(response.transaction_id).to eq('2303767426')
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
context 'declined request' do
|
33
|
-
let!(:response) { AlphaCard::AlphaCardResponse.new(declined_response_mock) }
|
34
|
-
|
35
|
-
it 'should be declined' do
|
36
|
-
expect(response.declined?).to be_truthy
|
37
|
-
end
|
38
|
-
|
39
|
-
it 'should return responce code' do
|
40
|
-
expect(response.code).to eq('220')
|
41
|
-
end
|
42
|
-
|
43
|
-
it 'should return transaction id' do
|
44
|
-
expect(response.transaction_id).to eq('2302720045')
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
context 'error request' do
|
49
|
-
let!(:response) { AlphaCard::AlphaCardResponse.new(error_response_mock) }
|
50
|
-
|
51
|
-
it 'should be error' do
|
52
|
-
expect(response.error?).to be_truthy
|
53
|
-
end
|
54
|
-
|
55
|
-
it 'should return responce code' do
|
56
|
-
expect(response.code).to eq('220')
|
57
|
-
end
|
58
|
-
|
59
|
-
it 'should return transaction id' do
|
60
|
-
expect(response.transaction_id).to eq('2302620041')
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
@@ -1,123 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe AlphaCard do
|
4
|
-
# Shared objects
|
5
|
-
let!(:account) { AlphaCard::Account.new('demo', 'password') }
|
6
|
-
let!(:billing) { AlphaCard::Billing.new({email: 'test@example.com'}) }
|
7
|
-
let!(:shipping) { AlphaCard::Shipping.new({address_1: '22 N str.'}) }
|
8
|
-
let!(:order) { AlphaCard::Order.new({orderid: '1', billing: billing, shipping: shipping}) }
|
9
|
-
let!(:card_exp) { "#{'%02d' % Time.now.month}/#{Time.now.year.next}" }
|
10
|
-
|
11
|
-
context 'With valid attributes' do
|
12
|
-
let!(:sale) { AlphaCard::Sale.new({ccexp: card_exp, ccnumber: '4111111111111111', amount: '5.00'}) }
|
13
|
-
|
14
|
-
it 'should successfully create the sale' do
|
15
|
-
expect(sale.create(order, account)).to be_truthy
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
context 'With invalid Card number' do
|
20
|
-
let!(:sale) { AlphaCard::Sale.new({ccexp: card_exp, ccnumber: 'Invalid', amount: '5.00'}) }
|
21
|
-
|
22
|
-
it 'should raise an AlphaCardError' do
|
23
|
-
expect { sale.create(order, account) }.to raise_error(AlphaCard::AlphaCardError) do |e|
|
24
|
-
expect(e.message).to include('Card number must contain only digits')
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
context 'With invalid amount' do
|
30
|
-
let!(:sale) { AlphaCard::Sale.new({ccexp: card_exp, ccnumber: '4111111111111111', amount: '0.00'}) }
|
31
|
-
|
32
|
-
it 'should raise an AlphaCardError' do
|
33
|
-
expect { sale.create(order, account) }.to raise_error(AlphaCard::AlphaCardError) do |e|
|
34
|
-
expect(e.message).to include('Invalid amount')
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
context 'With invalid Card expiration date' do
|
40
|
-
let!(:sale) { AlphaCard::Sale.new({ccexp: 'Invalid', ccnumber: '4111111111111111', amount: '5.00'}) }
|
41
|
-
|
42
|
-
it 'should raise an AlphaCardError' do
|
43
|
-
expect { sale.create(order, account) }.to raise_error(AlphaCard::AlphaCardError) do |e|
|
44
|
-
expect(e.message).to include('Card expiration should be in the format')
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
context 'With invalid Card CVV' do
|
50
|
-
let!(:sale) { AlphaCard::Sale.new({ccexp: card_exp, cvv: 'Invalid', ccnumber: '4111111111111111', amount: '5.00'}) }
|
51
|
-
|
52
|
-
it 'should raise an AlphaCardError' do
|
53
|
-
expect { sale.create(order, account) }.to raise_error(AlphaCard::AlphaCardError) do |e|
|
54
|
-
expect(e.message).to include('CVV must be')
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
context 'With invalid account credentials' do
|
60
|
-
let!(:invalid_account) { AlphaCard::Account.new('demo', 'Invalid password') }
|
61
|
-
let!(:sale) { AlphaCard::Sale.new({ccexp: card_exp, ccnumber: '4111111111111111', amount: '5.00'}) }
|
62
|
-
|
63
|
-
it 'should raise an AlphaCardError' do
|
64
|
-
expect { sale.create(order, invalid_account) }.to raise_error(AlphaCard::AlphaCardError) do |e|
|
65
|
-
expect(e.message).to include('Authentication Failed')
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
context 'Without attributes' do
|
71
|
-
let!(:sale) { AlphaCard::Sale.new({}) }
|
72
|
-
|
73
|
-
it 'should raise an Exception' do
|
74
|
-
expect { sale.create(order, account) }.to raise_error(ArgumentError)
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
context 'With blank account credentials' do
|
79
|
-
let!(:blank_account) { AlphaCard::Account.new(nil, '') }
|
80
|
-
let!(:sale) { AlphaCard::Sale.new({ccexp: card_exp, ccnumber: '4111111111111111', amount: '5.00'}) }
|
81
|
-
|
82
|
-
it 'should raise an AlphaCardError' do
|
83
|
-
expect { sale.create(order, blank_account) }.to raise_error(AlphaCard::AlphaCardError) do |e|
|
84
|
-
expect(e.message).to include('You must set credentials to create the sale')
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
context 'With connection errors' do
|
90
|
-
let!(:timeout_error) { Timeout::Error.new }
|
91
|
-
let!(:socket_error) { SocketError.new }
|
92
|
-
let!(:unclassified_error) { StandardError.new('Some error') }
|
93
|
-
|
94
|
-
it 'should raise an APIConnectionError if Timeout Error' do
|
95
|
-
expect { AlphaCard.handle_connection_errors(timeout_error) }.to raise_error(AlphaCard::APIConnectionError) do |e|
|
96
|
-
expect(e.message).to include('Could not connect to Alpha Card Gateway')
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
it 'should raise an APIConnectionError if Socket Error' do
|
101
|
-
expect { AlphaCard.handle_connection_errors(socket_error) }.to raise_error(AlphaCard::APIConnectionError) do |e|
|
102
|
-
expect(e.message).to include('Unexpected error communicating when trying to connect to Alpha Card Gateway')
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
it 'should raise an APIConnectionError if Unclassified Error' do
|
107
|
-
expect { AlphaCard.handle_connection_errors(unclassified_error) }.to raise_error(AlphaCard::APIConnectionError) do |e|
|
108
|
-
expect(e.message).to include('Unexpected error communicating with Alpha Card Gateway')
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
context 'With request exception' do
|
113
|
-
let!(:sale) { AlphaCard::Sale.new({ccexp: card_exp, ccnumber: '4111111111111111', amount: '5.00'}) }
|
114
|
-
|
115
|
-
it 'should handle an error' do
|
116
|
-
AlphaCard.api_base = 'https://not-existing.com' # todo: some other service
|
117
|
-
expect { sale.create(order, account) }.to raise_error(AlphaCard::APIConnectionError)
|
118
|
-
|
119
|
-
AlphaCard.api_base = 'https://secure.alphacardgateway.com/api/transact.php'
|
120
|
-
end
|
121
|
-
end
|
122
|
-
end
|
123
|
-
end
|