alpha_card 0.3.0 → 0.4.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.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +4 -4
  3. data/CHANGELOG.md +21 -3
  4. data/Gemfile +0 -2
  5. data/Gemfile.lock +6 -24
  6. data/README.md +115 -85
  7. data/ROADMAP.md +13 -9
  8. data/alpha_card.gemspec +3 -4
  9. data/lib/alpha_card.rb +44 -72
  10. data/lib/alpha_card/account.rb +51 -0
  11. data/lib/alpha_card/attribute.rb +337 -0
  12. data/lib/alpha_card/data/credit_card_codes.yml +54 -54
  13. data/lib/alpha_card/errors/invalid_attribute_format.rb +14 -0
  14. data/lib/alpha_card/errors/invalid_attribute_type.rb +14 -0
  15. data/lib/alpha_card/errors/invalid_attribute_value.rb +14 -0
  16. data/lib/alpha_card/errors/{invalid_object_error.rb → validation_error.rb} +1 -1
  17. data/lib/alpha_card/{alpha_card_object.rb → resource.rb} +14 -28
  18. data/lib/alpha_card/resources/billing.rb +29 -0
  19. data/lib/alpha_card/{objects → resources}/order.rb +8 -8
  20. data/lib/alpha_card/{objects → resources}/shipping.rb +15 -13
  21. data/lib/alpha_card/{alpha_card_response.rb → response.rb} +21 -6
  22. data/lib/alpha_card/transaction.rb +30 -0
  23. data/lib/alpha_card/transactions/auth.rb +18 -0
  24. data/lib/alpha_card/transactions/capture.rb +32 -0
  25. data/lib/alpha_card/transactions/credit.rb +18 -0
  26. data/lib/alpha_card/{objects → transactions}/refund.rb +9 -2
  27. data/lib/alpha_card/transactions/sale.rb +91 -0
  28. data/lib/alpha_card/transactions/update.rb +61 -0
  29. data/lib/alpha_card/transactions/validate.rb +21 -0
  30. data/lib/alpha_card/transactions/void.rb +26 -0
  31. data/lib/alpha_card/version.rb +1 -1
  32. data/spec/alpha_card/attribute_spec.rb +126 -0
  33. data/spec/alpha_card/response_spec.rb +8 -4
  34. data/spec/alpha_card/transactions/auth_spec.rb +43 -0
  35. data/spec/alpha_card/{objects → transactions}/capture_spec.rb +11 -12
  36. data/spec/alpha_card/transactions/credit_spec.rb +102 -0
  37. data/spec/alpha_card/{objects → transactions}/refund_spec.rb +4 -4
  38. data/spec/alpha_card/{objects → transactions}/sale_spec.rb +42 -41
  39. data/spec/alpha_card/{objects → transactions}/update_spec.rb +4 -4
  40. data/spec/alpha_card/transactions/validate_spec.rb +100 -0
  41. data/spec/alpha_card/{objects → transactions}/void_spec.rb +11 -11
  42. data/spec/spec_helper.rb +4 -0
  43. metadata +36 -47
  44. data/lib/alpha_card/errors/alpha_card_error.rb +0 -29
  45. data/lib/alpha_card/objects/account.rb +0 -48
  46. data/lib/alpha_card/objects/billing.rb +0 -31
  47. data/lib/alpha_card/objects/capture.rb +0 -51
  48. data/lib/alpha_card/objects/sale.rb +0 -82
  49. data/lib/alpha_card/objects/update.rb +0 -54
  50. data/lib/alpha_card/objects/void.rb +0 -45
  51. data/spec/alpha_card/objects/account_spec.rb +0 -20
  52. data/spec/alpha_card/objects/deprecated_methods_spec.rb +0 -32
@@ -1,62 +1,62 @@
1
1
  "AP": 'Approved or completed successfully'
