activemerchant 1.86.0 → 1.87.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 (164) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG +22 -0
  3. data/lib/active_merchant/billing/avs_result.rb +0 -1
  4. data/lib/active_merchant/billing/check.rb +1 -1
  5. data/lib/active_merchant/billing/compatibility.rb +3 -3
  6. data/lib/active_merchant/billing/credit_card.rb +1 -1
  7. data/lib/active_merchant/billing/credit_card_formatting.rb +3 -3
  8. data/lib/active_merchant/billing/credit_card_methods.rb +6 -4
  9. data/lib/active_merchant/billing/gateway.rb +9 -9
  10. data/lib/active_merchant/billing/gateways/adyen.rb +48 -7
  11. data/lib/active_merchant/billing/gateways/allied_wallet.rb +1 -1
  12. data/lib/active_merchant/billing/gateways/authorize_net.rb +8 -8
  13. data/lib/active_merchant/billing/gateways/authorize_net_arb.rb +1 -1
  14. data/lib/active_merchant/billing/gateways/authorize_net_cim.rb +15 -15
  15. data/lib/active_merchant/billing/gateways/axcessms.rb +2 -2
  16. data/lib/active_merchant/billing/gateways/balanced.rb +11 -11
  17. data/lib/active_merchant/billing/gateways/bank_frick.rb +1 -1
  18. data/lib/active_merchant/billing/gateways/barclaycard_smartpay.rb +5 -5
  19. data/lib/active_merchant/billing/gateways/beanstream.rb +3 -2
  20. data/lib/active_merchant/billing/gateways/beanstream/beanstream_core.rb +5 -5
  21. data/lib/active_merchant/billing/gateways/blue_pay.rb +5 -5
  22. data/lib/active_merchant/billing/gateways/blue_snap.rb +5 -5
  23. data/lib/active_merchant/billing/gateways/bogus.rb +3 -3
  24. data/lib/active_merchant/billing/gateways/borgun.rb +5 -6
  25. data/lib/active_merchant/billing/gateways/braintree_blue.rb +18 -12
  26. data/lib/active_merchant/billing/gateways/bridge_pay.rb +1 -1
  27. data/lib/active_merchant/billing/gateways/cams.rb +12 -12
  28. data/lib/active_merchant/billing/gateways/card_stream.rb +9 -9
  29. data/lib/active_merchant/billing/gateways/cardknox.rb +4 -4
  30. data/lib/active_merchant/billing/gateways/cardprocess.rb +1 -1
  31. data/lib/active_merchant/billing/gateways/cashnet.rb +2 -2
  32. data/lib/active_merchant/billing/gateways/cc5.rb +2 -2
  33. data/lib/active_merchant/billing/gateways/cenpos.rb +2 -2
  34. data/lib/active_merchant/billing/gateways/checkout.rb +1 -1
  35. data/lib/active_merchant/billing/gateways/clearhaus.rb +12 -12
  36. data/lib/active_merchant/billing/gateways/commercegate.rb +3 -3
  37. data/lib/active_merchant/billing/gateways/creditcall.rb +2 -2
  38. data/lib/active_merchant/billing/gateways/credorax.rb +13 -3
  39. data/lib/active_merchant/billing/gateways/ct_payment.rb +6 -6
  40. data/lib/active_merchant/billing/gateways/culqi.rb +1 -1
  41. data/lib/active_merchant/billing/gateways/cyber_source.rb +8 -8
  42. data/lib/active_merchant/billing/gateways/data_cash.rb +2 -2
  43. data/lib/active_merchant/billing/gateways/dibs.rb +2 -2
  44. data/lib/active_merchant/billing/gateways/digitzs.rb +5 -5
  45. data/lib/active_merchant/billing/gateways/ebanx.rb +1 -1
  46. data/lib/active_merchant/billing/gateways/efsnet.rb +4 -4
  47. data/lib/active_merchant/billing/gateways/elavon.rb +3 -3
  48. data/lib/active_merchant/billing/gateways/element.rb +4 -4
  49. data/lib/active_merchant/billing/gateways/epay.rb +1 -1
  50. data/lib/active_merchant/billing/gateways/eway.rb +2 -2
  51. data/lib/active_merchant/billing/gateways/eway_managed.rb +5 -5
  52. data/lib/active_merchant/billing/gateways/eway_rapid.rb +1 -1
  53. data/lib/active_merchant/billing/gateways/exact.rb +1 -1
  54. data/lib/active_merchant/billing/gateways/federated_canada.rb +1 -1
  55. data/lib/active_merchant/billing/gateways/first_giving.rb +1 -1
  56. data/lib/active_merchant/billing/gateways/firstdata_e4.rb +7 -7
  57. data/lib/active_merchant/billing/gateways/flo2cash.rb +2 -2
  58. data/lib/active_merchant/billing/gateways/forte.rb +11 -7
  59. data/lib/active_merchant/billing/gateways/garanti.rb +5 -5
  60. data/lib/active_merchant/billing/gateways/global_collect.rb +2 -3
  61. data/lib/active_merchant/billing/gateways/hdfc.rb +2 -2
  62. data/lib/active_merchant/billing/gateways/hps.rb +3 -3
  63. data/lib/active_merchant/billing/gateways/inspire.rb +7 -7
  64. data/lib/active_merchant/billing/gateways/iridium.rb +14 -14
  65. data/lib/active_merchant/billing/gateways/itransact.rb +4 -4
  66. data/lib/active_merchant/billing/gateways/iveri.rb +3 -3
  67. data/lib/active_merchant/billing/gateways/jetpay.rb +2 -2
  68. data/lib/active_merchant/billing/gateways/jetpay_v2.rb +2 -2
  69. data/lib/active_merchant/billing/gateways/latitude19.rb +1 -1
  70. data/lib/active_merchant/billing/gateways/linkpoint.rb +3 -3
  71. data/lib/active_merchant/billing/gateways/litle.rb +2 -2
  72. data/lib/active_merchant/billing/gateways/maxipago.rb +1 -1
  73. data/lib/active_merchant/billing/gateways/mercado_pago.rb +7 -13
  74. data/lib/active_merchant/billing/gateways/merchant_e_solutions.rb +3 -3
  75. data/lib/active_merchant/billing/gateways/merchant_one.rb +4 -4
  76. data/lib/active_merchant/billing/gateways/merchant_partners.rb +1 -1
  77. data/lib/active_merchant/billing/gateways/merchant_warrior.rb +3 -3
  78. data/lib/active_merchant/billing/gateways/mercury.rb +2 -2
  79. data/lib/active_merchant/billing/gateways/metrics_global.rb +2 -2
  80. data/lib/active_merchant/billing/gateways/micropayment.rb +1 -1
  81. data/lib/active_merchant/billing/gateways/migs.rb +4 -6
  82. data/lib/active_merchant/billing/gateways/modern_payments_cim.rb +2 -2
  83. data/lib/active_merchant/billing/gateways/moneris.rb +85 -56
  84. data/lib/active_merchant/billing/gateways/moneris_us.rb +9 -9
  85. data/lib/active_merchant/billing/gateways/money_movers.rb +1 -1
  86. data/lib/active_merchant/billing/gateways/mundipagg.rb +1 -1
  87. data/lib/active_merchant/billing/gateways/nab_transact.rb +1 -1
  88. data/lib/active_merchant/billing/gateways/net_registry.rb +2 -2
  89. data/lib/active_merchant/billing/gateways/netaxept.rb +6 -6
  90. data/lib/active_merchant/billing/gateways/netbanx.rb +36 -36
  91. data/lib/active_merchant/billing/gateways/netbilling.rb +2 -2
  92. data/lib/active_merchant/billing/gateways/netpay.rb +1 -1
  93. data/lib/active_merchant/billing/gateways/nmi.rb +2 -2
  94. data/lib/active_merchant/billing/gateways/ogone.rb +7 -7
  95. data/lib/active_merchant/billing/gateways/omise.rb +6 -6
  96. data/lib/active_merchant/billing/gateways/opp.rb +1 -1
  97. data/lib/active_merchant/billing/gateways/optimal_payment.rb +5 -0
  98. data/lib/active_merchant/billing/gateways/orbital.rb +9 -7
  99. data/lib/active_merchant/billing/gateways/pac_net_raven.rb +6 -6
  100. data/lib/active_merchant/billing/gateways/pagarme.rb +1 -1
  101. data/lib/active_merchant/billing/gateways/pay_conex.rb +1 -1
  102. data/lib/active_merchant/billing/gateways/pay_gate_xml.rb +8 -5
  103. data/lib/active_merchant/billing/gateways/pay_hub.rb +2 -2
  104. data/lib/active_merchant/billing/gateways/pay_junction.rb +2 -2
  105. data/lib/active_merchant/billing/gateways/pay_junction_v2.rb +2 -2
  106. data/lib/active_merchant/billing/gateways/pay_secure.rb +3 -3
  107. data/lib/active_merchant/billing/gateways/paybox_direct.rb +8 -8
  108. data/lib/active_merchant/billing/gateways/payeezy.rb +1 -1
  109. data/lib/active_merchant/billing/gateways/payex.rb +8 -8
  110. data/lib/active_merchant/billing/gateways/payflow.rb +13 -13
  111. data/lib/active_merchant/billing/gateways/payflow/payflow_common_api.rb +4 -4
  112. data/lib/active_merchant/billing/gateways/payflow_express.rb +1 -1
  113. data/lib/active_merchant/billing/gateways/payment_express.rb +10 -10
  114. data/lib/active_merchant/billing/gateways/paymentez.rb +3 -0
  115. data/lib/active_merchant/billing/gateways/paymill.rb +4 -4
  116. data/lib/active_merchant/billing/gateways/payscout.rb +1 -1
  117. data/lib/active_merchant/billing/gateways/paystation.rb +1 -1
  118. data/lib/active_merchant/billing/gateways/payu_in.rb +3 -3
  119. data/lib/active_merchant/billing/gateways/payu_latam.rb +1 -1
  120. data/lib/active_merchant/billing/gateways/payway.rb +2 -2
  121. data/lib/active_merchant/billing/gateways/plugnpay.rb +2 -2
  122. data/lib/active_merchant/billing/gateways/pro_pay.rb +2 -2
  123. data/lib/active_merchant/billing/gateways/psigate.rb +1 -1
  124. data/lib/active_merchant/billing/gateways/psl_card.rb +3 -3
  125. data/lib/active_merchant/billing/gateways/qbms.rb +1 -1
  126. data/lib/active_merchant/billing/gateways/quantum.rb +7 -7
  127. data/lib/active_merchant/billing/gateways/quickbooks.rb +6 -6
  128. data/lib/active_merchant/billing/gateways/quickpay/quickpay_v10.rb +1 -1
  129. data/lib/active_merchant/billing/gateways/qvalent.rb +2 -2
  130. data/lib/active_merchant/billing/gateways/realex.rb +33 -13
  131. data/lib/active_merchant/billing/gateways/redsys.rb +2 -2
  132. data/lib/active_merchant/billing/gateways/safe_charge.rb +2 -2
  133. data/lib/active_merchant/billing/gateways/sage.rb +6 -6
  134. data/lib/active_merchant/billing/gateways/sage_pay.rb +7 -7
  135. data/lib/active_merchant/billing/gateways/secure_net.rb +1 -1
  136. data/lib/active_merchant/billing/gateways/secure_pay.rb +2 -2
  137. data/lib/active_merchant/billing/gateways/secure_pay_au.rb +1 -1
  138. data/lib/active_merchant/billing/gateways/secure_pay_tech.rb +1 -1
  139. data/lib/active_merchant/billing/gateways/skip_jack.rb +5 -6
  140. data/lib/active_merchant/billing/gateways/smart_ps.rb +7 -7
  141. data/lib/active_merchant/billing/gateways/so_easy_pay.rb +1 -1
  142. data/lib/active_merchant/billing/gateways/stripe.rb +5 -5
  143. data/lib/active_merchant/billing/gateways/swipe_checkout.rb +2 -2
  144. data/lib/active_merchant/billing/gateways/telr.rb +1 -1
  145. data/lib/active_merchant/billing/gateways/trans_first_transaction_express.rb +2 -2
  146. data/lib/active_merchant/billing/gateways/transact_pro.rb +5 -5
  147. data/lib/active_merchant/billing/gateways/transax.rb +1 -1
  148. data/lib/active_merchant/billing/gateways/trust_commerce.rb +7 -7
  149. data/lib/active_merchant/billing/gateways/usa_epay_advanced.rb +17 -16
  150. data/lib/active_merchant/billing/gateways/usa_epay_transaction.rb +2 -2
  151. data/lib/active_merchant/billing/gateways/vanco.rb +2 -2
  152. data/lib/active_merchant/billing/gateways/verifi.rb +1 -1
  153. data/lib/active_merchant/billing/gateways/viaklix.rb +4 -4
  154. data/lib/active_merchant/billing/gateways/visanet_peru.rb +4 -4
  155. data/lib/active_merchant/billing/gateways/wirecard.rb +2 -2
  156. data/lib/active_merchant/billing/gateways/worldpay.rb +24 -13
  157. data/lib/active_merchant/billing/gateways/worldpay_online_payments.rb +2 -2
  158. data/lib/active_merchant/billing/response.rb +7 -7
  159. data/lib/active_merchant/country.rb +4 -4
  160. data/lib/active_merchant/network_connection_retries.rb +7 -9
  161. data/lib/active_merchant/version.rb +1 -1
  162. data/lib/support/gateway_support.rb +3 -3
  163. data/lib/support/ssl_verify.rb +1 -1
  164. metadata +3 -3
