authorizenet 1.9.4 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. checksums.yaml +5 -5
  2. data/lib/app/helpers/authorize_net_helper.rb +2 -3
  3. data/lib/authorize_net.rb +11 -56
  4. data/lib/authorize_net/api/LogHelper.rb +97 -0
  5. data/lib/authorize_net/api/SensitiveDataFilter.rb +92 -0
  6. data/lib/authorize_net/api/api_transaction.rb +95 -90
  7. data/lib/authorize_net/api/constants.yml +1 -1
  8. data/lib/authorize_net/api/schema.rb +1353 -994
  9. data/lib/authorize_net/api/transaction.rb +104 -102
  10. data/lib/authorize_net/authorize_net.rb +20 -27
  11. data/lib/authorize_net/response.rb +9 -15
  12. data/lib/authorize_net/transaction.rb +18 -26
  13. data/lib/authorize_net/xml_response.rb +36 -54
  14. data/lib/authorize_net/xml_transaction.rb +115 -134
  15. metadata +59 -73
  16. data/lib/authorize_net/addresses/address.rb +0 -29
  17. data/lib/authorize_net/addresses/shipping_address.rb +0 -26
  18. data/lib/authorize_net/aim/response.rb +0 -131
  19. data/lib/authorize_net/aim/transaction.rb +0 -190
  20. data/lib/authorize_net/arb/fields.rb +0 -24
  21. data/lib/authorize_net/arb/paging.rb +0 -33
  22. data/lib/authorize_net/arb/response.rb +0 -34
  23. data/lib/authorize_net/arb/sorting.rb +0 -43
  24. data/lib/authorize_net/arb/subscription.rb +0 -72
  25. data/lib/authorize_net/arb/subscription_detail.rb +0 -14
  26. data/lib/authorize_net/arb/subscription_list_response.rb +0 -43
  27. data/lib/authorize_net/arb/transaction.rb +0 -177
  28. data/lib/authorize_net/cim/customer_profile.rb +0 -19
  29. data/lib/authorize_net/cim/payment_profile.rb +0 -37
  30. data/lib/authorize_net/cim/response.rb +0 -116
  31. data/lib/authorize_net/cim/transaction.rb +0 -727
  32. data/lib/authorize_net/customer.rb +0 -27
  33. data/lib/authorize_net/email_receipt.rb +0 -24
  34. data/lib/authorize_net/fields.rb +0 -779
  35. data/lib/authorize_net/key_value_response.rb +0 -117
  36. data/lib/authorize_net/key_value_transaction.rb +0 -291
  37. data/lib/authorize_net/line_item.rb +0 -25
  38. data/lib/authorize_net/order.rb +0 -42
  39. data/lib/authorize_net/payment_methods/credit_card.rb +0 -62
  40. data/lib/authorize_net/payment_methods/echeck.rb +0 -72
  41. data/lib/authorize_net/reporting/batch.rb +0 -19
  42. data/lib/authorize_net/reporting/batch_statistics.rb +0 -19
  43. data/lib/authorize_net/reporting/fds_filter.rb +0 -11
  44. data/lib/authorize_net/reporting/response.rb +0 -163
  45. data/lib/authorize_net/reporting/returned_item.rb +0 -46
  46. data/lib/authorize_net/reporting/transaction.rb +0 -133
  47. data/lib/authorize_net/reporting/transaction_details.rb +0 -25
  48. data/lib/authorize_net/sim/hosted_payment_form.rb +0 -38
  49. data/lib/authorize_net/sim/hosted_receipt_page.rb +0 -37
  50. data/lib/authorize_net/sim/response.rb +0 -142
  51. data/lib/authorize_net/sim/transaction.rb +0 -138
  52. data/lib/generators/authorize_net/direct_post/direct_post_generator.rb +0 -53
  53. data/lib/generators/authorize_net/direct_post/templates/README-AuthorizeNet +0 -49
  54. data/lib/generators/authorize_net/direct_post/templates/config.yml.erb +0 -8
  55. data/lib/generators/authorize_net/direct_post/templates/config.yml.rails3.erb +0 -8
  56. data/lib/generators/authorize_net/direct_post/templates/controller.rb.erb +0 -31
  57. data/lib/generators/authorize_net/direct_post/templates/initializer.rb +0 -4
  58. data/lib/generators/authorize_net/direct_post/templates/layout.erb +0 -18
  59. data/lib/generators/authorize_net/direct_post/templates/payment.erb +0 -10
  60. data/lib/generators/authorize_net/direct_post/templates/payment.rails3.erb +0 -10
  61. data/lib/generators/authorize_net/direct_post/templates/receipt.erb +0 -1
  62. data/lib/generators/authorize_net/direct_post/templates/relay_response.erb +0 -1
  63. data/lib/generators/authorize_net/sim/sim_generator.rb +0 -47
  64. data/lib/generators/authorize_net/sim/templates/README-AuthorizeNet +0 -52
  65. data/lib/generators/authorize_net/sim/templates/config.yml.erb +0 -8
  66. data/lib/generators/authorize_net/sim/templates/config.yml.rails3.erb +0 -8
  67. data/lib/generators/authorize_net/sim/templates/controller.rb.erb +0 -21
  68. data/lib/generators/authorize_net/sim/templates/initializer.rb +0 -4
  69. data/lib/generators/authorize_net/sim/templates/layout.erb +0 -18
  70. data/lib/generators/authorize_net/sim/templates/payment.erb +0 -6
  71. data/lib/generators/authorize_net/sim/templates/payment.rails3.erb +0 -6
  72. data/lib/generators/authorize_net/sim/templates/thank_you.erb +0 -1
  73. data/lib/generators/generator_extensions.rb +0 -75