2
- "CALL AE": 'Refer to American Express.'
3
- "CALL CB": 'Refer to Carte Blanche.'
4
- "CALL DC": 'Refer to Diners Club.'
5
- "CALL DISCOVER": 'Refer to Discover.'
6
- "CALL JB": 'Refer to JBS.'
7
- "CALL ND": 'Call your Visa/MasterCard Voice Authorization Center.'
8
- "CALL TC": 'Refer to TeleCredit.'
9
- "CALL TK": 'Refer to TeleCheck.'
10
- "CALL WC": 'Refer to Worldcheck.'
11
- "CALL XXXXXXXXXX": 'Call indicated number.'
12
- "ISSUER UNAVAIL": 'NDC cannot contact issuing bank for authorization.'
13
- "INVLD MERCH ID": 'Invalid Merchant ID.'
14
- "PIC UP": 'Authorization declined.'
15
- "DECLINE": 'Authorization declined.'
16
- "REVERSED": 'Requested transaction reversal was successful.'
17
- "AP WITH ID": 'Approved with positive ID. NDC Host does not capture this transaction.'
2
+ "CALL AE": 'Refer to American Express'
3
+ "CALL CB": 'Refer to Carte Blanche'
4
+ "CALL DC": 'Refer to Diners Club'
5
+ "CALL DISCOVER": 'Refer to Discover'
6
+ "CALL JB": 'Refer to JBS'
7
+ "CALL ND": 'Call your Visa/MasterCard Voice Authorization Center'
8
+ "CALL TC": 'Refer to TeleCredit'
9
+ "CALL TK": 'Refer to TeleCheck'
10
+ "CALL WC": 'Refer to Worldcheck'
11
+ "CALL XXXXXXXXXX": 'Call indicated number'
12
+ "ISSUER UNAVAIL": 'NDC cannot contact issuing bank for authorization'
13
+ "INVLD MERCH ID": 'Invalid Merchant ID'
14
+ "PIC UP": 'Authorization declined'
15
+ "DECLINE": 'Authorization declined'
16
+ "REVERSED": 'Requested transaction reversal was successful'
17
+ "AP WITH ID": 'Approved with positive ID. NDC Host does not capture this transaction'
18
18
  "INVLD SERV ID": 'Service ID number is incorrect'
19
- "INVALID REQUEST": 'Administrative message contains a syntax error.'
20
- "INVLD TRAN CODE": 'Processing code entered is incorrect. Please refer to valid processing code.'
21
- "INVLD AMOUNT": 'Amount entered is not valid.'
19
+ "INVALID REQUEST": 'Administrative message contains a syntax error'
20
+ "INVLD TRAN CODE": 'Processing code entered is incorrect. Please refer to valid processing code'
21
+ "INVLD AMOUNT": 'Amount entered is not valid'
22
22
  "INVLD ACCT": 'Account number does not pass issuer’s edit checks'