@@ -45,12 +45,12 @@ module ActiveMerchant #:nodoc:
45
45
 
46
46
  MultiResponse.run do |r|
47
47
  identifier = if(payment_method.respond_to?(:number))
48
- r.process{store(payment_method, options)}
49
- r.authorization
50
- else
51
- payment_method
48
+ r.process { store(payment_method, options) }
49
+ r.authorization
50
+ else
51
+ payment_method
52
52
  end
53
- r.process{commit('debits', "cards/#{card_identifier_from(identifier)}/debits", post)}
53
+ r.process { commit('debits', "cards/#{card_identifier_from(identifier)}/debits", post) }
54
54
  end
55
55
  end
56
56
 
@@ -62,12 +62,12 @@ module ActiveMerchant #:nodoc:
62
62
 
63
63
  MultiResponse.run do |r|
64
64
  identifier = if(payment_method.respond_to?(:number))
65
- r.process{store(payment_method, options)}
66
- r.authorization
67
- else
68
- payment_method
65
+ r.process { store(payment_method, options) }
66
+ r.authorization
67
+ else
68
+ payment_method
69
69
  end
70
- r.process{commit('card_holds', "cards/#{card_identifier_from(identifier)}/card_holds", post)}
70
+ r.process { commit('card_holds', "cards/#{card_identifier_from(identifier)}/card_holds", post) }
71
71
  end