@@ -1,29 +1,23 @@
1
1
  module AuthorizeNet
2
-
3
- # The core, API agnostic response class. You shouldn't instantiate
4
- # this one. Instead you should use AuthorizeNet::AIM::Response,
5
- # AuthorizeNet::ARB::Response or AuthorizeNet::SIM::Response.
2
+ # The core, API agnostic response class.
3
+ # You shouldn't instantiate this one.
6
4
  class Response
7
-
8
5
  include AuthorizeNet::TypeConversions
9
-
6
+
10
7
  # Fields to convert to/from booleans.
11
8
  @@boolean_fields = []
12
9
 
13
10
  # Fields to convert to/from BigDecimal.
14
11
  @@decimal_fields = []
15
-
16
- # DO NOT USE. Instantiate AuthorizeNet::AIM::Response or
17
- # AuthorizeNet::SIM::Response instead.
18
- def initialize()
19
- raise "#{self.class.to_s} should not be instantiated directly."
12
+
13
+ # DO NOT USE.
14
+ def initialize
15
+ raise "#{self.class} should not be instantiated directly."
20
16
  end
21
-
17
+
22
18
  # Check to see if the response indicated success.
23
19
  def success?
24
20
  false
25
21
  end
26
-
27
22
  end
28
-
29
- end
23
+ end
@@ -1,24 +1,20 @@
1
1
  module AuthorizeNet
2
-
3
- # The core, API agnostic transaction class. You shouldn't instantiate this one.
4
- # Instead you should use AuthorizeNet::AIM::Transaction,
5
- # AuthorizeNet::SIM::Transaction or AuthorizeNet::ARB::Transaction.
2
+ # The core, API agnostic transaction class.
3
+ # You shouldn't instantiate this one.
6
4
  class Transaction
7
-
8
5
  include AuthorizeNet::TypeConversions
9
-
6
+
10
7
  # Fields to convert to/from booleans.
11
8
  @@boolean_fields = []
12
-
9
+
13
10
  # Fields to convert to/from BigDecimal.
14
11
  @@decimal_fields = []
15
-
16
- # DO NOT USE. Instantiate AuthorizeNet::AIM::Transaction,
17
- # AuthorizeNet::SIM::Transaction or AuthorizeNet::ARB::Transaction instead.
18
- def initialize()
12
+
13
+ # DO NOT USE.
14
+ def initialize
19
15
  @fields ||= {}
20
16
  end
21
-
17
+
22
18
  # Sets arbitrary API fields, overwriting existing values if they exist.
23
19
  # Takes a hash of key/value pairs, where the keys are the field names
24
20
  # without the "x_" prefix. You can set a field to Nil to unset it. If the
@@ -29,44 +25,40 @@ module AuthorizeNet
29
25
  # each value in the array.
30
26
  def set_fields(fields = {})
31
27
  @fields.merge!(fields)
32
- @fields.reject! {|k, v| v.nil?}
28
+ @fields.reject! { |_k, v| v.nil? }
33
29
  @fields
34
30
  end
35
-
31
+
36
32
  # Returns the current hash of API fields.
37
- def fields
38
- @fields
39
- end
40
-
33
+ attr_reader :fields
34
+
41
35
  # Takes an instance of AuthorizeNet::Address and adds it to the transaction.