23
- "INVLD CODE ACCT": 'Valid account number matched with a transaction code for a different card type.'
24
- "PLEASE RETRY": 'NDC’s user tables are set up incorrectly for this account.'
25
- "INVLD EMP DATE": 'NDC GATEWAY requests a retry.'
26
- "PIN INVALID": 'Expired date entered is incorrect.'
27
- "UNAUTH TRANS": 'Incorrect PIN entered.'
28
- "MAX PIN RETRIES": 'A transaction code was used for which you are not setup on the Merchant Master File.'
29
- "AP DUPE": 'Maximum PIN number entry attempts exceeded.'
30
- "IN ACCT MATCH": 'Transaction entered is a duplicate.'
31
- "INV AMT MATCH": 'The account number entered during a void or adjustment transaction does not match the account number stored in the NDC Host for that item.'
32
- "INV ITEM NUM": 'The item number entered for a void or adjustment transaction is incorrect.'
33
- "ITEM VOIDED": 'An adjustment or item review was attempted on a transaction previously voided or reversed.'
34
- "ITEM REVERSED": 'An adjustment or item review was attempted on a transaction previously voided or reversed.'
35
- "MUST BALANCE NOW": 'Terminal has not been balanced within time specified in the NDC Merchant Master File for this merchant.'
36
- "USE DUP THEN BAL": 'Terminal has not been balanced within time specified in the NDC Merchant Master File for this merchant, but merchant is set up to perform extra transactions before balancing.'
37
- "NO DUP FOUND": 'Override transaction is at tempted on a non-duplicated transaction.'
38
- "INVALID DATA": 'Format of the transaction is incorrect.'
39
- "NO TRANS FOUND": 'Reversal transaction is attempted on a transaction that is not in the open batch on the host.'
23
+ "INVLD CODE ACCT": 'Valid account number matched with a transaction code for a different card type'
24
+ "PLEASE RETRY": 'NDC’s user tables are set up incorrectly for this account'
25
+ "INVLD EMP DATE": 'NDC GATEWAY requests a retry'
26
+ "PIN INVALID": 'Expired date entered is incorrect'
27
+ "UNAUTH TRANS": 'Incorrect PIN entered'
28
+ "MAX PIN RETRIES": 'A transaction code was used for which you are not setup on the Merchant Master File'
29
+ "AP DUPE": 'Maximum PIN number entry attempts exceeded'
30
+ "IN ACCT MATCH": 'Transaction entered is a duplicate'
31
+ "INV AMT MATCH": 'The account number entered during a void or adjustment transaction does not match the account number stored in the NDC Host for that item'
32
+ "INV ITEM NUM": 'The item number entered for a void or adjustment transaction is incorrect'
33
+ "ITEM VOIDED": 'An adjustment or item review was attempted on a transaction previously voided or reversed'
34
+ "ITEM REVERSED": 'An adjustment or item review was attempted on a transaction previously voided or reversed'
35
+ "MUST BALANCE NOW": 'Terminal has not been balanced within time specified in the NDC Merchant Master File for this merchant'
36
+ "USE DUP THEN BAL": 'Terminal has not been balanced within time specified in the NDC Merchant Master File for this merchant, but merchant is set up to perform extra transactions before balancing'
37
+ "NO DUP FOUND": 'Override transaction is at tempted on a non-duplicated transaction'
38
+ "INVALID DATA": 'Format of the transaction is incorrect'
39
+ "NO TRANS FOUND": 'Reversal transaction is attempted on a transaction that is not in the open batch on the host'
40
40
  "AP NOT CAPTURED": 'Approved but not captured (applied to only credit card transactions).'
41
- "AP AUTH-ONLY": 'Approved but this EDC merchant is not set up to capture this card type (applies only to credit card transactions).'
42
- "INV BANK": 'Acquiring Bank ID entered is incorrect.'
43
- "TRAN TYPE INVLD": 'Transaction not supported by EFT network or EFT Group ID is incorrect.'
44
- "APPROVED": 'Merchant is not set up for debit on NDC Merchant Master File.'
41
+ "AP AUTH-ONLY": 'Approved but this EDC merchant is not set up to capture this card type (applies only to credit card transactions)'
42
+ "INV BANK": 'Acquiring Bank ID entered is incorrect'
43
+ "TRAN TYPE INVLD": 'Transaction not supported by EFT network or EFT Group ID is incorrect'
44
+ "APPROVED": 'Merchant is not set up for debit on NDC Merchant Master File'
45
45
  "DB UNAVAIL 02": 'NDC GATEWAY is down'