72
72
  end
73
73
 
@@ -118,7 +118,7 @@ module ActiveMerchant #:nodoc:
118
118
  when %r{\|}
119
119
  uri = identifier.
120
120
  split('|').
121
- detect{|part| part.size > 0}
121
+ detect { |part| part.size > 0 }
122
122
  uri.split('/')[2]
123
123
  when %r{\/}
124
124
  identifier.split('/')[5]
@@ -9,7 +9,7 @@ module ActiveMerchant #:nodoc:
9
9
  self.test_url = 'https://test.ctpe.io/payment/ctpe'
10
10
  self.live_url = 'https://ctpe.io/payment/ctpe'
11
11
 
12
- self.supported_countries = ['LI','US']
12
+ self.supported_countries = ['LI', 'US']
13
13
  self.default_currency = 'EUR'
14
14
  self.supported_cardtypes = [:visa, :master, :american_express, :discover]
15
15
 
@@ -168,11 +168,11 @@ module ActiveMerchant #:nodoc:
168
168
  return Response.new(false, 'Invalid credentials', {}, :test => test?)
169
169
  when '403'
170
170
  return Response.new(false, 'Not allowed', {}, :test => test?)
171
- when '422'
172
- return Response.new(false, 'Unprocessable Entity', {}, :test => test?)
173
- when '500'
174
- if e.response.body.split(' ')[0] == 'validation'
175
- return Response.new(false, e.response.body.split(' ', 3)[2], {}, :test => test?)
171
+ when '422', '500'
172
+ if e.response.body.split(/\W+/).any? { |word| %w(validation configuration security).include?(word) }
173
+ error_message = e.response.body[/#{Regexp.escape('message=')}(.*?)#{Regexp.escape('&')}/m, 1].tr('+', ' ')
174
+ error_code = e.response.body[/#{Regexp.escape('errorCode=')}(.*?)#{Regexp.escape('&')}/m, 1]
175
+ return Response.new(false, error_code + ': ' + error_message, {}, :test => test?)
176
176
  end
177
177
  end
178
178
  raise
@@ -186,8 +186,9 @@ module ActiveMerchant #:nodoc:
186
186
  else
187
187
  post[:singleUseToken] = payment_method
188
188
  end
189
- options.merge!({:vault_id => vault_id, :operation => secure_profile_action(:modify)})
190
- add_secure_profile_variables(post,options)
189
+ options[:vault_id] = vault_id
190
+ options[:operation] = secure_profile_action(:modify)
191
+ add_secure_profile_variables(post, options)
191
192
  commit(post, true)
192
193
  end
193
194
 
@@ -193,11 +193,11 @@ module ActiveMerchant #:nodoc:
193
193
  end
194
194
 
195
195
  def void_action(original_transaction_type)
196
- (original_transaction_type == TRANSACTIONS[:refund]) ? :void_refund : :void_purchase
196
+ original_transaction_type == TRANSACTIONS[:refund] ? :void_refund : :void_purchase
197
197
  end
198
198
 
199
199
  def refund_action(type)
200
- (type == TRANSACTIONS[:check_purchase]) ? :check_refund : :refund
200
+ type == TRANSACTIONS[:check_purchase] ? :check_refund : :refund
201
201
  end
202
202
 
203
203
  def secure_profile_action(type)
@@ -398,7 +398,7 @@ module ActiveMerchant #:nodoc:
398
398
  end
399
399
 
400
400
  def commit(params, use_profile_api = false)
401
- post(post_data(params,use_profile_api),use_profile_api)
401
+ post(post_data(params, use_profile_api), use_profile_api)
402
402
  end
403
403
 
404
404
  def recurring_commit(params)
@@ -412,7 +412,7 @@ module ActiveMerchant #:nodoc:
412
412
  :test => test? || response[:authCode] == 'TEST',
413
413
  :authorization => authorization_from(response),
414
414
  :cvv_result => CVD_CODES[response[:cvdId]],
415
- :avs_result => { :code => (AVS_CODES.include? response[:avsId]) ? AVS_CODES[response[:avsId]] : response[:avsId] }
415
+ :avs_result => { :code => AVS_CODES.include?(response[:avsId]) ? AVS_CODES[response[:avsId]] : response[:avsId] }
416
416
  )
417
417
  end
418
418
 
@@ -463,7 +463,7 @@ module ActiveMerchant #:nodoc:
463
463
  params[:vbvEnabled] = '0'
464
464
  params[:scEnabled] = '0'
465
465
 
466
- params.reject{|k, v| v.blank?}.collect { |key, value| "#{key}=#{CGI.escape(value.to_s)}" }.join('&')
466
+ params.reject { |k, v| v.blank? }.collect { |key, value| "#{key}=#{CGI.escape(value.to_s)}" }.join('&')
467
467
  end
468
468
  end
469
469
  end
@@ -330,7 +330,7 @@ module ActiveMerchant #:nodoc:
330
330
 
331
331
  def parse_recurring(response_fields, opts={}) # expected status?
332
332
  parsed = {}
333
- response_fields.each do |k,v|
333
+ response_fields.each do |k, v|
334
334
  mapped_key = REBILL_FIELD_MAP.include?(k) ? REBILL_FIELD_MAP[k] : k
335
335
  parsed[mapped_key] = v
336
336
  end
@@ -345,14 +345,14 @@ module ActiveMerchant #:nodoc:
345
345
 
346
346
  def parse(body)
347
347
  # The bp20api has max one value per form field.
348
- response_fields = Hash[CGI::parse(body).map{|k,v| [k.upcase,v.first]}]
348
+ response_fields = Hash[CGI::parse(body).map { |k, v| [k.upcase, v.first] }]
349
349
 
350
350
  if response_fields.include? 'REBILL_ID'
351
351
  return parse_recurring(response_fields)
352
352
  end
353
353
 
354
354
  parsed = {}
355
- response_fields.each do |k,v|
355
+ response_fields.each do |k, v|
356
356
  mapped_key = FIELD_MAP.include?(k) ? FIELD_MAP[k] : k
357
357
  parsed[mapped_key] = v
358
358
  end
@@ -374,7 +374,7 @@ module ActiveMerchant #:nodoc:
374
374
  if CARD_CODE_ERRORS.include?(parsed[:card_code])
375
375
  message = CVVResult.messages[parsed[:card_code]]
376
376
  elsif AVS_ERRORS.include?(parsed[:avs_result_code])
377
- message = AVSResult.messages[ parsed[:avs_result_code] ]
377
+ message = AVSResult.messages[parsed[:avs_result_code]]
378
378
  else
379
379
  message = message.chomp('.')
380
380
  end
@@ -510,7 +510,7 @@ module ActiveMerchant #:nodoc:
510
510
  end
511
511
 
512
512
  def handle_response(response)
513
- if ignore_http_status || (200...300).include?(response.code.to_i)
513
+ if ignore_http_status || (200...300).cover?(response.code.to_i)
514
514
  return response.body
515
515
  end
516
516
  raise ResponseError.new(response)
@@ -230,7 +230,7 @@ module ActiveMerchant
230
230
 
231
231
  def parse_element(parsed, node)
232
232
  if !node.elements.empty?
233
- node.elements.each {|e| parse_element(parsed, e) }
233
+ node.elements.each { |e| parse_element(parsed, e) }
234
234
  else
235
235
  parsed[node.name.downcase] = node.text
236
236
  end
@@ -262,7 +262,7 @@ module ActiveMerchant
262
262
 
263
263
  def url(action = nil)
264
264
  base = test? ? test_url : live_url
265
- resource = (action == :store) ? 'vaulted-shoppers' : 'transactions'
265
+ resource = action == :store ? 'vaulted-shoppers' : 'transactions'
266
266
  "#{base}/#{resource}"
267
267
  end
268
268
 
@@ -279,7 +279,7 @@ module ActiveMerchant
279
279
  end
280
280
 
281
281
  def success_from(action, response)
282
- (200...300).include?(response.code.to_i)
282
+ (200...300).cover?(response.code.to_i)
283
283
  end
284
284
 
285
285
  def message_from(succeeded, parsed_response)
@@ -288,7 +288,7 @@ module ActiveMerchant
288
288
  end
289
289
 
290
290
  def authorization_from(action, parsed_response)
291
- (action == :store) ? vaulted_shopper_id(parsed_response) : parsed_response['transaction-id']
291
+ action == :store ? vaulted_shopper_id(parsed_response) : parsed_response['transaction-id']
292
292
  end
293
293
 
294
294
  def vaulted_shopper_id(parsed_response)
@@ -307,7 +307,7 @@ module ActiveMerchant
307
307
  end
308
308
 
309
309
  def root_element(action)
310
- (action == :store) ? 'vaulted-shopper' : 'card-transaction'
310
+ action == :store ? 'vaulted-shopper' : 'card-transaction'
311
311
  end
312
312
 
313
313
  def headers
@@ -47,7 +47,7 @@ module ActiveMerchant #:nodoc:
47
47
  money = amount(money)
48
48
  case normalize(paysource)
49
49
  when /1$/
50
- Response.new(true, SUCCESS_MESSAGE, {:paid_amount => money}, :test => true )
50
+ Response.new(true, SUCCESS_MESSAGE, {:paid_amount => money}, :test => true)
51
51
  when /2$/
52
52
  Response.new(false, FAILURE_MESSAGE, {:paid_amount => money, :error => FAILURE_MESSAGE }, :test => true, :error_code => STANDARD_ERROR_CODE[:processing_error])
53
53
  else
@@ -106,7 +106,7 @@ module ActiveMerchant #:nodoc:
106
106
  when /1$/
107
107
  Response.new(true, SUCCESS_MESSAGE, {}, :test => true)
108
108
  when /2$/
109
- Response.new(false, FAILURE_MESSAGE, {:error => FAILURE_MESSAGE },:test => true, :error_code => STANDARD_ERROR_CODE[:processing_error])
109
+ Response.new(false, FAILURE_MESSAGE, {:error => FAILURE_MESSAGE }, :test => true, :error_code => STANDARD_ERROR_CODE[:processing_error])
110
110
  else
111
111
  raise Error, UNSTORE_ERROR_MESSAGE
112
112
  end
@@ -130,7 +130,7 @@ module ActiveMerchant #:nodoc:
130
130
  money = amount(money)
131
131
  case normalize(paysource)
132
132
  when /1$/, AUTHORIZATION
133
- Response.new(true, SUCCESS_MESSAGE, {:authorized_amount => money}, :test => true, :authorization => AUTHORIZATION )
133
+ Response.new(true, SUCCESS_MESSAGE, {:authorized_amount => money}, :test => true, :authorization => AUTHORIZATION)
134
134
  when /2$/
135
135
  Response.new(false, FAILURE_MESSAGE, {:authorized_amount => money, :error => FAILURE_MESSAGE }, :test => true, :error_code => STANDARD_ERROR_CODE[:processing_error])
136
136
  else
@@ -76,7 +76,7 @@ module ActiveMerchant #:nodoc:
76
76
 
77
77
  private
78
78
 
79
- CURRENCY_CODES = Hash.new{|h,k| raise ArgumentError.new("Unsupported currency for HDFC: #{k}")}
79
+ CURRENCY_CODES = Hash.new { |h, k| raise ArgumentError.new("Unsupported currency for HDFC: #{k}") }
80
80
  CURRENCY_CODES['ISK'] = '352'
81
81
  CURRENCY_CODES['EUR'] = '978'
82
82
  CURRENCY_CODES['USD'] = '840'
@@ -112,7 +112,7 @@ module ActiveMerchant #:nodoc:
112
112
  body.children.each do |node|
113
113
  if node.text?
114
114
  next
115
- elsif (node.elements.size == 0)
115
+ elsif node.elements.size == 0
116
116
  response[node.name.downcase.to_sym] = node.text
117
117
  else
118
118
  node.elements.each do |childnode|
@@ -130,7 +130,6 @@ module ActiveMerchant #:nodoc:
130
130
  post[:Processor] = @options[:processor]
131
131
  post[:MerchantID] = @options[:merchant_id]
132
132
 
133
- url = (test? ? test_url : live_url)
134
133
  request = build_request(action, post)
135
134
  raw = ssl_post(url(action), request, headers)
136
135
  pairs = parse(raw)
@@ -182,7 +181,7 @@ module ActiveMerchant #:nodoc:
182
181
  end
183
182
 
184
183
  def build_request(action, post)
185
- mode = (action == 'void') ? 'cancel' : 'get'
184
+ mode = action == 'void' ? 'cancel' : 'get'
186
185
  xml = Builder::XmlMarkup.new :indent => 18
187
186
  xml.instruct!(:xml, :version => '1.0', :encoding => 'utf-8')
188
187
  xml.tag!("#{mode}Authorization") do
@@ -191,7 +190,7 @@ module ActiveMerchant #:nodoc:
191
190
  end
192
191
  end
193
192
  inner = CGI.escapeHTML(xml.target!)
194
- envelope(mode).sub(/{{ :body }}/,inner)
193
+ envelope(mode).sub(/{{ :body }}/, inner)
195
194
  end
196
195
 
197
196
  def envelope(mode)
@@ -214,7 +213,7 @@ module ActiveMerchant #:nodoc:
214
213
  end
215
214
 
216
215
  def six_random_digits
217
- (0...6).map { (48 + rand(10)).chr }.join
216
+ (0...6).map { rand(48..57).chr }.join
218
217
  end
219
218
  end
220
219
  end
@@ -39,6 +39,7 @@ module ActiveMerchant #:nodoc:
39
39
  #
40
40
  class BraintreeBlueGateway < Gateway
41
41
  include BraintreeCommon
42
+ include Empty
42
43
 
43
44
  self.display_name = 'Braintree (Blue Platform)'
44
45
 
@@ -53,7 +54,7 @@ module ActiveMerchant #:nodoc:
53
54
  super
54
55
 
55
56
  if wiredump_device.present?
56
- logger = ((Logger === wiredump_device) ? wiredump_device : Logger.new(wiredump_device))
57
+ logger = (Logger === wiredump_device ? wiredump_device : Logger.new(wiredump_device))
57
58
  logger.level = Logger::DEBUG
58
59
  else
59
60
  logger = Braintree::Configuration.logger.clone
@@ -69,7 +70,7 @@ module ActiveMerchant #:nodoc:
69
70
  :logger => options[:logger] || logger
70
71
  )