42
36
  def set_address(address)
43
37
  @fields.merge!(address.to_hash)
44
38
  end
45
-
39
+
46
40
  # Takes an instance of AuthorizeNet::ShippingAddress and adds it to the
47
41
  # transaction.
48
42
  def set_shipping_address(address)
49
43
  @fields.merge!(address.to_hash)
50
44
  end
51
-
45
+
52
46
  # Takes an instance of AuthorizeNet::Customer and adds it to the transaction.
53
47
  def set_customer(customer)
54
48
  @fields.merge!(customer.to_hash)
55
49
  end
56
-
50
+
57
51
  #:enddoc:
58
52
  protected
59
-
53
+
60
54
  # Internal method to handle multiple types of payment arguments.
61
55
  def handle_payment_argument(payment)
62
56
  case payment
63
57
  when AuthorizeNet::CreditCard, AuthorizeNet::ECheck
64
58
  set_fields(payment.to_hash)
65
59
  else
66
- set_fields(:card_num => payment)
60
+ set_fields(card_num: payment)
67
61
  end
68
62
  end
69
-
70
63
  end
71
-
72
- end
64
+ end
@@ -1,9 +1,7 @@
1
1
  module AuthorizeNet
2
-
3
2
  # The core, xml response class. You shouldn't instantiate this one.
4
3
  # Instead you should use AuthorizeNet::ARB::Response.
5
4
  class XmlResponse < AuthorizeNet::Response
6
-
7
5
  # DO NOT USE. Instantiate AuthorizeNet::ARB::Response or AuthorizeNet::CIM::Response instead.
8
6
  def initialize(raw_response, transaction)
9
7
  @raw_response = raw_response
@@ -19,23 +17,23 @@ module AuthorizeNet
19
17
  @message_code = node_content_unless_nil(@root.at_css('messages message code'))
20
18
  @message_text = node_content_unless_nil(@root.at_css('messages message text'))
21
19
  @reference_id = node_content_unless_nil(@root.at_css('refId'))
22
- rescue
23
- @raw_response = $!
20
+ rescue StandardError
21
+ @raw_response = $ERROR_INFO
24
22
  end
25
23
  end
26
24
  end
27
-
25
+
28
26
  # Check to see if the response indicated success. Success is defined as a 200 OK response with a resultCode
29
27
  # of 'Ok'.
30
28
  def success?
31
29
  !connection_failure? && @result_code == 'Ok'
32
30
  end
33
-
31
+
34
32
  # Returns true if we failed to open a connection to the gateway or got back a non-200 OK HTTP response.
35
33
  def connection_failure?
36
- !@raw_response.kind_of?(Net::HTTPOK)
34
+ !@raw_response.is_a?(Net::HTTPOK)
37
35
  end
38
-
36
+
39
37
  # Returns the underlying Net::HTTPResponse object. This has the original response body along with
40
38
  # headers and such. Note that if an exception is generated while making the request (which happens
41
39
  # if there is no internet connection for example), you will get the exception object here instead of
@@ -43,51 +41,43 @@ module AuthorizeNet
43
41
  def raw
44
42
  @raw_response
45
43
  end
46
-
44
+
47
45
  # Returns a deep-copy of the XML object received from the payment gateway. Or nil if there was no XML payload.
48
46
  def xml
49
47
  @root.dup unless @root.nil?
50
48
  end
51
-
49
+
52
50
  # Returns the resultCode from the XML response. resultCode will be either 'Ok' or 'Error'.
53
- def result_code
54
- @result_code
55
- end
56
-
51
+ attr_reader :result_code
52
+
57
53
  # Returns the messageCode from the XML response. This is a code indicating the details of an error
58
54
  # or success.
59
- def message_code
60
- @message_code
61
- end
62
-
55
+ attr_reader :message_code
56
+
63
57
  # Returns the messageText from the XML response. This is a text description of the message_code.
64
- def message_text
65
- @message_text
66
- end
67
-
58
+ attr_reader :message_text
59
+
68
60
  # Alias for result_code.
69
61
  def response_code
70
62
  result_code
71
63
  end
72
-
64
+
73
65
  # Alias for message_code.
74
66
  def response_reason_code
75
67
  message_code
76
68
  end
77
-
69
+
78
70
  # Alias for message_text.
79
71
  def response_reason_text
80
72
  message_text
81
73
  end
82
-
74
+
83
75
  # Returns the refId from the response if there is one. Otherwise returns nil.