46
- "DB UNAVAIL 03": 'NDC GATEWAY Link ID timed out.'
47
- "DB UNAVAIL 04": 'NDC GATEWAY cannot contact EFT network or EFT Group ID is incorrect.'
48
- "UNAUTH USER": 'Merchant is not set up for debit on NDC Merchant Master File.'
49
- "INVALID CARD": 'Debit card not on issuer file.'
46
+ "DB UNAVAIL 03": 'NDC GATEWAY Link ID timed out'
47
+ "DB UNAVAIL 04": 'NDC GATEWAY cannot contact EFT network or EFT Group ID is incorrect'
48
+ "UNAUTH USER": 'Merchant is not set up for debit on NDC Merchant Master File'
49
+ "INVALID CARD": 'Debit card not on issuer file'
50
50
  "DB ISSUER UNAVAIL": 'EFT network cannot contact issuer'
51
- "INVALID POS CARD": 'Card is not eligible for POS.'
51
+ "INVALID POS CARD": 'Card is not eligible for POS'
52
52
  "ACCT TYPE INVLD": 'Type of account entered cannot be accessed (checking, savings, etc.)'
53
- "INVALID PREFIX": 'No sharing arrangement for this card.'
54
- "INVALID FIID NDC GATEWAY": 'Financial Institution ID not set up.'
55
- "VERIFY XXXXXXXXXX": 'Match on SCAN file. XXXXXXXXXX is routing/transit number on the negative file.'
56
- "INVALID LIC": 'The license or ID number entered during a check authorization transaction is incorrect.'
57
- "INVALID STATE CD": 'State code entered is incorrect.'
58
- "EDC UNAVAILABLE": 'EDC application down, try later.'
59
- "DB UNAVAIL 01": 'Problem at NDC routing transaction.'
60
- "SCAN UNAVAILABLE": 'SCAN application is down, try later.'
61
- "EXCEEDS MAX AMT": 'Exceeds withdrawal amount limit.'
53
+ "INVALID PREFIX": 'No sharing arrangement for this card'
54
+ "INVALID FIID NDC GATEWAY": 'Financial Institution ID not set up'
55
+ "VERIFY XXXXXXXXXX": 'Match on SCAN file. XXXXXXXXXX is routing/transit number on the negative file'
56
+ "INVALID LIC": 'The license or ID number entered during a check authorization transaction is incorrect'
57
+ "INVALID STATE CD": 'State code entered is incorrect'
58
+ "EDC UNAVAILABLE": 'EDC application down, try later'
59
+ "DB UNAVAIL 01": 'Problem at NDC routing transaction'
60
+ "SCAN UNAVAILABLE": 'SCAN application is down, try later'
61
+ "EXCEEDS MAX AMT": 'Exceeds withdrawal amount limit'
62
62
  "EXCEEDS MAX USES": 'Exceeds withdrawal frequency limit'
@@ -0,0 +1,14 @@
1
+ module AlphaCard
2
+ ##
3
+ # AlphaCard resource attributes format error
4
+ class InvalidAttributeFormat < StandardError
5
+ # Exception constructor. Returns an error with message about wrong
6
+ # attribute format.
7
+ #
8
+ # @param value [Object] current attribute value
9
+ # @param format [Regexp] required format
10
+ def initialize(value, format)
11
+ super("'#{value}' does not match the '#{format.inspect}' format")
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ module AlphaCard
2
+ ##
3
+ # AlphaCard resource attributes value error
4
+ class InvalidAttributeType < StandardError
5
+ # Exception constructor. Returns an error with message about
6
+ # wrong attribute value type.
7
+ #
8
+ # @param value [Object] current attribute value
9
+ # @param types [Array] possible attribute types
10
+ def initialize(value, types)
11
+ super("'#{value}' must be an instance of #{types.join(', ')}")
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ module AlphaCard
2
+ ##
3
+ # AlphaCard resource attributes value error
4
+ class InvalidAttributeValue < StandardError
5
+ # Exception constructor. Returns an error with message about wrong value
6
+ # and possible values.
7
+ #
8
+ # @param value [Object] current attribute value
9
+ # @param values [Array] possible attribute values
10
+ def initialize(value, values)
11
+ super("'#{value}' is invalid attribute value. Use one from the following: #{values.join(', ')}")
12
+ end
13
+ end
14
+ end
@@ -3,6 +3,6 @@ module AlphaCard
3
3
  # Exception class for invalid Alpha Card objects.