71
72
 
72
- @braintree_gateway = Braintree::Gateway.new( @configuration )
73
+ @braintree_gateway = Braintree::Gateway.new(@configuration)
73
74
  end
74
75
 
75
76
  def authorize(money, credit_card_or_vault_id, options = {})
@@ -123,7 +124,7 @@ module ActiveMerchant #:nodoc:
123
124
  if options[:customer].present?
124
125
  MultiResponse.new.tap do |r|
125
126
  customer_exists_response = nil
126
- r.process{customer_exists_response = check_customer_exists(options[:customer])}
127
+ r.process { customer_exists_response = check_customer_exists(options[:customer]) }
127
128
  r.process do
128
129
  if customer_exists_response.params['exists']
129
130
  add_credit_card_to_customer(creditcard, options)
@@ -143,7 +144,7 @@ module ActiveMerchant #:nodoc:
143
144
  braintree_credit_card = @braintree_gateway.customer.find(vault_id).credit_cards.detect(&:default?)
144
145
  return Response.new(false, 'Braintree::NotFoundError') if braintree_credit_card.nil?
145
146
 
146
- options.merge!(:update_existing_token => braintree_credit_card.token)
147
+ options[:update_existing_token] = braintree_credit_card.token
147
148
  credit_card_params = merge_credit_card_options({
148
149
  :credit_card => {
149
150
  :cardholder_name => creditcard.name,
@@ -259,7 +260,10 @@ module ActiveMerchant #:nodoc:
259
260
  expiration_year: credit_card.year.to_s,
260
261
  device_data: options[:device_data],
261
262
  }
262
- parameters[:billing_address] = map_address(options[:billing_address]) if options[:billing_address]
263
+ if options[:billing_address]
264
+ address = map_address(options[:billing_address])
265
+ parameters[:credit_card][:billing_address] = address unless address.all? { |_k, v| empty?(v) }
266
+ end
263
267
 
264
268
  result = @braintree_gateway.credit_card.create(parameters)
265
269
  ActiveMerchant::Billing::Response.new(
@@ -276,10 +280,10 @@ module ActiveMerchant #:nodoc:
276
280
 
277
281
  def scrub_email(email)
278
282
  return nil unless email.present?
279
- return nil if (
283
+ return nil if
280
284
  email !~ /^.+@[^\.]+(\.[^\.]+)+[a-z]$/i ||
281
285
  email =~ /\.(con|met)$/i
282
- )
286
+
283
287
  email
284
288
  end
285
289
 
@@ -303,13 +307,15 @@ module ActiveMerchant #:nodoc:
303
307
  end
304
308
 
305
309
  parameters[:credit_card] ||= {}
306
- parameters[:credit_card].merge!(:options => valid_options)
307
- parameters[:credit_card][:billing_address] = map_address(options[:billing_address]) if options[:billing_address]
310
+ parameters[:credit_card][:options] = valid_options
311
+ if options[:billing_address]
312
+ address = map_address(options[:billing_address])
313
+ parameters[:credit_card][:billing_address] = address unless address.all? { |_k, v| empty?(v) }
314
+ end
308
315
  parameters
309
316
  end
310
317
 
311
318
  def map_address(address)
312
- return {} if address.nil?
313
319
  mapped = {
314
320
  :street_address => address[:address1],
315
321
  :extended_address => address[:address2],
@@ -318,7 +324,7 @@ module ActiveMerchant #:nodoc:
318
324
  :region => address[:state],
319
325
  :postal_code => scrub_zip(address[:zip]),
320
326
  }
321
- if (address[:country] || address[:country_code_alpha2])
327
+ if address[:country] || address[:country_code_alpha2]
322
328
  mapped[:country_code_alpha2] = (address[:country] || address[:country_code_alpha2])
323
329
  elsif address[:country_name]
324
330
  mapped[:country_name] = address[:country_name]
@@ -568,7 +574,7 @@ module ActiveMerchant #:nodoc:
568
574
  }
569
575
 
570
576
  if options[:skip_advanced_fraud_checking]
571
- parameters[:options].merge!({ :skip_advanced_fraud_checking => options[:skip_advanced_fraud_checking] })
577
+ parameters[:options][:skip_advanced_fraud_checking] = options[:skip_advanced_fraud_checking]
572
578
  end
573
579
 
574
580
  parameters[:custom_fields] = options[:custom_fields]
@@ -237,7 +237,7 @@ module ActiveMerchant #:nodoc:
237
237
  {
238
238
  :UserName => @options[:user_name],
239
239
  :Password => @options[:password]
240
- }.merge(post).collect{|k,v| "#{k}=#{CGI.escape(v.to_s)}"}.join('&')
240
+ }.merge(post).collect { |k, v| "#{k}=#{CGI.escape(v.to_s)}" }.join('&')
241
241
  end
242
242
  end
243
243
  end
@@ -140,18 +140,18 @@ module ActiveMerchant #:nodoc:
140
140
 
141
141
  def add_address(post, creditcard, options={})
142
142
  post[:firstname] = creditcard.first_name
143
- post[:lastname ] = creditcard.last_name
143
+ post[:lastname] = creditcard.last_name
144
144
 
145
145
  return unless options[:billing_address]
146
146
 
147
147
  address = options[:billing_address]
148
- post[:address1 ] = address[:address1]
149
- post[:address2 ] = address[:address2]
150
- post[:city ] = address[:city]
151
- post[:state ] = address[:state]
152
- post[:zip ] = address[:zip]
153
- post[:country ] = address[:country]
154
- post[:phone ] = address[:phone]
148
+ post[:address1] = address[:address1]
149
+ post[:address2] = address[:address2]
150
+ post[:city] = address[:city]
151
+ post[:state] = address[:state]
152
+ post[:zip] = address[:zip]
153
+ post[:country] = address[:country]
154
+ post[:phone] = address[:phone]
155
155
  end
156
156
 
157
157
  def add_reference(post, authorization)
@@ -167,15 +167,15 @@ module ActiveMerchant #:nodoc:
167
167
 
168
168
  def add_payment(post, payment)
169
169
  post[:ccnumber] = payment.number
170
- post[:ccexp ] = "#{payment.month.to_s.rjust(2,"0")}#{payment.year.to_s[-2..-1]}"
171
- post[:cvv ] = payment.verification_value
170
+ post[:ccexp] = "#{payment.month.to_s.rjust(2, "0")}#{payment.year.to_s[-2..-1]}"
171
+ post[:cvv] = payment.verification_value
172
172
  end
173
173
 
174
174
  def parse(body)
175
175
  kvs = body.split('&')
176
176
 
177
177
  kvs.inject({}) { |h, kv|
178
- k,v = kv.split('=')
178
+ k, v = kv.split('=')
179
179
  h[k] = v
180
180
  h
181
181
  }
@@ -219,7 +219,7 @@ module ActiveMerchant #:nodoc:
219
219
  parameters[:password] = @options[:password]
220
220
  parameters[:username] = @options[:username]
221
221
 
222
- parameters.collect{|k,v| "#{k}=#{v}" }.join('&')
222
+ parameters.collect { |k, v| "#{k}=#{v}" }.join('&')
223
223
  end
224
224
 
225
225
  def error_code_from(response)