84
- def reference_id
85
- @reference_id
86
- end
87
-
76
+ attr_reader :reference_id
77
+
88
78
  #:enddoc:
89
79
  protected
90
-
80
+
91
81
  def node_content_unless_nil(node)
92
82
  if node.nil?
93
83
  nil
@@ -95,31 +85,25 @@ module AuthorizeNet
95
85
  node.content
96
86
  end
97
87
  end
98
-
88
+
99
89
  def node_child_content_unless_nil(node)
100
90
  if node.nil?
101
91
  nil
102
92
  else
103
- if node.children.length > 0
104
- node.children.collect(&:content)
105
- else
106
- nil
107
- end
93
+ node.children.collect(&:content) unless node.children.empty?
108
94
  end
109
95
  end
110
-
96
+
111
97
  # Transforms a block of XML into a model Object defined by entity_desc.
112
98
  def build_entity(xml, entity_desc)
113
99
  args = {}
114
100
  entity_desc.node_structure.each do |node_desc|
115
- node_name = (node_desc.keys.reject {|k| k.to_s[0..0] == '_' }).first
101
+ node_name = (node_desc.keys.reject { |k| k.to_s[0..0] == '_' }).first
116
102
  args.merge!(handle_node_type(xml, node_desc, node_name, args, ''))
117
103
  end
118
-
119
- if args.length == 0
120
- return nil
121
- end
122
-
104
+
105
+ return nil if args.empty?
106
+
123
107
  if entity_desc.arg_mapping.nil?
124
108
  return entity_desc.entity_class.new(args)
125
109
  else
@@ -132,7 +116,7 @@ module AuthorizeNet
132
116
  return entity_desc.entity_class.new(*args_list)
133
117
  end
134
118
  end
135
-
119
+
136
120
  # Parses an XML fragment into an internal representation.
137
121
  def handle_node_type(xml, node_desc, node_name, args, base_name)
138
122
  case node_desc[node_name]
@@ -144,29 +128,27 @@ module AuthorizeNet
144
128
  when Method, Proc
145
129
  content = node_desc[:_converter].call(content)
146
130
  when Symbol
147
- content = self.send(node_desc[:_converter], content)
131
+ content = send(node_desc[:_converter], content)
148
132
  end
149
133
  args[node_desc[node_name]] = content unless content.nil?
150
134
  end
151
135
  when AuthorizeNet::EntityDescription
152
- unless node_desc[:_multivalue].nil?
136
+ if node_desc[:_multivalue].nil?
137
+ entity = build_entity(xml.css(base_name + node_name.to_s), node_desc[node_name])
138
+ args[node_desc[:_value]] = entity unless entity.nil?
139
+ else
153
140
  xml.css(base_name + node_name.to_s).each do |node|
154
141
  entity = build_entity(node, node_desc[node_name])
155
142
  args[node_desc[:_multivalue]] = args[node_desc[:_multivalue]].to_a + entity.to_a unless entity.nil?
156
143
  end
157
- else
158
- entity = build_entity(xml.css(base_name + node_name.to_s), node_desc[node_name])
159
- args[node_desc[:_value]] = entity unless entity.nil?
160
144
  end
161
145
  when Array
162
146
  node_desc[node_name].each do |inner_node|
163
- inner_node_name = (inner_node.keys.reject {|k| k.to_s[0..0] == '_' }).first
147
+ inner_node_name = (inner_node.keys.reject { |k| k.to_s[0..0] == '_' }).first
164
148
  args.merge!(handle_node_type(xml, inner_node, inner_node_name, args, node_name.to_s + ' '))
165
149
  end
166
150
  end
167
- return args
151
+ args
168
152
  end
169
-
170
153
  end
171
-
172
- end
154
+ end
@@ -1,163 +1,151 @@
1
1
  module AuthorizeNet
2
-
3
2
  # The ARB transaction class.
4
3
  class XmlTransaction < AuthorizeNet::Transaction
5
-
6
4
  # The XML namespace used by the ARB API.
7
- XML_NAMESPACE = 'AnetApi/xml/v1/schema/AnetApiSchema.xsd'
8
-
5
+ XML_NAMESPACE = 'AnetApi/xml/v1/schema/AnetApiSchema.xsd'.freeze
6
+
9
7
  # Constants for both the various Authorize.Net subscription gateways are defined here.
10
8
  module Gateway