4
4
  # Raises when some of the object doesn't have all
5
5
  # the necessary attributes.
6
- class InvalidObjectError < StandardError
6
+ class ValidationError < StandardError
7
7
  end
8
8
  end
@@ -1,10 +1,9 @@
1
1
  module AlphaCard
2
2
  ##
3
- # Parent class for each Alpha Card Gateway object, such as
4
- # Order, Billing, Sale and others.
5
- class AlphaCardObject
3
+ # Alpha Card resource base class.
4
+ class Resource
6
5
  # Attributes DSL
7
- include Virtus.model(nullify_blank: true)
6
+ include AlphaCard::Attribute
8
7
 
9
8
  ##
10
9
  # Original AlphaCard transaction variables names
@@ -14,15 +13,16 @@ module AlphaCard
14
13
  # Returns only filled attributes with the original Alpha Card Services
15
14
  # transaction variables names.
16
15
  #
17
- # @param [Hash] attrs
16
+ # @param attrs [Hash]
18
17
  # Attributes that must be converted to AlphaCard request params/
19
18
  # Default value is <code>filled_attributes</code>.
20
19
  #
21
20
  # @example
22
21
  # order = AlphaCard::Order.new(id: '1', tax: nil, po_number: 'PO123')
23
- # order.send(:attributes_for_request)
22
+ # order.attributes_for_request
24
23
  #
25
24
  # #=> { orderid: '1', ponumber: 'PO123' }
25
+ #
26
26
  def attributes_for_request(attrs = filled_attributes)
27
27
  return attrs if self.class::ORIGIN_TRANSACTION_VARIABLES.empty?
28
28
 
@@ -31,22 +31,6 @@ module AlphaCard
31
31
  end
32
32
  end
33
33
 
34
- ##
35
- # Deprecate old transaction variables names.
36
- def self.deprecate_old_variables!
37
- self::ORIGIN_TRANSACTION_VARIABLES.each do |new_attr, old_attr|
38
- define_method "#{old_attr}=" do |value|
39
- warn "[DEPRECATION] #{old_attr}= is deprecated! Please, use #{new_attr}= instead"
40
- self[new_attr] = value
41
- end
42
-
43
- define_method old_attr do
44
- warn "[DEPRECATION] #{old_attr} is deprecated! Please, use #{new_attr} instead"
45
- self[new_attr]
46
- end
47
- end
48
- end
49
-
50
34
  protected
51
35
 
52
36
  ##
@@ -66,14 +50,16 @@ module AlphaCard
66
50
  end
67
51
 
68
52
  ##
69
- # Validate passed attributes for presence. Raises an exception
53
+ # Validate required attributes to be filled. Raises an exception
70
54
  # if one of the attribute is not specified.
71
55
  #
72
- # @param [Array] attributes
73
- # array of attributes to check
74
- def abort_if_attributes_blank!(*attributes)
75
- attributes.each do |attr|
76
- raise InvalidObjectError, "#{attr} must be present!" if self[attr].nil? || self[attr].empty?
56
+ # @raise [AlphaCard::InvalidObjectError] error if required attributes not set
57
+ #
58
+ def validate_required_attributes!
59
+ unless required_attributes?
60
+ blank_attribute = required_attributes.detect { |attr| self[attr].nil? || self[attr].empty? }
61
+
62
+ raise ValidationError, "#{blank_attribute} can't be blank"
77
63
  end
78
64
  end
79
65
  end
