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
@@ -3,18 +3,29 @@ module AlphaCard
|
|
3
3
|
# Implementation of Alpha Card Services order billing information.
|
4
4
|
# Contains all the billing information (customer name, email, email, etc).
|
5
5
|
class Billing < AlphaCardObject
|
6
|
-
attribute :
|
7
|
-
attribute :
|
6
|
+
attribute :first_name, String
|
7
|
+
attribute :last_name, String
|
8
8
|
attribute :email, String
|
9
9
|
attribute :phone, String
|
10
10
|
attribute :company, String
|
11
|
-
attribute :
|
12
|
-
attribute :
|
11
|
+
attribute :address_1, String
|
12
|
+
attribute :address_2, String
|
13
13
|
attribute :city, String
|
14
14
|
attribute :state, String
|
15
15
|
attribute :zip, String
|
16
16
|
attribute :country, String
|
17
17
|
attribute :fax, String
|
18
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!
|
19
30
|
end
|
20
31
|
end
|
@@ -0,0 +1,51 @@
|
|
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
|
@@ -3,13 +3,50 @@ module AlphaCard
|
|
3
3
|
# Implementation of Alpha Card Services Order object.
|
4
4
|
# Contains all the information about order (id, description, etc).
|
5
5
|
class Order < AlphaCardObject
|
6
|
-
attribute :
|
7
|
-
attribute :
|
8
|
-
attribute :
|
6
|
+
attribute :id, String
|
7
|
+
attribute :description, String
|
8
|
+
attribute :po_number, String
|
9
9
|
attribute :tax, String
|
10
|
-
|
10
|
+
# Format: xxx.xxx.xxx.xxx
|
11
|
+
attribute :ip_address, String
|
11
12
|
|
12
13
|
attribute :billing, AlphaCard::Billing
|
13
14
|
attribute :shipping, AlphaCard::Shipping
|
15
|
+
|
16
|
+
##
|
17
|
+
# Original AlphaCard transaction variables names
|
18
|
+
ORIGIN_TRANSACTION_VARIABLES = {
|
19
|
+
id: :orderid,
|
20
|
+
description: :orderdescription,
|
21
|
+
po_number: :ponumber,
|
22
|
+
ip_address: :ipaddress
|
23
|
+
}.freeze
|
24
|
+
|
25
|
+
##
|
26
|
+
# Overloaded method to return all the attributes from the
|
27
|
+
# sale + billing + shipping objects.
|
28
|
+
#
|
29
|
+
# @return [Hash]
|
30
|
+
# Filled attributes with the original Alpha Card Services
|
31
|
+
# transaction variables names.
|
32
|
+
#
|
33
|
+
# @example
|
34
|
+
# billing = AlphaCard::Billing.new(email: 'test@example.com')
|
35
|
+
# shipping = AlphaCard::Shipping.new(first_name: 'John', last_name: 'Doe')
|
36
|
+
# order = AlphaCard::Order.new(id: '1', billing: billing, shipping: shipping)
|
37
|
+
# order.attributes_for_request
|
38
|
+
#
|
39
|
+
# #=> { orderid: '1', email: 'test@example.com', shipping_first_name: 'John', shipping_last_name: 'Doe' }
|
40
|
+
def attributes_for_request(*)
|
41
|
+
attributes = filled_attributes.dup
|
42
|
+
|
43
|
+
billing = attributes.delete(:billing)
|
44
|
+
attributes.merge!(billing.attributes_for_request) if billing
|
45
|
+
|
46
|
+
shipping = attributes.delete(:shipping)
|
47
|
+
attributes.merge!(shipping.attributes_for_request) if shipping
|
48
|
+
|
49
|
+
super(attributes)
|
50
|
+
end
|
14
51
|
end
|
15
52
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module AlphaCard
|
2
|
+
##
|
3
|
+
# Implementation of Alpha Card Services Refund transaction.
|
4
|
+
class Refund < Void
|
5
|
+
# Format: xx.xx
|
6
|
+
attribute :amount, String
|
7
|
+
|
8
|
+
##
|
9
|
+
# Transaction type (default is 'refund')
|
10
|
+
#
|
11
|
+
# @attribute [r] type
|
12
|
+
attribute :type, String, default: 'refund', writer: :private
|
13
|
+
|
14
|
+
##
|
15
|
+
# Original AlphaCard transaction variables names
|
16
|
+
ORIGIN_TRANSACTION_VARIABLES = {
|
17
|
+
transaction_id: :transactionid
|
18
|
+
}.freeze
|
19
|
+
end
|
20
|
+
end
|
@@ -1,21 +1,38 @@
|
|
1
1
|
module AlphaCard
|
2
2
|
##
|
3
|
-
# Implementation of Alpha Card Services Sale
|
3
|
+
# Implementation of Alpha Card Services Sale transaction.
|
4
4
|
# Contains all the information about Customer Credit Card,
|
5
5
|
# such as CVV, number, expiration date, etc.
|
6
6
|
# Process the Alpha Card Services payment.
|
7
7
|
class Sale < AlphaCardObject
|
8
|
-
|
9
|
-
attribute :
|
8
|
+
# Format: MMYY
|
9
|
+
attribute :card_expiration_date, String
|
10
|
+
attribute :card_number, String
|
10
11
|
attribute :amount, String
|
11
12
|
attribute :cvv, String
|
13
|
+
# Values: 'true' or 'false'
|
14
|
+
attribute :customer_receipt, String
|
12
15
|
|
13
16
|
##
|
14
|
-
#
|
17
|
+
# Payment type.
|
18
|
+
# Values: 'creditcard' or 'check'
|
19
|
+
attribute :payment, String, default: 'creditcard'
|
20
|
+
|
21
|
+
##
|
22
|
+
# Transaction type (default is 'sale')
|
15
23
|
#
|
16
24
|
# @attribute [r] type
|
17
25
|
attribute :type, String, default: 'sale', writer: :private
|
18
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
|
+
|
19
36
|
##
|
20
37
|
# Creates the sale for the specified <code>AlphaCard::Order</code>
|
21
38
|
# with the <code>AlphaCard::Account</code> credentials.
|
@@ -29,29 +46,28 @@ module AlphaCard
|
|
29
46
|
# True if sale was created successfully.
|
30
47
|
# Raise an AlphaCardError exception if some error occurred.
|
31
48
|
#
|
32
|
-
# @raise [
|
49
|
+
# @raise [AlphaCard::InvalidObjectError]
|
33
50
|
# Exception if one of required attributes doesn't specified.
|
34
51
|
#
|
35
52
|
# @example
|
36
53
|
# account = AlphaCard::Account.new('demo', 'password')
|
37
|
-
# order = AlphaCard::Order.new(
|
38
|
-
# sale = AlphaCard::Sale.new(
|
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' )
|
39
56
|
# sale.create(order, account)
|
40
57
|
#
|
41
|
-
# #=> true
|
58
|
+
# #=> [true, #<AlphaCard::AlphaCardResponse:0x1a0fda ...>]
|
42
59
|
def create(order, account)
|
43
|
-
|
44
|
-
fail ArgumentError, "No #{attr} information provided!" if self[attr].nil? || self[attr].empty?
|
45
|
-
end
|
60
|
+
abort_if_attributes_blank!(:card_expiration_date, :card_number, :amount)
|
46
61
|
|
47
|
-
AlphaCard.request(account,
|
62
|
+
response = AlphaCard.request(account, params_for_sale(order))
|
63
|
+
[response.success?, response]
|
48
64
|
end
|
49
65
|
|
50
66
|
private
|
51
67
|
|
52
68
|
##
|
53
|
-
#
|
54
|
-
#
|
69
|
+
# Returns all the necessary attributes with it's original
|
70
|
+
# names that must be passed with Sale transaction.
|
55
71
|
#
|
56
72
|
# @param [AlphaCard::Order] order
|
57
73
|
# An <code>AlphaCard::Order</code> object.
|
@@ -59,14 +75,8 @@ module AlphaCard
|
|
59
75
|
# @return [Hash]
|
60
76
|
# Params of *self* object merged with params
|
61
77
|
# of another object (<code>AlphaCard::Order</code>)
|
62
|
-
def
|
63
|
-
|
64
|
-
|
65
|
-
[order, order.billing, order.shipping].compact.each do |obj|
|
66
|
-
params.merge!(obj ? obj.filled_attributes : {})
|
67
|
-
end
|
68
|
-
|
69
|
-
params
|
78
|
+
def params_for_sale(order)
|
79
|
+
attributes_for_request.merge(order.attributes_for_request)
|
70
80
|
end
|
71
81
|
end
|
72
82
|
end
|
@@ -3,8 +3,8 @@ module AlphaCard
|
|
3
3
|
# Implementation of Alpha Card Services order shipping information.
|
4
4
|
# Contains all the shipping information (address, city, zip, etc).
|
5
5
|
class Shipping < AlphaCardObject
|
6
|
-
attribute :
|
7
|
-
attribute :
|
6
|
+
attribute :first_name, String
|
7
|
+
attribute :last_name, String
|
8
8
|
attribute :company, String
|
9
9
|
attribute :address_1, String
|
10
10
|
attribute :address_2, String
|
@@ -14,6 +14,17 @@ module AlphaCard
|
|
14
14
|
attribute :country, String
|
15
15
|
attribute :email, String
|
16
16
|
|
17
|
+
##
|
18
|
+
# Original AlphaCard transaction variables names
|
19
|
+
ORIGIN_TRANSACTION_VARIABLES = {
|
20
|
+
first_name: :firstname,
|
21
|
+
last_name: :lastname,
|
22
|
+
address_1: :address1,
|
23
|
+
address_2: :address2
|
24
|
+
}.freeze
|
25
|
+
|
26
|
+
deprecate_old_variables!
|
27
|
+
|
17
28
|
##
|
18
29
|
# Overloaded <code>filled_attributes</code> method from
|
19
30
|
# <code>AlphaCard::AlphaCardObject</code>. All attribute names of
|
@@ -24,10 +35,10 @@ module AlphaCard
|
|
24
35
|
# Only filled attributes of Shipping resource with "shipping_" prefix.
|
25
36
|
#
|
26
37
|
# @example
|
27
|
-
# shipping = AlphaCard::Shipping.new(
|
38
|
+
# shipping = AlphaCard::Shipping.new(firstname: 'John', state: 'NY')
|
28
39
|
# shipping.filled_attributes
|
29
40
|
#
|
30
|
-
# #=> {shipping_firstname: 'John', shipping_state: 'NY'}
|
41
|
+
# #=> { shipping_firstname: 'John', shipping_state: 'NY' }
|
31
42
|
def filled_attributes
|
32
43
|
Hash[super.map { |k, v| ["shipping_#{k}".to_sym, v] }]
|
33
44
|
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module AlphaCard
|
2
|
+
##
|
3
|
+
# Implementation of Alpha Card Services Update transaction.
|
4
|
+
# Transaction updates can be used to update previous transactions
|
5
|
+
# with specific order information, such as a tracking number
|
6
|
+
# and shipping carrier.
|
7
|
+
class Update < Void
|
8
|
+
# Total shipping amount.
|
9
|
+
# Format: x.xx
|
10
|
+
attribute :shipping, String
|
11
|
+
attribute :shipping_postal, String
|
12
|
+
attribute :ship_from_postal, String
|
13
|
+
attribute :shipping_country, String
|
14
|
+
# Values: 'ups', 'fedex', 'dhl', or 'usps'
|
15
|
+
attribute :shipping_carrier, String
|
16
|
+
# Format: YYYYMMDD
|
17
|
+
attribute :shipping_date, String
|
18
|
+
attribute :order_description, String
|
19
|
+
attribute :order_date, String
|
20
|
+
# Values: 'true' or 'false'
|
21
|
+
attribute :customer_receipt, String
|
22
|
+
attribute :po_number, String
|
23
|
+
attribute :summary_commodity_code, String
|
24
|
+
# Format: x.xx
|
25
|
+
attribute :duty_amount, String
|
26
|
+
# Format: x.xx
|
27
|
+
attribute :discount_amount, String
|
28
|
+
# Format: x.xx
|
29
|
+
attribute :tax, String
|
30
|
+
# Format: x.xx
|
31
|
+
attribute :national_tax_amount, String
|
32
|
+
# Format: x.xx
|
33
|
+
attribute :alternate_tax_amount, String
|
34
|
+
attribute :alternate_tax_id, String
|
35
|
+
attribute :vat_tax_amount, String
|
36
|
+
attribute :vat_tax_rate, String
|
37
|
+
attribute :vat_invoice_reference_number, String
|
38
|
+
attribute :customer_vat_registration, String
|
39
|
+
attribute :merchant_vat_registration, String
|
40
|
+
|
41
|
+
##
|
42
|
+
# Transaction type (default is 'update')
|
43
|
+
#
|
44
|
+
# @attribute [r] type
|
45
|
+
attribute :type, String, default: 'update', writer: :private
|
46
|
+
|
47
|
+
##
|
48
|
+
# Original AlphaCard transaction variables names
|
49
|
+
ORIGIN_TRANSACTION_VARIABLES = {
|
50
|
+
transaction_id: :transactionid,
|
51
|
+
po_number: :ponumber
|
52
|
+
}.freeze
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module AlphaCard
|
2
|
+
##
|
3
|
+
# Implementation of Alpha Card Services Void transaction.
|
4
|
+
class Void < AlphaCardObject
|
5
|
+
attribute :transaction_id, String
|
6
|
+
|
7
|
+
##
|
8
|
+
# Transaction type (default is 'void')
|
9
|
+
#
|
10
|
+
# @attribute [r] type
|
11
|
+
attribute :type, String, default: 'void', writer: :private
|
12
|
+
|
13
|
+
##
|
14
|
+
# Original AlphaCard transaction variables names
|
15
|
+
ORIGIN_TRANSACTION_VARIABLES = {
|
16
|
+
transaction_id: :transactionid
|
17
|
+
}.freeze
|
18
|
+
|
19
|
+
##
|
20
|
+
# Creates void transaction with the <code>AlphaCard::Account</code> credentials.
|
21
|
+
#
|
22
|
+
# @param [AlphaCard::Account] account
|
23
|
+
# An <code>AlphaCard::Account</code> object.
|
24
|
+
#
|
25
|
+
# @return [Boolean]
|
26
|
+
# True if transaction was created successfully.
|
27
|
+
# Raise an AlphaCardError exception if some error occurred.
|
28
|
+
#
|
29
|
+
# @raise [AlphaCard::InvalidObjectError]
|
30
|
+
# Exception if one of required attributes doesn't specified.
|
31
|
+
#
|
32
|
+
# @example
|
33
|
+
# account = AlphaCard::Account.new('demo', 'password')
|
34
|
+
# void = AlphaCard::Void.new(transaction_id: '981562')
|
35
|
+
# void.create(account)
|
36
|
+
#
|
37
|
+
# #=> [true, #<AlphaCard::AlphaCardResponse:0x1a0fda ...>]
|
38
|
+
def create(account)
|
39
|
+
abort_if_attributes_blank!(:transaction_id)
|
40
|
+
|
41
|
+
response = AlphaCard.request(account, attributes_for_request)
|
42
|
+
[response.success?, response]
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
data/lib/alpha_card/version.rb
CHANGED
@@ -1,5 +1,21 @@
|
|
1
1
|
module AlphaCard
|
2
2
|
##
|
3
|
-
#
|
4
|
-
|
3
|
+
# AlphaCard gem version.
|
4
|
+
def self.gem_version
|
5
|
+
Gem::Version.new VERSION::STRING
|
6
|
+
end
|
7
|
+
|
8
|
+
##
|
9
|
+
# AlphaCard semantic versioning
|
10
|
+
module VERSION
|
11
|
+
# Major version number
|
12
|
+
MAJOR = 0
|
13
|
+
# Minor version number
|
14
|
+
MINOR = 3
|
15
|
+
# Smallest version number
|
16
|
+
TINY = 0
|
17
|
+
|
18
|
+
# Full version number
|
19
|
+
STRING = [MAJOR, MINOR, TINY].compact.join('.')
|
20
|
+
end
|
5
21
|
end
|
@@ -0,0 +1,20 @@
|
|
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
|
+
describe '#filled?' do
|
8
|
+
context 'with filled credentials' do
|
9
|
+
it 'returns true' do
|
10
|
+
expect(valid_account.filled?).to be_truthy
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
context 'with blank credentials' do
|
15
|
+
it 'returns false' do
|
16
|
+
expect(invalid_account.filled?).to be_falsey
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|