11
- LIVE = 'https://api2.authorize.net/xml/v1/request.api'
12
- TEST = 'https://apitest.authorize.net/xml/v1/request.api'
9
+ LIVE = 'https://api2.authorize.net/xml/v1/request.api'.freeze
10
+ TEST = 'https://apitest.authorize.net/xml/v1/request.api'.freeze
13
11
  end
14
-
12
+
15
13
  # Constants for both the various Authorize.Net transaction types are defined here.
16
14
  module Type
17
- ARB_CREATE = "ARBCreateSubscriptionRequest"
18
- ARB_UPDATE = "ARBUpdateSubscriptionRequest"
19
- ARB_GET_STATUS = "ARBGetSubscriptionStatusRequest"
20
- ARB_CANCEL = "ARBCancelSubscriptionRequest"
21
- ARB_GET_SUBSCRIPTION_LIST = "ARBGetSubscriptionListRequest"
22
- CIM_CREATE_PROFILE = "createCustomerProfileRequest"
23
- CIM_CREATE_PAYMENT = "createCustomerPaymentProfileRequest"
24
- CIM_CREATE_ADDRESS = "createCustomerShippingAddressRequest"
25
- CIM_CREATE_TRANSACTION = "createCustomerProfileTransactionRequest"
26
- CIM_DELETE_PROFILE = "deleteCustomerProfileRequest"
27
- CIM_DELETE_PAYMENT = "deleteCustomerPaymentProfileRequest"
28
- CIM_DELETE_ADDRESS = "deleteCustomerShippingAddressRequest"
29
- CIM_GET_PROFILE_IDS = "getCustomerProfileIdsRequest"
30
- CIM_GET_PROFILE = "getCustomerProfileRequest"
31
- CIM_GET_PAYMENT = "getCustomerPaymentProfileRequest"
32
- CIM_GET_ADDRESS = "getCustomerShippingAddressRequest"
33
- CIM_GET_HOSTED_PROFILE = "getHostedProfilePageRequest"
34
- CIM_UPDATE_PROFILE = "updateCustomerProfileRequest"
35
- CIM_UPDATE_PAYMENT = "updateCustomerPaymentProfileRequest"
36
- CIM_UPDATE_ADDRESS = "updateCustomerShippingAddressRequest"
37
- CIM_UPDATE_SPLIT = "updateSplitTenderGroupRequest"
38
- CIM_VALIDATE_PAYMENT = "validateCustomerPaymentProfileRequest"
39
- REPORT_GET_BATCH_LIST = "getSettledBatchListRequest"
40
- REPORT_GET_TRANSACTION_LIST = "getTransactionListRequest"
41
- REPORT_GET_UNSETTLED_TRANSACTION_LIST = "getUnsettledTransactionListRequest"
42
- REPORT_GET_TRANSACTION_DETAILS = "getTransactionDetailsRequest"
15
+ ARB_CREATE = "ARBCreateSubscriptionRequest".freeze
16
+ ARB_UPDATE = "ARBUpdateSubscriptionRequest".freeze
17
+ ARB_GET_STATUS = "ARBGetSubscriptionStatusRequest".freeze
18
+ ARB_CANCEL = "ARBCancelSubscriptionRequest".freeze
19
+ ARB_GET_SUBSCRIPTION_LIST = "ARBGetSubscriptionListRequest".freeze
20
+ CIM_CREATE_PROFILE = "createCustomerProfileRequest".freeze
21
+ CIM_CREATE_PAYMENT = "createCustomerPaymentProfileRequest".freeze
22
+ CIM_CREATE_ADDRESS = "createCustomerShippingAddressRequest".freeze
23
+ CIM_CREATE_TRANSACTION = "createCustomerProfileTransactionRequest".freeze
24
+ CIM_DELETE_PROFILE = "deleteCustomerProfileRequest".freeze
25
+ CIM_DELETE_PAYMENT = "deleteCustomerPaymentProfileRequest".freeze
26
+ CIM_DELETE_ADDRESS = "deleteCustomerShippingAddressRequest".freeze
27
+ CIM_GET_PROFILE_IDS = "getCustomerProfileIdsRequest".freeze
28
+ CIM_GET_PROFILE = "getCustomerProfileRequest".freeze
29
+ CIM_GET_PAYMENT = "getCustomerPaymentProfileRequest".freeze
30
+ CIM_GET_ADDRESS = "getCustomerShippingAddressRequest".freeze
31
+ CIM_GET_HOSTED_PROFILE = "getHostedProfilePageRequest".freeze
32
+ CIM_UPDATE_PROFILE = "updateCustomerProfileRequest".freeze
33
+ CIM_UPDATE_PAYMENT = "updateCustomerPaymentProfileRequest".freeze
34
+ CIM_UPDATE_ADDRESS = "updateCustomerShippingAddressRequest".freeze
35
+ CIM_UPDATE_SPLIT = "updateSplitTenderGroupRequest".freeze
36
+ CIM_VALIDATE_PAYMENT = "validateCustomerPaymentProfileRequest".freeze
37
+ REPORT_GET_BATCH_LIST = "getSettledBatchListRequest".freeze
38
+ REPORT_GET_TRANSACTION_LIST = "getTransactionListRequest".freeze
39
+ REPORT_GET_UNSETTLED_TRANSACTION_LIST = "getUnsettledTransactionListRequest".freeze
40
+ REPORT_GET_TRANSACTION_DETAILS = "getTransactionDetailsRequest".freeze
43
41
  end