@@ -0,0 +1,29 @@
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 < Resource
6
+ attribute :first_name, type: String
7
+ attribute :last_name, type: String
8
+ attribute :email, type: String
9
+ attribute :phone, type: String
10
+ attribute :company, type: String
11
+ attribute :address_1, type: String
12
+ attribute :address_2, type: String
13
+ attribute :city, type: String
14
+ attribute :state, type: String, format: /\A[A-Za-z]{2}\z/.freeze
15
+ attribute :zip, type: String
16
+ attribute :country, type: String, format: /\A[A-Za-z]{2}\z/.freeze
17
+ attribute :fax, type: String
18
+ attribute :website, type: 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
+ end
29
+ end
@@ -2,16 +2,16 @@ module AlphaCard
2
2
  ##
3
3
  # Implementation of Alpha Card Services Order object.
4
4
  # Contains all the information about order (id, description, etc).
5
- class Order < AlphaCardObject
6
- attribute :id, String
7
- attribute :description, String
8
- attribute :po_number, String
9
- attribute :tax, String
5
+ class Order < Resource
6
+ attribute :id
7
+ attribute :description, type: String
8
+ attribute :po_number, type: String
9
+ attribute :tax, type: String
10
10
  # Format: xxx.xxx.xxx.xxx
11
- attribute :ip_address, String
11
+ attribute :ip_address, format: /\A(?:[0-9]{1,3}\.){3}[0-9]{1,3}\z/.freeze
12
12
 
13
- attribute :billing, AlphaCard::Billing
14
- attribute :shipping, AlphaCard::Shipping
13
+ attribute :billing, type: AlphaCard::Billing
14
+ attribute :shipping, type: AlphaCard::Shipping
15
15
 
16
16
  ##
17
17
  # Original AlphaCard transaction variables names
@@ -2,17 +2,19 @@ module AlphaCard
2
2
  ##
3
3
  # Implementation of Alpha Card Services order shipping information.
4
4
  # Contains all the shipping information (address, city, zip, etc).
5
- class Shipping < AlphaCardObject
6
- attribute :first_name, String
7
- attribute :last_name, String
8
- attribute :company, String
9
- attribute :address_1, String
10
- attribute :address_2, String
11
- attribute :city, String
12
- attribute :state, String
13
- attribute :zip_code, String
14
- attribute :country, String
15
- attribute :email, String
5
+ class Shipping < Resource
6
+ attribute :first_name, type: String
7
+ attribute :last_name, type: String
8
+ attribute :company, type: String
9
+ attribute :address_1, type: String
10
+ attribute :address_2, type: String
11
+ attribute :city, type: String
12
+ # Format: 'CC'
13
+ attribute :state, type: String, format: /\A[A-Za-z]{2}\z/.freeze
14
+ attribute :zip_code, type: String
15
+ # Format: 'CC'
16
+ attribute :country, type: String, format: /\A[A-Za-z]{2}\z/.freeze
17
+ attribute :email, type: String
16
18
 
17
19
  ##
18
20
  # Original AlphaCard transaction variables names
@@ -23,7 +25,7 @@ module AlphaCard
23
25
  address_2: :address2
24
26
  }.freeze
25
27
 
26
- deprecate_old_variables!
28
+ protected
27
29
 
28
30
  ##
29
31
  # Overloaded <code>filled_attributes</code> method from
@@ -35,7 +37,7 @@ module AlphaCard
35
37
  # Only filled attributes of Shipping resource with "shipping_" prefix.
36
38
  #
37
39
  # @example
38
- # shipping = AlphaCard::Shipping.new(firstname: 'John', state: 'NY')
40
+ # shipping = AlphaCard::Shipping.new(first_name: 'John', state: 'NY')
39
41
  # shipping.filled_attributes
40
42
  #
41
43
  # #=> { shipping_firstname: 'John', shipping_state: 'NY' }
@@ -3,7 +3,7 @@ module AlphaCard
3
3
  # Implementation of Alpha Card Services response.
4
4
  # Contains all the data, that Alpha Card Gateway
5
5
  # returned for the request.
6
- class AlphaCardResponse
6
+ class Response
7
7
  # Alpha Card Gateway response as a <code>Hash</code>.
8
8
  # @attr_reader [Hash] data
