alpha_card 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +4 -4
- data/CHANGELOG.md +21 -3
- data/Gemfile +0 -2
- data/Gemfile.lock +6 -24
- data/README.md +115 -85
- data/ROADMAP.md +13 -9
- data/alpha_card.gemspec +3 -4
- data/lib/alpha_card.rb +44 -72
- data/lib/alpha_card/account.rb +51 -0
- data/lib/alpha_card/attribute.rb +337 -0
- data/lib/alpha_card/data/credit_card_codes.yml +54 -54
- data/lib/alpha_card/errors/invalid_attribute_format.rb +14 -0
- data/lib/alpha_card/errors/invalid_attribute_type.rb +14 -0
- data/lib/alpha_card/errors/invalid_attribute_value.rb +14 -0
- data/lib/alpha_card/errors/{invalid_object_error.rb → validation_error.rb} +1 -1
- data/lib/alpha_card/{alpha_card_object.rb → resource.rb} +14 -28
- data/lib/alpha_card/resources/billing.rb +29 -0
- data/lib/alpha_card/{objects → resources}/order.rb +8 -8
- data/lib/alpha_card/{objects → resources}/shipping.rb +15 -13
- data/lib/alpha_card/{alpha_card_response.rb → response.rb} +21 -6
- data/lib/alpha_card/transaction.rb +30 -0
- data/lib/alpha_card/transactions/auth.rb +18 -0
- data/lib/alpha_card/transactions/capture.rb +32 -0
- data/lib/alpha_card/transactions/credit.rb +18 -0
- data/lib/alpha_card/{objects → transactions}/refund.rb +9 -2
- data/lib/alpha_card/transactions/sale.rb +91 -0
- data/lib/alpha_card/transactions/update.rb +61 -0
- data/lib/alpha_card/transactions/validate.rb +21 -0
- data/lib/alpha_card/transactions/void.rb +26 -0
- data/lib/alpha_card/version.rb +1 -1
- data/spec/alpha_card/attribute_spec.rb +126 -0
- data/spec/alpha_card/response_spec.rb +8 -4
- data/spec/alpha_card/transactions/auth_spec.rb +43 -0
- data/spec/alpha_card/{objects → transactions}/capture_spec.rb +11 -12
- data/spec/alpha_card/transactions/credit_spec.rb +102 -0
- data/spec/alpha_card/{objects → transactions}/refund_spec.rb +4 -4
- data/spec/alpha_card/{objects → transactions}/sale_spec.rb +42 -41
- data/spec/alpha_card/{objects → transactions}/update_spec.rb +4 -4
- data/spec/alpha_card/transactions/validate_spec.rb +100 -0
- data/spec/alpha_card/{objects → transactions}/void_spec.rb +11 -11
- data/spec/spec_helper.rb +4 -0
- metadata +36 -47
- data/lib/alpha_card/errors/alpha_card_error.rb +0 -29
- data/lib/alpha_card/objects/account.rb +0 -48
- data/lib/alpha_card/objects/billing.rb +0 -31
- data/lib/alpha_card/objects/capture.rb +0 -51
- data/lib/alpha_card/objects/sale.rb +0 -82
- data/lib/alpha_card/objects/update.rb +0 -54
- data/lib/alpha_card/objects/void.rb +0 -45
- data/spec/alpha_card/objects/account_spec.rb +0 -20
- data/spec/alpha_card/objects/deprecated_methods_spec.rb +0 -32
@@ -1,26 +1,26 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe AlphaCard::Void do
|
4
|
-
let(:account) { AlphaCard::Account.new('demo', 'password') }
|
5
|
-
|
6
4
|
context 'with invalid attributes' do
|
7
5
|
let(:void) { AlphaCard::Void.new(transaction_id: 'Some ID') }
|
6
|
+
let(:response) { void.create }
|
8
7
|
|
9
8
|
it 'response with error' do
|
10
|
-
expect
|
9
|
+
expect(response.error?).to be_truthy
|
10
|
+
expect(response.message).to eq('Transaction was rejected by gateway')
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
14
|
context 'with valid attributes' do
|
15
|
-
let(:void) { AlphaCard::Void.new(transaction_id:
|
15
|
+
let(:void) { AlphaCard::Void.new(transaction_id: 2303767426) }
|
16
16
|
|
17
17
|
let(:order) { AlphaCard::Order.new(id: '1', description: 'Test') }
|
18
|
-
let(:card_exp) {
|
18
|
+
let(:card_exp) { (Time.now + 31104000).strftime('%m%y') }
|
19
19
|
let(:sale) { AlphaCard::Sale.new(card_expiration_date: card_exp, card_number: '4111111111111111', amount: '5.00') }
|
20
20
|
|
21
21
|
it 'has valid request params' do
|
22
22
|
expected_params = {
|
23
|
-
transactionid:
|
23
|
+
transactionid: 2303767426,
|
24
24
|
type: 'void'
|
25
25
|
}
|
26
26
|
|
@@ -28,12 +28,12 @@ describe AlphaCard::Void do
|
|
28
28
|
end
|
29
29
|
|
30
30
|
it 'processed successfully' do
|
31
|
-
|
32
|
-
expect(success).to be_truthy
|
31
|
+
response = sale.create(order)
|
32
|
+
expect(response.success?).to be_truthy
|
33
33
|
expect(response.transaction_id).not_to be_nil
|
34
34
|
|
35
|
-
|
36
|
-
expect(success).to be_truthy
|
35
|
+
response = AlphaCard::Void.new(transaction_id: response.transaction_id).process
|
36
|
+
expect(response.success?).to be_truthy
|
37
37
|
expect(response.text).to eq('Transaction Void Successful')
|
38
38
|
end
|
39
39
|
end
|
@@ -42,7 +42,7 @@ describe AlphaCard::Void do
|
|
42
42
|
let(:void) { AlphaCard::Void.new }
|
43
43
|
|
44
44
|
it 'raises an InvalidObject error' do
|
45
|
-
expect { void.create
|
45
|
+
expect { void.create }.to raise_error(AlphaCard::ValidationError)
|
46
46
|
end
|
47
47
|
end
|
48
48
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,55 +1,35 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: alpha_card
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.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: 2016-
|
11
|
+
date: 2016-10-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: virtus
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '1.0'
|
20
|
-
- - ">="
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: 1.0.5
|
23
|
-
type: :runtime
|
24
|
-
prerelease: false
|
25
|
-
version_requirements: !ruby/object:Gem::Requirement
|
26
|
-
requirements:
|
27
|
-
- - "~>"
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: '1.0'
|
30
|
-
- - ">="
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
version: 1.0.5
|
33
13
|
- !ruby/object:Gem::Dependency
|
34
14
|
name: rack
|
35
15
|
requirement: !ruby/object:Gem::Requirement
|
36
16
|
requirements:
|
37
17
|
- - "~>"
|
38
18
|
- !ruby/object:Gem::Version
|
39
|
-
version: '
|
19
|
+
version: '2.0'
|
40
20
|
- - ">="
|
41
21
|
- !ruby/object:Gem::Version
|
42
|
-
version: '
|
22
|
+
version: '2.0'
|
43
23
|
type: :runtime
|
44
24
|
prerelease: false
|
45
25
|
version_requirements: !ruby/object:Gem::Requirement
|
46
26
|
requirements:
|
47
27
|
- - "~>"
|
48
28
|
- !ruby/object:Gem::Version
|
49
|
-
version: '
|
29
|
+
version: '2.0'
|
50
30
|
- - ">="
|
51
31
|
- !ruby/object:Gem::Version
|
52
|
-
version: '
|
32
|
+
version: '2.0'
|
53
33
|
- !ruby/object:Gem::Dependency
|
54
34
|
name: rspec
|
55
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -82,33 +62,42 @@ files:
|
|
82
62
|
- Rakefile
|
83
63
|
- alpha_card.gemspec
|
84
64
|
- lib/alpha_card.rb
|
85
|
-
- lib/alpha_card/
|
86
|
-
- lib/alpha_card/
|
65
|
+
- lib/alpha_card/account.rb
|
66
|
+
- lib/alpha_card/attribute.rb
|
87
67
|
- lib/alpha_card/data/avs_responses.yml
|
88
68
|
- lib/alpha_card/data/credit_card_codes.yml
|
89
69
|
- lib/alpha_card/data/cvv_responses.yml
|
90
70
|
- lib/alpha_card/data/response_messages.yml
|
91
|
-
- lib/alpha_card/errors/alpha_card_error.rb
|
92
71
|
- lib/alpha_card/errors/api_connection_error.rb
|
93
|
-
- lib/alpha_card/errors/
|
94
|
-
- lib/alpha_card/
|
95
|
-
- lib/alpha_card/
|
96
|
-
- lib/alpha_card/
|
97
|
-
- lib/alpha_card/
|
98
|
-
- lib/alpha_card/
|
99
|
-
- lib/alpha_card/
|
100
|
-
- lib/alpha_card/
|
101
|
-
- lib/alpha_card/
|
102
|
-
- lib/alpha_card/
|
72
|
+
- lib/alpha_card/errors/invalid_attribute_format.rb
|
73
|
+
- lib/alpha_card/errors/invalid_attribute_type.rb
|
74
|
+
- lib/alpha_card/errors/invalid_attribute_value.rb
|
75
|
+
- lib/alpha_card/errors/validation_error.rb
|
76
|
+
- lib/alpha_card/resource.rb
|
77
|
+
- lib/alpha_card/resources/billing.rb
|
78
|
+
- lib/alpha_card/resources/order.rb
|
79
|
+
- lib/alpha_card/resources/shipping.rb
|
80
|
+
- lib/alpha_card/response.rb
|
81
|
+
- lib/alpha_card/transaction.rb
|
82
|
+
- lib/alpha_card/transactions/auth.rb
|
83
|
+
- lib/alpha_card/transactions/capture.rb
|
84
|
+
- lib/alpha_card/transactions/credit.rb
|
85
|
+
- lib/alpha_card/transactions/refund.rb
|
86
|
+
- lib/alpha_card/transactions/sale.rb
|
87
|
+
- lib/alpha_card/transactions/update.rb
|
88
|
+
- lib/alpha_card/transactions/validate.rb
|
89
|
+
- lib/alpha_card/transactions/void.rb
|
103
90
|
- lib/alpha_card/version.rb
|
104
|
-
- spec/alpha_card/
|
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
|
91
|
+
- spec/alpha_card/attribute_spec.rb
|
111
92
|
- spec/alpha_card/response_spec.rb
|
93
|
+
- spec/alpha_card/transactions/auth_spec.rb
|
94
|
+
- spec/alpha_card/transactions/capture_spec.rb
|
95
|
+
- spec/alpha_card/transactions/credit_spec.rb
|
96
|
+
- spec/alpha_card/transactions/refund_spec.rb
|
97
|
+
- spec/alpha_card/transactions/sale_spec.rb
|
98
|
+
- spec/alpha_card/transactions/update_spec.rb
|
99
|
+
- spec/alpha_card/transactions/validate_spec.rb
|
100
|
+
- spec/alpha_card/transactions/void_spec.rb
|
112
101
|
- spec/spec_helper.rb
|
113
102
|
homepage: http://github.com/nbulaj/alpha_card
|
114
103
|
licenses:
|
@@ -122,7 +111,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
122
111
|
requirements:
|
123
112
|
- - ">="
|
124
113
|
- !ruby/object:Gem::Version
|
125
|
-
version: 2.
|
114
|
+
version: 2.2.2
|
126
115
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
127
116
|
requirements:
|
128
117
|
- - ">="
|
@@ -1,29 +0,0 @@
|
|
1
|
-
module AlphaCard
|
2
|
-
##
|
3
|
-
# Common class for Alpha Card Gateway errors and exceptions.
|
4
|
-
class AlphaCardError < StandardError
|
5
|
-
# Alpha Card Gateway response.
|
6
|
-
# @attr_reader [AlphaCard::AlphaCardResponse] response
|
7
|
-
attr_reader :response
|
8
|
-
# Error message.
|
9
|
-
# @attr_reader [String] message
|
10
|
-
attr_reader :message
|
11
|
-
|
12
|
-
##
|
13
|
-
# <code>AlphaCard::AlphaCardError</code> constructor.
|
14
|
-
#
|
15
|
-
# @param [String] message
|
16
|
-
# Error message
|
17
|
-
# @param [AlphaCard::AlphaCardResponse] response
|
18
|
-
# AlphaCard Gateway response
|
19
|
-
#
|
20
|
-
# @example
|
21
|
-
# AlphaCard::AlphaCardError.new
|
22
|
-
#
|
23
|
-
# #=> #<AlphaCard::AlphaCardError: AlphaCard::AlphaCardError>
|
24
|
-
def initialize(message = nil, response = nil)
|
25
|
-
@message = message
|
26
|
-
@response = response
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
@@ -1,48 +0,0 @@
|
|
1
|
-
module AlphaCard
|
2
|
-
##
|
3
|
-
# Implementation of Alpha Card Services account object.
|
4
|
-
# Contains credentials (username and password) for
|
5
|
-
# the Alpha Card Gateway API access.
|
6
|
-
class Account < AlphaCardObject
|
7
|
-
attribute :username, String
|
8
|
-
attribute :password, String
|
9
|
-
|
10
|
-
##
|
11
|
-
# <code>AlphaCard::Account</code> constructor.
|
12
|
-
#
|
13
|
-
# @param [String] username
|
14
|
-
# @param [String] password
|
15
|
-
#
|
16
|
-
# @example
|
17
|
-
# AlphaCard::Account.new('demo', 'password')
|
18
|
-
#
|
19
|
-
# #=> #<AlphaCard::Account:0x000000039b18a8 @username="demo", @password="password">
|
20
|
-
def initialize(username, password)
|
21
|
-
self.username = username
|
22
|
-
self.password = password
|
23
|
-
end
|
24
|
-
|
25
|
-
##
|
26
|
-
# Say if all the credentials of Account is filled.
|
27
|
-
# Username and password can't be a <code>nil</code>
|
28
|
-
# object or an empty <code>String</code>.
|
29
|
-
#
|
30
|
-
# @return [Boolean]
|
31
|
-
# True if username and password is filled.
|
32
|
-
#
|
33
|
-
# @example
|
34
|
-
# account = AlphaCard::Account.new('demo', 'password')
|
35
|
-
# account.filled?
|
36
|
-
#
|
37
|
-
# #=> true
|
38
|
-
#
|
39
|
-
# account = AlphaCard::Account.new('', nil)
|
40
|
-
# account.filled?
|
41
|
-
#
|
42
|
-
# #=> false
|
43
|
-
def filled?
|
44
|
-
attrs = [username, password]
|
45
|
-
attrs.all? { |attr| attr && !attr.strip.empty? }
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
module AlphaCard
|
2
|
-
##
|
3
|
-
# Implementation of Alpha Card Services order billing information.
|
4
|
-
# Contains all the billing information (customer name, email, email, etc).
|
5
|
-
class Billing < AlphaCardObject
|
6
|
-
attribute :first_name, String
|
7
|
-
attribute :last_name, String
|
8
|
-
attribute :email, String
|
9
|
-
attribute :phone, String
|
10
|
-
attribute :company, String
|
11
|
-
attribute :address_1, String
|
12
|
-
attribute :address_2, String
|
13
|
-
attribute :city, String
|
14
|
-
attribute :state, String
|
15
|
-
attribute :zip, String
|
16
|
-
attribute :country, String
|
17
|
-
attribute :fax, String
|
18
|
-
attribute :website, String
|
19
|
-
|
20
|
-
##
|
21
|
-
# Original AlphaCard transaction variables names
|
22
|
-
ORIGIN_TRANSACTION_VARIABLES = {
|
23
|
-
first_name: :firstname,
|
24
|
-
last_name: :lastname,
|
25
|
-
address_1: :address1,
|
26
|
-
address_2: :address2
|
27
|
-
}.freeze
|
28
|
-
|
29
|
-
deprecate_old_variables!
|
30
|
-
end
|
31
|
-
end
|
@@ -1,51 +0,0 @@
|
|
1
|
-
module AlphaCard
|
2
|
-
##
|
3
|
-
# Implementation of Alpha Card Services Capture transaction.
|
4
|
-
class Capture < AlphaCardObject
|
5
|
-
attribute :transaction_id, String
|
6
|
-
# Format: xx.xx
|
7
|
-
attribute :amount, String
|
8
|
-
attribute :tracking_number, String
|
9
|
-
attribute :shipping_carrier, String
|
10
|
-
attribute :order_id, String
|
11
|
-
|
12
|
-
##
|
13
|
-
# Transaction type (default is 'capture')
|
14
|
-
#
|
15
|
-
# @attribute [r] type
|
16
|
-
attribute :type, String, default: 'capture', writer: :private
|
17
|
-
|
18
|
-
##
|
19
|
-
# Original AlphaCard transaction variables names
|
20
|
-
ORIGIN_TRANSACTION_VARIABLES = {
|
21
|
-
transaction_id: :transactionid,
|
22
|
-
order_id: :orderid
|
23
|
-
}.freeze
|
24
|
-
|
25
|
-
##
|
26
|
-
# Creates a Capture with the <code>AlphaCard::Account</code> credentials.
|
27
|
-
#
|
28
|
-
# @param [AlphaCard::Account] account
|
29
|
-
# An <code>AlphaCard::Account</code> object.
|
30
|
-
#
|
31
|
-
# @return [Boolean]
|
32
|
-
# True if capture was created successfully.
|
33
|
-
# Raise an AlphaCardError exception if some error occurred.
|
34
|
-
#
|
35
|
-
# @raise [Exception]
|
36
|
-
# Exception if one of required attributes doesn't specified.
|
37
|
-
#
|
38
|
-
# @example
|
39
|
-
# account = AlphaCard::Account.new('demo', 'password')
|
40
|
-
# capture = AlphaCard::Capture.new(transaction_id: '981562', amount: '10.05')
|
41
|
-
# capture.create(account)
|
42
|
-
#
|
43
|
-
# #=> [true, #<AlphaCard::AlphaCardResponse:0x1a0fda ...>]
|
44
|
-
def create(account)
|
45
|
-
abort_if_attributes_blank!(:amount, :transaction_id)
|
46
|
-
|
47
|
-
response = AlphaCard.request(account, attributes_for_request)
|
48
|
-
[response.success?, response]
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
@@ -1,82 +0,0 @@
|
|
1
|
-
module AlphaCard
|
2
|
-
##
|
3
|
-
# Implementation of Alpha Card Services Sale transaction.
|
4
|
-
# Contains all the information about Customer Credit Card,
|
5
|
-
# such as CVV, number, expiration date, etc.
|
6
|
-
# Process the Alpha Card Services payment.
|
7
|
-
class Sale < AlphaCardObject
|
8
|
-
# Format: MMYY
|
9
|
-
attribute :card_expiration_date, String
|
10
|
-
attribute :card_number, String
|
11
|
-
attribute :amount, String
|
12
|
-
attribute :cvv, String
|
13
|
-
# Values: 'true' or 'false'
|
14
|
-
attribute :customer_receipt, String
|
15
|
-
|
16
|
-
##
|
17
|
-
# Payment type.
|
18
|
-
# Values: 'creditcard' or 'check'
|
19
|
-
attribute :payment, String, default: 'creditcard'
|
20
|
-
|
21
|
-
##
|
22
|
-
# Transaction type (default is 'sale')
|
23
|
-
#
|
24
|
-
# @attribute [r] type
|
25
|
-
attribute :type, String, default: 'sale', writer: :private
|
26
|
-
|
27
|
-
##
|
28
|
-
# Original AlphaCard transaction variables names
|
29
|
-
ORIGIN_TRANSACTION_VARIABLES = {
|
30
|
-
card_expiration_date: :ccexp,
|
31
|
-
card_number: :ccnumber
|
32
|
-
}.freeze
|
33
|
-
|
34
|
-
deprecate_old_variables!
|
35
|
-
|
36
|
-
##
|
37
|
-
# Creates the sale for the specified <code>AlphaCard::Order</code>
|
38
|
-
# with the <code>AlphaCard::Account</code> credentials.
|
39
|
-
#
|
40
|
-
# @param [AlphaCard::Order] params
|
41
|
-
# An <code>AlphaCard::Order</code> object.
|
42
|
-
# @param [AlphaCard::Account] account
|
43
|
-
# An <code>AlphaCard::Account</code> object.
|
44
|
-
#
|
45
|
-
# @return [Boolean]
|
46
|
-
# True if sale was created successfully.
|
47
|
-
# Raise an AlphaCardError exception if some error occurred.
|
48
|
-
#
|
49
|
-
# @raise [AlphaCard::InvalidObjectError]
|
50
|
-
# Exception if one of required attributes doesn't specified.
|
51
|
-
#
|
52
|
-
# @example
|
53
|
-
# account = AlphaCard::Account.new('demo', 'password')
|
54
|
-
# order = AlphaCard::Order.new(id: 1, description: 'Test order')
|
55
|
-
# sale = AlphaCard::Sale.new(card_expiration_date: '0117', card_number: '4111111111111111', amount: '5.00' )
|
56
|
-
# sale.create(order, account)
|
57
|
-
#
|
58
|
-
# #=> [true, #<AlphaCard::AlphaCardResponse:0x1a0fda ...>]
|
59
|
-
def create(order, account)
|
60
|
-
abort_if_attributes_blank!(:card_expiration_date, :card_number, :amount)
|
61
|
-
|
62
|
-
response = AlphaCard.request(account, params_for_sale(order))
|
63
|
-
[response.success?, response]
|
64
|
-
end
|
65
|
-
|
66
|
-
private
|
67
|
-
|
68
|
-
##
|
69
|
-
# Returns all the necessary attributes with it's original
|
70
|
-
# names that must be passed with Sale transaction.
|
71
|
-
#
|
72
|
-
# @param [AlphaCard::Order] order
|
73
|
-
# An <code>AlphaCard::Order</code> object.
|
74
|
-
#
|
75
|
-
# @return [Hash]
|
76
|
-
# Params of *self* object merged with params
|
77
|
-
# of another object (<code>AlphaCard::Order</code>)
|
78
|
-
def params_for_sale(order)
|
79
|
-
attributes_for_request.merge(order.attributes_for_request)
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|