44
-
42
+
45
43
  # Fields to convert to/from booleans.
46
44
  @@boolean_fields = []
47
-
45
+
48
46
  # Fields to convert to/from BigDecimal.
49
47
  @@decimal_fields = []
50
-
48
+
51
49
  # Fields to convert to/from Date.
52
50
  @@date_fields = []
53
-
51
+
54
52
  # Fields to convert to/from DateTime.
55
53
  @@datetime_fields = []
56
-
54
+
57
55
  # The class to wrap our response in.
58
56
  @response_class = AuthorizeNet::XmlResponse
59
-
57
+
60
58
  # The default options for the constructor.
61
59
  @@option_defaults = {
62
- :gateway => :production,
63
- :verify_ssl => true,
64
- :reference_id => nil
60
+ gateway: :production,
61
+ verify_ssl: true,
62
+ reference_id: nil
65
63
  }
66
-
64
+
67
65
  # DO NOT USE. Instantiate AuthorizeNet::ARB::Transaction or AuthorizeNet::CIM::Transaction instead.
68
66
  def initialize(api_login_id, api_transaction_key, options = {})
69
67
  super()
70
68
  @api_login_id = api_login_id
71
69
  @api_transaction_key = api_transaction_key
72
-
70
+
73
71
  @response ||= nil
74
72
  @type ||= nil
75
-
73
+
76
74
  options = @@option_defaults.merge(options)
77
75
  @verify_ssl = options[:verify_ssl]
78
76
  @reference_id = options[:reference_id]
79
77
  @gateway = case options[:gateway].to_s
80
- when 'sandbox', 'test'
81
- Gateway::TEST
82
- when 'production', 'live'
83
- Gateway::LIVE
84
- else
85
- @gateway = options[:gateway]
86
- options[:gateway]
78
+ when 'sandbox', 'test'
79
+ Gateway::TEST
80
+ when 'production', 'live'
81
+ Gateway::LIVE
82
+ else
83
+ @gateway = options[:gateway]
84
+ options[:gateway]
87
85
  end
88
86
  end
89
-
90
- def setOAuthOptions()
91
- if !@options_OAuth.blank?
92
- @options_OAuth = @@option_defaults.merge(@options_OAuth)
93
- @verify_ssl = options_OAuth[:verify_ssl]
94
- @reference_id = options_OAuth[:reference_id]
95
-
96
- @gateway = case options_OAuth[:gateway].to_s
97
- when 'sandbox', 'test'
98
- Gateway::TEST
99
- when 'production', 'live'
100
- Gateway::LIVE
101
- else
102
- @gateway = options_OAuth[:gateway]
103
- options_OAuth[:gateway]
104
- end
105
- end
106
- end
107
-
87
+
88
+ def setOAuthOptions
89
+ unless @options_OAuth.blank?
90
+ @options_OAuth = @@option_defaults.merge(@options_OAuth)
91
+ @verify_ssl = options_OAuth[:verify_ssl]
92
+ @reference_id = options_OAuth[:reference_id]
93
+
94
+ @gateway = case options_OAuth[:gateway].to_s
95
+ when 'sandbox', 'test'
96
+ Gateway::TEST
97
+ when 'production', 'live'
98
+ Gateway::LIVE
99
+ else
100
+ @gateway = options_OAuth[:gateway]
101
+ options_OAuth[:gateway]
102
+ end
103
+ end
104
+ end
105
+
108
106
  # Checks if the transaction has been configured for the sandbox or not. Return FALSE if the
109
107
  # transaction is running against the production, TRUE otherwise.
110
108
  def test?