9
9
  attr_reader :data
@@ -25,17 +25,17 @@ module AlphaCard
25
25
  RESPONSE_MESSAGES = YAML.load_file(File.expand_path('../data/response_messages.yml', __FILE__)).freeze
26
26
 
27
27
  ##
28
- # AlphaCardResponse constructor.
28
+ # Alpha Card Response constructor.
29
29
  #
30
- # @param [String] response_body
30
+ # @param response_body [String]
31
31
  # Alpha Card Gateway response body text
32
32
  #
33
- # @return [AlphaCardResponse] AlphaCardResponse object
33
+ # @return [Response] Alpha Card Response object
34
34
  #
35
35
  # @example
36
- # AlphaCard::AlphaCardResponse.new('response=1&responsetext=Test')
36
+ # AlphaCard::Response.new('response=1&responsetext=Test')
37
37
  #
38
- # #=> #<AlphaCard::AlphaCardResponse:0x00000003f2b568 @data={"response"=>"1", "responsetext"=>"Test"}>
38
+ # #=> #<AlphaCard::Response:0x00000003f2b568 @data={"response"=>"1", "responsetext"=>"Test"}>
39
39
  def initialize(response_body)
40
40
  @data = Rack::Utils.parse_query(response_body)
41
41
  end
@@ -130,6 +130,21 @@ module AlphaCard
130
130
  @data['authcode']
131
131
  end
132
132
 
133
+ # Credit Card Authorization Message based on returned code in accordance with
134
+ # the Global Payment Systems Credit Card Authorization Codes (codes.yml).
135
+ #
136
+ # @return [String] auth message
137
+ #
138
+ # @example
139
+ #
140
+ # response = AlphaCardResponse.new("response_text=AP")
141
+ # response.credit_card_auth_message
142
+ #
143
+ # #=> 'Approved or completed successfully'
144
+ def credit_card_auth_message
145
+ AlphaCard::CREDIT_CARD_CODES[text]
146
+ end
147
+
133
148
  ##
134
149
  # Indicate the state of the request to the
135
150
  # Alpha Card Gateway. Returns <i>true</i> if
@@ -0,0 +1,30 @@
1
+ module AlphaCard
2
+ ##
3
+ # Base Alpha Card transaction object.
4
+ class Transaction < Resource
5
+ ##
6
+ # Creates transaction.
7
+ #
8
+ # @param credentials [Hash]
9
+ # Alpha Card merchant account credentials.
10
+ #
11
+ # @return [AlphaCard::Response]
12
+ # AlphaCard Gateway response with all the information about transaction.
13
+ #
14
+ # @raise [AlphaCard::InvalidObjectError]
15
+ # Exception if one of required attributes doesn't specified.
16
+ #
17
+ # @example
18
+ # void = AlphaCard::Void.new(transaction_id: '981562')
19
+ # void.create
20
+ #
21
+ # #=> #<AlphaCard::Response:0x1a0fda ...>
22
+ def process(credentials = Account.credentials)
23
+ validate_required_attributes!
24
+
25
+ AlphaCard.request(attributes_for_request, credentials)
26
+ end
27
+
28
+ alias_method :create, :process
29
+ end
30
+ end
@@ -0,0 +1,18 @@
1
+ module AlphaCard
2
+ ##
3
+ # Implementation of Alpha Card Services Authorization transaction.
4
+ #
5
+ # @example
6
+ # auth = AlphaCard::Auth.new(card_expiration_date: '0117', card_number: '4111111111111111', amount: '1.00')
7
+ # auth.create(order)
8
+ #
9
+ # #=> #<AlphaCard::Response:0x1a0fda ...>
10
+ #
11
+ class Auth < Sale
12
+ ##
13
+ # Transaction type (default is 'auth')
14
+ #
15
+ # @attribute [r] type
16
+ attribute :type, default: 'auth', writable: false
17
+ end
18
+ end