111
109
  @gateway != Gateway::LIVE
112
110
  end
113
-
111
+
114
112
  # Checks to see if the transaction has a response (meaning it has been submitted to the gateway).
115
113
  # Returns TRUE if a response is present, FALSE otherwise.
116
114
  def has_response?
117
115
  !@response.nil?
118
116
  end
119
-
117
+
120
118
  # Retrieve the response object (or Nil if transaction hasn't been sent to the gateway).
121
- def response
122
- @response
123
- end
124
-
119
+ attr_reader :response
120
+
125
121
  # Submits the transaction to the gateway for processing. Returns a response object. If the transaction
126
122
  # has already been run, it will return nil.
127
123
  def run
128
124
  make_request
129
125
  end
130
-
126
+
131
127
  # Returns a deep-copy of the XML object sent to the payment gateway. Or nil if there was no XML payload.
132
- def xml
133
- @xml
134
- end
135
-
128
+ attr_reader :xml
129
+
136
130
  #:enddoc:
137
131
  protected
138
-
132
+
139
133
  # Takes a list of nodes (a Hash is a node, and Array is a list) and returns True if any nodes
140
134
  # would be built by build_nodes. False if no new nodes would be generated.
141
135
  def has_content(nodeList, data)
142
136
  nodeList.each do |node|
143
- nodeName = (node.keys.reject {|k| nodeName.to_s[0..0] == '_' }).first
137
+ nodeName = (node.keys.reject { |_k| nodeName.to_s[0..0] == '_' }).first
144
138
  multivalue = node[:_multivalue]
145
139
  conditional = node[:_conditional]
146
140
  value = node[nodeName]
147
- unless conditional.nil?
148
- value = self.send(conditional, nodeName)
149
- end
141
+ value = send(conditional, nodeName) unless conditional.nil?
150
142
  case value
151
143
  when Array
152
144
  if multivalue.nil?
153
- if has_content(value, data)
154
- return true
155
- end
145
+ return true if has_content(value, data)
156
146
  else
157
147
  data[multivalue].each do |v|
158
- if has_content(value, v)
159
- return true
160
- end
148
+ return true if has_content(value, v)
161
149
  end
162
150
  end
163
151
  when Symbol
@@ -169,33 +157,31 @@ module AuthorizeNet
169
157
  end
170
158
  false
171
159
  end
172
-
160
+
173
161
  # Takes a list of nodes (a Hash is a node, and Array is a list) and recursively builds the XML by pulling
174
162
  # values as needed from data.
175
163
  def build_nodes(builder, nodeList, data)
176
164
  nodeList.each do |node|
177
- # TODO - ADD COMMENTS HERE
178
- nodeName = (node.keys.reject {|k| k.to_s[0..0] == '_' }).first
165
+ # TODO: - ADD COMMENTS HERE
166
+ nodeName = (node.keys.reject { |k| k.to_s[0..0] == '_' }).first
179
167
  multivalue = node[:_multivalue]
180
168
  conditional = node[:_conditional]
181
169
  value = node[nodeName]
182
170
 
183
- unless conditional.nil?
184
- value = self.send(conditional, nodeName)
185
- end
171
+ value = send(conditional, nodeName) unless conditional.nil?
186
172
  case value
187
173
  when Array # node containing other nodes
188
174
  if multivalue.nil?
189
- proc = Proc.new { build_nodes(builder, value, data) }
175
+ proc = proc { build_nodes(builder, value, data) }
190
176
  builder.send(nodeName, &proc) if has_content(value, data)
191
177
  else
192
178
  data[multivalue].to_a.each do |v|
193
- proc = Proc.new { build_nodes(builder, value, v) }
179
+ proc = proc { build_nodes(builder, value, v) }
194
180
  builder.send(nodeName, &proc) if has_content(value, v)
195
181
  end
196
182
  end
197
183
  when Symbol # node containing actual data
198
- if data[value].kind_of?(Array)
184
+ if data[value].is_a?(Array)
199
185
  data[value].each do |v|
200
186
  converted = convert_field(value, v)
201
187
  builder.send(nodeName, converted) unless converted.nil?
@@ -209,32 +195,30 @@ module AuthorizeNet
209
195
  end
210
196
  end
211
197
  end
212
-
198
+
213
199
  def convert_field(field, value)
214
- if @@boolean_fields.include?(field) and !value.nil?
200
+ if @@boolean_fields.include?(field) && !value.nil?
215
201
  return boolean_to_value(value)
216
- elsif @@decimal_fields.include?(field) and !value.nil?
202
+ elsif @@decimal_fields.include?(field) && !value.nil?
217
203
  return decimal_to_value(value)
218
- elsif @@date_fields.include?(field) and !value.nil?
204
+ elsif @@date_fields.include?(field) && !value.nil?
219
205
  return date_to_value(value)
220
- elsif @@datetime_fields.include?(field) and !value.nil?
206
+ elsif @@datetime_fields.include?(field) && !value.nil?
221
207
  return datetime_to_value(value)
222
208
  elsif field == :extra_options
223
209
  # handle converting extra options
224
210
  options = []
225
- unless value.nil?
226
- value.each_pair{|k,v| options <<= self.to_param(k, v)}
227
- end
211
+ value.each_pair { |k, v| options <<= to_param(k, v) } unless value.nil?
228
212
  unless @custom_fields.nil?
229
213
  # special sort to maintain compatibility with AIM custom field ordering
230
214
  # FIXME - This should be DRY'd up.
231
215
  custom_field_keys = @custom_fields.keys.collect(&:to_s).sort.collect(&:to_sym)
232
216
  for key in custom_field_keys
233
- options <<= self.to_param(key, @custom_fields[key.to_sym], '')
217
+ options <<= to_param(key, @custom_fields[key.to_sym], '')
234
218
  end
235
219
  end
236
-
237
- if options.length > 0
220
+
221
+ if !options.empty?
238
222
  return options.join('&')
239
223
  else
240
224
  return nil
@@ -243,38 +227,36 @@ module AuthorizeNet
243
227
  # convert MMYY expiration dates into the XML equivalent
244
228
  unless value.nil?
245
229
  begin
246
- return value.to_s.downcase == 'xxxx' ? 'XXXX' : Date.strptime(value.to_s, '%m%y').strftime('%Y-%m')
247
- rescue
230
+ return value.to_s.casecmp('xxxx').zero? ? 'XXXX' : Date.strptime(value.to_s, '%m%y').strftime('%Y-%m')
231
+ rescue StandardError
248
232
  # If we didn't get the exp_date in MMYY format, try our best to convert it
249
233
  return Date.parse(value.to_s).strftime('%Y-%m')
250
234
  end
251
235
  end
252
236
  end
253
-
237
+
254
238
  value
255
239
  end
256
-
240
+
257
241
  # An internal method that builds the POST body, submits it to the gateway, and constructs a Response object with the response.
258
242
  def make_request
259
- if has_response?
260
- return nil
261
- end
262
-
243
+ return nil if has_response?
244
+
263
245
  fields = @fields
264
-
265
- builder = Nokogiri::XML::Builder.new(:encoding => 'utf-8') do |x|
266
- x.send(@type.to_sym, :xmlns => XML_NAMESPACE) {
267
- x.merchantAuthentication {
246
+
247
+ builder = Nokogiri::XML::Builder.new(encoding: 'utf-8') do |x|
248
+ x.send(@type.to_sym, xmlns: XML_NAMESPACE) do
249
+ x.merchantAuthentication do
268
250
  x.name @api_login_id
269
251
  x.transactionKey @api_transaction_key
270
- }
252
+ end
271
253
  build_nodes(x, self.class.const_get(:FIELDS)[@type], fields)
272
- }
254
+ end
273
255
  end
274
- @xml = builder.to_xml
256
+ @xml = builder.to_xml
275
257
 
276
258
  url = URI.parse(@gateway)
277
-
259
+
278
260
  request = Net::HTTP::Post.new(url.path)
279
261
  request.content_type = 'text/xml'
280
262
  request.body = @xml
@@ -285,14 +267,13 @@ module AuthorizeNet
285
267
  else
286
268
  connection.verify_mode = OpenSSL::SSL::VERIFY_NONE
287
269
  end
288
-
270
+
289
271
  # Use our Class's @response_class variable to find the Response class we are supposed to use.
290
272
  begin
291
- @response = self.class.instance_variable_get(:@response_class).new((connection.start {|http| http.request(request)}), self)
292
- rescue
293
- @response = self.class.instance_variable_get(:@response_class).new($!, self)
273
+ @response = self.class.instance_variable_get(:@response_class).new((connection.start { |http| http.request(request) }), self)
274
+ rescue StandardError
275
+ @response = self.class.instance_variable_get(:@response_class).new($ERROR_INFO, self)
294
276
  end
295
277
  end
296
-
297
278
  end
298
279
  end