activemerchant 1.43.3 → 1.44.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 (326) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/CHANGELOG +133 -3
  5. data/CONTRIBUTORS +25 -0
  6. data/README.md +14 -39
  7. data/lib/active_merchant.rb +43 -2
  8. data/lib/active_merchant/billing.rb +3 -1
  9. data/lib/active_merchant/billing/base.rb +10 -2
  10. data/lib/active_merchant/billing/check.rb +29 -22
  11. data/lib/active_merchant/billing/compatibility.rb +120 -0
  12. data/lib/active_merchant/billing/credit_card.rb +129 -60
  13. data/lib/active_merchant/billing/credit_card_formatting.rb +4 -1
  14. data/lib/active_merchant/billing/credit_card_methods.rb +60 -43
  15. data/lib/active_merchant/billing/cvv_result.rb +15 -15
  16. data/lib/active_merchant/billing/gateway.rb +46 -11
  17. data/lib/active_merchant/billing/gateways/adyen.rb +205 -0
  18. data/lib/active_merchant/billing/gateways/app55.rb +1 -9
  19. data/lib/active_merchant/billing/gateways/authorize_net.rb +7 -391
  20. data/lib/active_merchant/billing/gateways/authorize_net_arb.rb +417 -0
  21. data/lib/active_merchant/billing/gateways/authorize_net_cim.rb +20 -4
  22. data/lib/active_merchant/billing/gateways/balanced.rb +127 -367
  23. data/lib/active_merchant/billing/gateways/barclays_epdq.rb +1 -1
  24. data/lib/active_merchant/billing/gateways/beanstream.rb +25 -6
  25. data/lib/active_merchant/billing/gateways/beanstream/beanstream_core.rb +3 -3
  26. data/lib/active_merchant/billing/gateways/blue_pay.rb +11 -3
  27. data/lib/active_merchant/billing/gateways/bogus.rb +1 -13
  28. data/lib/active_merchant/billing/gateways/borgun.rb +211 -0
  29. data/lib/active_merchant/billing/gateways/braintree_blue.rb +31 -13
  30. data/lib/active_merchant/billing/gateways/bridge_pay.rb +7 -0
  31. data/lib/active_merchant/billing/gateways/cashnet.rb +184 -0
  32. data/lib/active_merchant/billing/gateways/cc5.rb +45 -0
  33. data/lib/active_merchant/billing/gateways/certo_direct.rb +3 -2
  34. data/lib/active_merchant/billing/gateways/commercegate.rb +143 -0
  35. data/lib/active_merchant/billing/gateways/conekta.rb +56 -81
  36. data/lib/active_merchant/billing/gateways/cyber_source.rb +1 -0
  37. data/lib/active_merchant/billing/gateways/data_cash.rb +3 -1
  38. data/lib/active_merchant/billing/gateways/efsnet.rb +3 -14
  39. data/lib/active_merchant/billing/gateways/elavon.rb +45 -9
  40. data/lib/active_merchant/billing/gateways/epay.rb +2 -2
  41. data/lib/active_merchant/billing/gateways/eway.rb +1 -12
  42. data/lib/active_merchant/billing/gateways/eway_managed.rb +1 -1
  43. data/lib/active_merchant/billing/gateways/eway_rapid.rb +233 -202
  44. data/lib/active_merchant/billing/gateways/exact.rb +1 -1
  45. data/lib/active_merchant/billing/gateways/fat_zebra.rb +1 -1
  46. data/lib/active_merchant/billing/gateways/federated_canada.rb +1 -8
  47. data/lib/active_merchant/billing/gateways/finansbank.rb +2 -1
  48. data/lib/active_merchant/billing/gateways/first_pay.rb +108 -124
  49. data/lib/active_merchant/billing/gateways/firstdata_e4.rb +43 -13
  50. data/lib/active_merchant/billing/gateways/garanti.rb +2 -2
  51. data/lib/active_merchant/billing/gateways/hps.rb +281 -0
  52. data/lib/active_merchant/billing/gateways/iats_payments.rb +2 -2
  53. data/lib/active_merchant/billing/gateways/ideal/ideal_base.rb +1 -4
  54. data/lib/active_merchant/billing/gateways/inspire.rb +0 -8
  55. data/lib/active_merchant/billing/gateways/iridium.rb +25 -3
  56. data/lib/active_merchant/billing/gateways/jetpay.rb +1 -1
  57. data/lib/active_merchant/billing/gateways/linkpoint.rb +4 -13
  58. data/lib/active_merchant/billing/gateways/litle.rb +10 -4
  59. data/lib/active_merchant/billing/gateways/maxipago.rb +7 -0
  60. data/lib/active_merchant/billing/gateways/merchant_e_solutions.rb +0 -6
  61. data/lib/active_merchant/billing/gateways/merchant_ware.rb +4 -11
  62. data/lib/active_merchant/billing/gateways/merchant_ware_version_four.rb +3 -10
  63. data/lib/active_merchant/billing/gateways/mercury.rb +0 -7
  64. data/lib/active_merchant/billing/gateways/metrics_global.rb +1 -20
  65. data/lib/active_merchant/billing/gateways/migs.rb +1 -1
  66. data/lib/active_merchant/billing/gateways/moneris.rb +29 -21
  67. data/lib/active_merchant/billing/gateways/moneris_us.rb +1 -11
  68. data/lib/active_merchant/billing/gateways/money_movers.rb +1 -8
  69. data/lib/active_merchant/billing/gateways/nab_transact.rb +16 -15
  70. data/lib/active_merchant/billing/gateways/net_registry.rb +1 -1
  71. data/lib/active_merchant/billing/gateways/netbilling.rb +0 -7
  72. data/lib/active_merchant/billing/gateways/network_merchants.rb +21 -18
  73. data/lib/active_merchant/billing/gateways/ogone.rb +3 -3
  74. data/lib/active_merchant/billing/gateways/openpay.rb +1 -8
  75. data/lib/active_merchant/billing/gateways/optimal_payment.rb +34 -23
  76. data/lib/active_merchant/billing/gateways/orbital.rb +121 -4
  77. data/lib/active_merchant/billing/gateways/orbital/orbital_soft_descriptors.rb +22 -21
  78. data/lib/active_merchant/billing/gateways/pac_net_raven.rb +2 -9
  79. data/lib/active_merchant/billing/gateways/pago_facil.rb +122 -0
  80. data/lib/active_merchant/billing/gateways/pay_junction.rb +3 -13
  81. data/lib/active_merchant/billing/gateways/pay_secure.rb +0 -7
  82. data/lib/active_merchant/billing/gateways/paybox_direct.rb +1 -9
  83. data/lib/active_merchant/billing/gateways/payex.rb +1 -1
  84. data/lib/active_merchant/billing/gateways/payflow.rb +7 -1
  85. data/lib/active_merchant/billing/gateways/payflow/payflow_common_api.rb +15 -15
  86. data/lib/active_merchant/billing/gateways/payflow_express.rb +19 -19
  87. data/lib/active_merchant/billing/gateways/payment_express.rb +1 -1
  88. data/lib/active_merchant/billing/gateways/paymill.rb +7 -2
  89. data/lib/active_merchant/billing/gateways/paypal.rb +25 -14
  90. data/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb +1 -1
  91. data/lib/active_merchant/billing/gateways/paypal/paypal_recurring_api.rb +16 -2
  92. data/lib/active_merchant/billing/gateways/paypal_digital_goods.rb +3 -2
  93. data/lib/active_merchant/billing/gateways/paypal_express.rb +25 -0
  94. data/lib/active_merchant/billing/gateways/payscout.rb +1 -8
  95. data/lib/active_merchant/billing/gateways/pin.rb +39 -7
  96. data/lib/active_merchant/billing/gateways/plugnpay.rb +1 -12
  97. data/lib/active_merchant/billing/gateways/psigate.rb +1 -12
  98. data/lib/active_merchant/billing/gateways/qbms.rb +1 -1
  99. data/lib/active_merchant/billing/gateways/quantum.rb +2 -2
  100. data/lib/active_merchant/billing/gateways/quickpay.rb +17 -15
  101. data/lib/active_merchant/billing/gateways/realex.rb +3 -12
  102. data/lib/active_merchant/billing/gateways/sage.rb +1 -1
  103. data/lib/active_merchant/billing/gateways/sage/sage_bankcard.rb +2 -8
  104. data/lib/active_merchant/billing/gateways/sage/sage_core.rb +1 -1
  105. data/lib/active_merchant/billing/gateways/sage/sage_virtual_check.rb +1 -1
  106. data/lib/active_merchant/billing/gateways/sage_pay.rb +93 -28
  107. data/lib/active_merchant/billing/gateways/secure_net.rb +1 -8
  108. data/lib/active_merchant/billing/gateways/secure_pay_au.rb +3 -3
  109. data/lib/active_merchant/billing/gateways/secure_pay_tech.rb +0 -7
  110. data/lib/active_merchant/billing/gateways/skip_jack.rb +1 -2
  111. data/lib/active_merchant/billing/gateways/smart_ps.rb +8 -2
  112. data/lib/active_merchant/billing/gateways/spreedly_core.rb +2 -1
  113. data/lib/active_merchant/billing/gateways/stripe.rb +14 -15
  114. data/lib/active_merchant/billing/gateways/swipe_checkout.rb +0 -1
  115. data/lib/active_merchant/billing/gateways/trust_commerce.rb +4 -9
  116. data/lib/active_merchant/billing/gateways/usa_epay_advanced.rb +46 -43
  117. data/lib/active_merchant/billing/gateways/usa_epay_transaction.rb +7 -0
  118. data/lib/active_merchant/billing/gateways/verifi.rb +1 -8
  119. data/lib/active_merchant/billing/gateways/viaklix.rb +0 -6
  120. data/lib/active_merchant/billing/gateways/vindicia.rb +68 -44
  121. data/lib/active_merchant/billing/gateways/webpay.rb +1 -9
  122. data/lib/active_merchant/billing/gateways/wirecard.rb +117 -11
  123. data/lib/active_merchant/billing/gateways/worldpay.rb +50 -22
  124. data/lib/active_merchant/billing/gateways/worldpay_us.rb +181 -0
  125. data/lib/active_merchant/billing/model.rb +30 -0
  126. data/lib/active_merchant/billing/rails.rb +3 -0
  127. data/lib/active_merchant/billing/response.rb +20 -15
  128. data/lib/active_merchant/country.rb +327 -0
  129. data/lib/active_merchant/empty.rb +20 -0
  130. data/lib/active_merchant/errors.rb +29 -0
  131. data/lib/active_merchant/offsite_payments_shim.rb +19 -0
  132. data/lib/active_merchant/version.rb +1 -1
  133. metadata +60 -243
  134. metadata.gz.sig +0 -0
  135. data/gem-public_cert.pem +0 -21
  136. data/lib/active_merchant/billing/expiry_date.rb +0 -34
  137. data/lib/active_merchant/billing/gateways/orbital/avs_result.rb +0 -93
  138. data/lib/active_merchant/billing/gateways/orbital/cvv_result.rb +0 -34
  139. data/lib/active_merchant/billing/integrations.rb +0 -17
  140. data/lib/active_merchant/billing/integrations/a1agregator.rb +0 -26
  141. data/lib/active_merchant/billing/integrations/a1agregator/helper.rb +0 -31
  142. data/lib/active_merchant/billing/integrations/a1agregator/notification.rb +0 -186
  143. data/lib/active_merchant/billing/integrations/a1agregator/status.rb +0 -38
  144. data/lib/active_merchant/billing/integrations/action_view_helper.rb +0 -78
  145. data/lib/active_merchant/billing/integrations/authorize_net_sim.rb +0 -38
  146. data/lib/active_merchant/billing/integrations/authorize_net_sim/helper.rb +0 -229
  147. data/lib/active_merchant/billing/integrations/authorize_net_sim/notification.rb +0 -340
  148. data/lib/active_merchant/billing/integrations/bit_pay.rb +0 -30
  149. data/lib/active_merchant/billing/integrations/bit_pay/helper.rb +0 -66
  150. data/lib/active_merchant/billing/integrations/bit_pay/notification.rb +0 -74
  151. data/lib/active_merchant/billing/integrations/bit_pay/return.rb +0 -10
  152. data/lib/active_merchant/billing/integrations/bogus.rb +0 -23
  153. data/lib/active_merchant/billing/integrations/bogus/helper.rb +0 -17
  154. data/lib/active_merchant/billing/integrations/bogus/notification.rb +0 -11
  155. data/lib/active_merchant/billing/integrations/bogus/return.rb +0 -10
  156. data/lib/active_merchant/billing/integrations/chronopay.rb +0 -23
  157. data/lib/active_merchant/billing/integrations/chronopay/helper.rb +0 -120
  158. data/lib/active_merchant/billing/integrations/chronopay/notification.rb +0 -158
  159. data/lib/active_merchant/billing/integrations/chronopay/return.rb +0 -10
  160. data/lib/active_merchant/billing/integrations/citrus.rb +0 -28
  161. data/lib/active_merchant/billing/integrations/citrus/helper.rb +0 -57
  162. data/lib/active_merchant/billing/integrations/citrus/notification.rb +0 -133
  163. data/lib/active_merchant/billing/integrations/citrus/return.rb +0 -40
  164. data/lib/active_merchant/billing/integrations/direc_pay.rb +0 -41
  165. data/lib/active_merchant/billing/integrations/direc_pay/helper.rb +0 -200
  166. data/lib/active_merchant/billing/integrations/direc_pay/notification.rb +0 -76
  167. data/lib/active_merchant/billing/integrations/direc_pay/return.rb +0 -32
  168. data/lib/active_merchant/billing/integrations/direc_pay/status.rb +0 -37
  169. data/lib/active_merchant/billing/integrations/directebanking.rb +0 -47
  170. data/lib/active_merchant/billing/integrations/directebanking/helper.rb +0 -90
  171. data/lib/active_merchant/billing/integrations/directebanking/notification.rb +0 -120
  172. data/lib/active_merchant/billing/integrations/directebanking/return.rb +0 -11
  173. data/lib/active_merchant/billing/integrations/doku.rb +0 -24
  174. data/lib/active_merchant/billing/integrations/doku/helper.rb +0 -102
  175. data/lib/active_merchant/billing/integrations/doku/notification.rb +0 -69
  176. data/lib/active_merchant/billing/integrations/doku/return.rb +0 -10
  177. data/lib/active_merchant/billing/integrations/dotpay.rb +0 -22
  178. data/lib/active_merchant/billing/integrations/dotpay/helper.rb +0 -77
  179. data/lib/active_merchant/billing/integrations/dotpay/notification.rb +0 -86
  180. data/lib/active_merchant/billing/integrations/dotpay/return.rb +0 -11
  181. data/lib/active_merchant/billing/integrations/dwolla.rb +0 -23
  182. data/lib/active_merchant/billing/integrations/dwolla/common.rb +0 -23
  183. data/lib/active_merchant/billing/integrations/dwolla/helper.rb +0 -43
  184. data/lib/active_merchant/billing/integrations/dwolla/notification.rb +0 -64
  185. data/lib/active_merchant/billing/integrations/dwolla/return.rb +0 -49
  186. data/lib/active_merchant/billing/integrations/e_payment_plans.rb +0 -48
  187. data/lib/active_merchant/billing/integrations/e_payment_plans/helper.rb +0 -34
  188. data/lib/active_merchant/billing/integrations/e_payment_plans/notification.rb +0 -84
  189. data/lib/active_merchant/billing/integrations/easy_pay.rb +0 -30
  190. data/lib/active_merchant/billing/integrations/easy_pay/common.rb +0 -40
  191. data/lib/active_merchant/billing/integrations/easy_pay/helper.rb +0 -36
  192. data/lib/active_merchant/billing/integrations/easy_pay/notification.rb +0 -59
  193. data/lib/active_merchant/billing/integrations/epay.rb +0 -21
  194. data/lib/active_merchant/billing/integrations/epay/helper.rb +0 -55
  195. data/lib/active_merchant/billing/integrations/epay/notification.rb +0 -110
  196. data/lib/active_merchant/billing/integrations/first_data.rb +0 -38
  197. data/lib/active_merchant/billing/integrations/first_data/helper.rb +0 -61
  198. data/lib/active_merchant/billing/integrations/first_data/notification.rb +0 -56
  199. data/lib/active_merchant/billing/integrations/gestpay.rb +0 -25
  200. data/lib/active_merchant/billing/integrations/gestpay/common.rb +0 -42
  201. data/lib/active_merchant/billing/integrations/gestpay/helper.rb +0 -70
  202. data/lib/active_merchant/billing/integrations/gestpay/notification.rb +0 -85
  203. data/lib/active_merchant/billing/integrations/gestpay/return.rb +0 -10
  204. data/lib/active_merchant/billing/integrations/helper.rb +0 -123
  205. data/lib/active_merchant/billing/integrations/hi_trust.rb +0 -27
  206. data/lib/active_merchant/billing/integrations/hi_trust/helper.rb +0 -58
  207. data/lib/active_merchant/billing/integrations/hi_trust/notification.rb +0 -59
  208. data/lib/active_merchant/billing/integrations/hi_trust/return.rb +0 -68
  209. data/lib/active_merchant/billing/integrations/ipay88.rb +0 -23
  210. data/lib/active_merchant/billing/integrations/ipay88/helper.rb +0 -118
  211. data/lib/active_merchant/billing/integrations/ipay88/notification.rb +0 -103
  212. data/lib/active_merchant/billing/integrations/ipay88/return.rb +0 -29
  213. data/lib/active_merchant/billing/integrations/klarna.rb +0 -71
  214. data/lib/active_merchant/billing/integrations/klarna/helper.rb +0 -123
  215. data/lib/active_merchant/billing/integrations/klarna/notification.rb +0 -103
  216. data/lib/active_merchant/billing/integrations/liqpay.rb +0 -30
  217. data/lib/active_merchant/billing/integrations/liqpay/helper.rb +0 -43
  218. data/lib/active_merchant/billing/integrations/liqpay/notification.rb +0 -89
  219. data/lib/active_merchant/billing/integrations/liqpay/return.rb +0 -83
  220. data/lib/active_merchant/billing/integrations/maksuturva.rb +0 -86
  221. data/lib/active_merchant/billing/integrations/maksuturva/helper.rb +0 -119
  222. data/lib/active_merchant/billing/integrations/maksuturva/notification.rb +0 -48
  223. data/lib/active_merchant/billing/integrations/mollie_ideal.rb +0 -98
  224. data/lib/active_merchant/billing/integrations/mollie_ideal/helper.rb +0 -67
  225. data/lib/active_merchant/billing/integrations/mollie_ideal/notification.rb +0 -69
  226. data/lib/active_merchant/billing/integrations/mollie_ideal/return.rb +0 -10
  227. data/lib/active_merchant/billing/integrations/moneybookers.rb +0 -26
  228. data/lib/active_merchant/billing/integrations/moneybookers/helper.rb +0 -75
  229. data/lib/active_merchant/billing/integrations/moneybookers/notification.rb +0 -123
  230. data/lib/active_merchant/billing/integrations/nochex.rb +0 -88
  231. data/lib/active_merchant/billing/integrations/nochex/helper.rb +0 -68
  232. data/lib/active_merchant/billing/integrations/nochex/notification.rb +0 -94
  233. data/lib/active_merchant/billing/integrations/nochex/return.rb +0 -10
  234. data/lib/active_merchant/billing/integrations/notification.rb +0 -71
  235. data/lib/active_merchant/billing/integrations/pag_seguro.rb +0 -53
  236. data/lib/active_merchant/billing/integrations/pag_seguro/helper.rb +0 -121
  237. data/lib/active_merchant/billing/integrations/pag_seguro/notification.rb +0 -104
  238. data/lib/active_merchant/billing/integrations/paxum.rb +0 -44
  239. data/lib/active_merchant/billing/integrations/paxum/common.rb +0 -24
  240. data/lib/active_merchant/billing/integrations/paxum/helper.rb +0 -42
  241. data/lib/active_merchant/billing/integrations/paxum/notification.rb +0 -33
  242. data/lib/active_merchant/billing/integrations/pay_fast.rb +0 -70
  243. data/lib/active_merchant/billing/integrations/pay_fast/common.rb +0 -42
  244. data/lib/active_merchant/billing/integrations/pay_fast/helper.rb +0 -50
  245. data/lib/active_merchant/billing/integrations/pay_fast/notification.rb +0 -134
  246. data/lib/active_merchant/billing/integrations/pay_fast/return.rb +0 -10
  247. data/lib/active_merchant/billing/integrations/paydollar.rb +0 -59
  248. data/lib/active_merchant/billing/integrations/paydollar/helper.rb +0 -41
  249. data/lib/active_merchant/billing/integrations/paydollar/notification.rb +0 -64
  250. data/lib/active_merchant/billing/integrations/paydollar/return.rb +0 -15
  251. data/lib/active_merchant/billing/integrations/payflow_link.rb +0 -21
  252. data/lib/active_merchant/billing/integrations/payflow_link/helper.rb +0 -116
  253. data/lib/active_merchant/billing/integrations/payflow_link/notification.rb +0 -78
  254. data/lib/active_merchant/billing/integrations/paypal.rb +0 -39
  255. data/lib/active_merchant/billing/integrations/paypal/helper.rb +0 -119
  256. data/lib/active_merchant/billing/integrations/paypal/notification.rb +0 -227
  257. data/lib/active_merchant/billing/integrations/paypal/return.rb +0 -10
  258. data/lib/active_merchant/billing/integrations/paypal_payments_advanced.rb +0 -20
  259. data/lib/active_merchant/billing/integrations/paypal_payments_advanced/helper.rb +0 -15
  260. data/lib/active_merchant/billing/integrations/paysbuy.rb +0 -36
  261. data/lib/active_merchant/billing/integrations/paysbuy/helper.rb +0 -15
  262. data/lib/active_merchant/billing/integrations/paysbuy/notification.rb +0 -39
  263. data/lib/active_merchant/billing/integrations/payu_in.rb +0 -36
  264. data/lib/active_merchant/billing/integrations/payu_in/helper.rb +0 -76
  265. data/lib/active_merchant/billing/integrations/payu_in/notification.rb +0 -154
  266. data/lib/active_merchant/billing/integrations/payu_in/return.rb +0 -36
  267. data/lib/active_merchant/billing/integrations/payu_in_paisa.rb +0 -30
  268. data/lib/active_merchant/billing/integrations/payu_in_paisa/helper.rb +0 -19
  269. data/lib/active_merchant/billing/integrations/payu_in_paisa/notification.rb +0 -13
  270. data/lib/active_merchant/billing/integrations/payu_in_paisa/return.rb +0 -16
  271. data/lib/active_merchant/billing/integrations/platron.rb +0 -28
  272. data/lib/active_merchant/billing/integrations/platron/helper.rb +0 -32
  273. data/lib/active_merchant/billing/integrations/platron/notification.rb +0 -113
  274. data/lib/active_merchant/billing/integrations/pxpay.rb +0 -31
  275. data/lib/active_merchant/billing/integrations/pxpay/helper.rb +0 -113
  276. data/lib/active_merchant/billing/integrations/pxpay/notification.rb +0 -157
  277. data/lib/active_merchant/billing/integrations/pxpay/return.rb +0 -25
  278. data/lib/active_merchant/billing/integrations/quickpay.rb +0 -21
  279. data/lib/active_merchant/billing/integrations/quickpay/helper.rb +0 -96
  280. data/lib/active_merchant/billing/integrations/quickpay/notification.rb +0 -137
  281. data/lib/active_merchant/billing/integrations/rbkmoney.rb +0 -17
  282. data/lib/active_merchant/billing/integrations/rbkmoney/helper.rb +0 -23
  283. data/lib/active_merchant/billing/integrations/rbkmoney/notification.rb +0 -91
  284. data/lib/active_merchant/billing/integrations/return.rb +0 -42
  285. data/lib/active_merchant/billing/integrations/robokassa.rb +0 -49
  286. data/lib/active_merchant/billing/integrations/robokassa/common.rb +0 -19
  287. data/lib/active_merchant/billing/integrations/robokassa/helper.rb +0 -50
  288. data/lib/active_merchant/billing/integrations/robokassa/notification.rb +0 -55
  289. data/lib/active_merchant/billing/integrations/robokassa/return.rb +0 -17
  290. data/lib/active_merchant/billing/integrations/sage_pay_form.rb +0 -37
  291. data/lib/active_merchant/billing/integrations/sage_pay_form/encryption.rb +0 -33
  292. data/lib/active_merchant/billing/integrations/sage_pay_form/helper.rb +0 -136
  293. data/lib/active_merchant/billing/integrations/sage_pay_form/notification.rb +0 -210
  294. data/lib/active_merchant/billing/integrations/sage_pay_form/return.rb +0 -31
  295. data/lib/active_merchant/billing/integrations/two_checkout.rb +0 -44
  296. data/lib/active_merchant/billing/integrations/two_checkout/helper.rb +0 -107
  297. data/lib/active_merchant/billing/integrations/two_checkout/notification.rb +0 -171
  298. data/lib/active_merchant/billing/integrations/two_checkout/return.rb +0 -58
  299. data/lib/active_merchant/billing/integrations/universal.rb +0 -23
  300. data/lib/active_merchant/billing/integrations/universal/helper.rb +0 -76
  301. data/lib/active_merchant/billing/integrations/universal/notification.rb +0 -52
  302. data/lib/active_merchant/billing/integrations/universal/return.rb +0 -18
  303. data/lib/active_merchant/billing/integrations/valitor.rb +0 -33
  304. data/lib/active_merchant/billing/integrations/valitor/helper.rb +0 -86
  305. data/lib/active_merchant/billing/integrations/valitor/notification.rb +0 -13
  306. data/lib/active_merchant/billing/integrations/valitor/response_fields.rb +0 -97
  307. data/lib/active_merchant/billing/integrations/valitor/return.rb +0 -13
  308. data/lib/active_merchant/billing/integrations/verkkomaksut.rb +0 -20
  309. data/lib/active_merchant/billing/integrations/verkkomaksut/helper.rb +0 -88
  310. data/lib/active_merchant/billing/integrations/verkkomaksut/notification.rb +0 -59
  311. data/lib/active_merchant/billing/integrations/web_pay.rb +0 -45
  312. data/lib/active_merchant/billing/integrations/web_pay/common.rb +0 -50
  313. data/lib/active_merchant/billing/integrations/web_pay/helper.rb +0 -68
  314. data/lib/active_merchant/billing/integrations/web_pay/notification.rb +0 -51
  315. data/lib/active_merchant/billing/integrations/webmoney.rb +0 -43
  316. data/lib/active_merchant/billing/integrations/webmoney/common.rb +0 -17
  317. data/lib/active_merchant/billing/integrations/webmoney/helper.rb +0 -40
  318. data/lib/active_merchant/billing/integrations/webmoney/notification.rb +0 -47
  319. data/lib/active_merchant/billing/integrations/wirecard_checkout_page.rb +0 -39
  320. data/lib/active_merchant/billing/integrations/wirecard_checkout_page/common.rb +0 -104
  321. data/lib/active_merchant/billing/integrations/wirecard_checkout_page/helper.rb +0 -145
  322. data/lib/active_merchant/billing/integrations/wirecard_checkout_page/notification.rb +0 -101
  323. data/lib/active_merchant/billing/integrations/wirecard_checkout_page/return.rb +0 -35
  324. data/lib/active_merchant/billing/integrations/world_pay.rb +0 -34
  325. data/lib/active_merchant/billing/integrations/world_pay/helper.rb +0 -101
  326. data/lib/active_merchant/billing/integrations/world_pay/notification.rb +0 -160
@@ -0,0 +1,120 @@
1
+ module ActiveMerchant
2
+ module Billing
3
+ module Compatibility
4
+ module Model
5
+ def valid?
6
+ Compatibility.deprecated
7
+ super
8
+ end
9
+
10
+ def errors
11
+ Compatibility.deprecated
12
+ internal_errors
13
+ end
14
+ end
15
+
16
+ @rails_required = false
17
+ def self.rails_required!
18
+ @rails_required = true
19
+ end
20
+
21
+ def self.deprecated
22
+ ActiveMerchant.deprecated(
23
+ %(Implicit inclusion of Rails-specific functionality is deprecated.) +
24
+ %( Explicitly require "active_merchant/billing/rails" if you need it.)
25
+ ) unless @rails_required
26
+ end
27
+
28
+ def self.humanize(lower_case_and_underscored_word)
29
+ result = lower_case_and_underscored_word.to_s.dup
30
+ result.gsub!(/_id$/, "")
31
+ result.gsub!(/_/, ' ')
32
+ result.gsub(/([a-z\d]*)/i) { |match|
33
+ match.downcase
34
+ }.gsub(/^\w/) { $&.upcase }
35
+ end
36
+ end
37
+ end
38
+ end
39
+
40
+ # This lives in compatibility until we remove the deprecation for implicitly
41
+ # requiring Rails
42
+ module ActiveMerchant
43
+ module Billing
44
+ module Rails
45
+ module Model
46
+ def valid?
47
+ internal_errors.clear
48
+
49
+ validate.each do |attribute, errors|
50
+ errors.each do |error|
51
+ internal_errors.add(attribute, error)
52
+ end
53
+ end
54
+
55
+ internal_errors.empty?
56
+ end
57
+
58
+ private
59
+
60
+ def internal_errors
61
+ @errors ||= Errors.new
62
+ end
63
+
64
+ class Errors < Hash
65
+ def initialize
66
+ super(){|h, k| h[k] = []}
67
+ end
68
+
69
+ alias count size
70
+
71
+ def [](key)
72
+ super(key.to_s)
73
+ end
74
+
75
+ def []=(key, value)
76
+ super(key.to_s, value)
77
+ end
78
+
79
+ def empty?
80
+ all?{|k, v| v && v.empty?}
81
+ end
82
+
83
+ def on(field)
84
+ self[field].to_a.first
85
+ end
86
+
87
+ def add(field, error)
88
+ self[field] << error
89
+ end
90
+
91
+ def add_to_base(error)
92
+ add(:base, error)
93
+ end
94
+
95
+ def each_full
96
+ full_messages.each{|msg| yield msg}
97
+ end
98
+
99
+ def full_messages
100
+ result = []
101
+
102
+ self.each do |key, messages|
103
+ next unless(messages && !messages.empty?)
104
+ if key == 'base'
105
+ result << "#{messages.first}"
106
+ else
107
+ result << "#{Compatibility.humanize(key)} #{messages.first}"
108
+ end
109
+ end
110
+
111
+ result
112
+ end
113
+ end
114
+ end
115
+ end
116
+
117
+ Compatibility::Model.send(:include, Rails::Model)
118
+ end
119
+ end
120
+
@@ -1,6 +1,6 @@
1
1
  require 'time'
2
2
  require 'date'
3
- require 'active_merchant/billing/expiry_date'
3
+ require "active_merchant/billing/model"
4
4
 
5
5
  module ActiveMerchant #:nodoc:
6
6
  module Billing #:nodoc:
@@ -43,12 +43,11 @@ module ActiveMerchant #:nodoc:
43
43
  # :number => '4242424242424242'
44
44
  # )
45
45
  #
46
- # cc.valid? # => true
46
+ # cc.validate # => {}
47
47
  # cc.display_number # => XXXX-XXXX-XXXX-4242
48
48
  #
49
- class CreditCard
49
+ class CreditCard < Model
50
50
  include CreditCardMethods
51
- include Validateable
52
51
 
53
52
  cattr_accessor :require_verification_value
54
53
  self.require_verification_value = true
@@ -56,17 +55,21 @@ module ActiveMerchant #:nodoc:
56
55
  # Returns or sets the credit card number.
57
56
  #
58
57
  # @return [String]
59
- attr_accessor :number
58
+ attr_reader :number
59
+
60
+ def number=(value)
61
+ @number = (empty?(value) ? value : value.to_s.gsub(/[^\d]/, ""))
62
+ end
60
63
 
61
64
  # Returns or sets the expiry month for the card.
62
65
  #
63
66
  # @return [Integer]
64
- attr_accessor :month
67
+ attr_reader :month
65
68
 
66
69
  # Returns or sets the expiry year for the card.
67
70
  #
68
71
  # @return [Integer]
69
- attr_accessor :year
72
+ attr_reader :year
70
73
 
71
74
  # Returns or sets the credit card brand.
72
75
  #
@@ -88,7 +91,18 @@ module ActiveMerchant #:nodoc:
88
91
  # Or, if you wish to test your implementation, +'bogus'+.
89
92
  #
90
93
  # @return (String) the credit card brand
91
- attr_accessor :brand
94
+ def brand
95
+ if !defined?(@brand) || empty?(@brand)
96
+ self.class.brand?(number)
97
+ else
98
+ @brand
99
+ end
100
+ end
101
+
102
+ def brand=(value)
103
+ value = value && value.to_s.dup
104
+ @brand = (value.respond_to?(:downcase) ? value.downcase : value)
105
+ end
92
106
 
93
107
  # Returns or sets the first name of the card holder.
94
108
  #
@@ -101,7 +115,8 @@ module ActiveMerchant #:nodoc:
101
115
  attr_accessor :last_name
102
116
 
103
117
  # Required for Switch / Solo cards
104
- attr_accessor :start_month, :start_year, :issue_number
118
+ attr_reader :start_month, :start_year
119
+ attr_accessor :issue_number
105
120
 
106
121
  # Returns or sets the card verification value.
107
122
  #
@@ -118,12 +133,12 @@ module ActiveMerchant #:nodoc:
118
133
  attr_accessor :track_data
119
134
 
120
135
  def type
121
- self.class.deprecated "CreditCard#type is deprecated and will be removed from a future release of ActiveMerchant. Please use CreditCard#brand instead."
136
+ ActiveMerchant.deprecated "CreditCard#type is deprecated and will be removed from a future release of ActiveMerchant. Please use CreditCard#brand instead."
122
137
  brand
123
138
  end
124
139
 
125
140
  def type=(value)
126
- self.class.deprecated "CreditCard#type is deprecated and will be removed from a future release of ActiveMerchant. Please use CreditCard#brand instead."
141
+ ActiveMerchant.deprecated "CreditCard#type is deprecated and will be removed from a future release of ActiveMerchant. Please use CreditCard#brand instead."
127
142
  self.brand = value
128
143
  end
129
144
 
@@ -148,19 +163,19 @@ module ActiveMerchant #:nodoc:
148
163
 
149
164
  # Returns whether the +first_name+ attribute has been set.
150
165
  def first_name?
151
- @first_name.present?
166
+ first_name.present?
152
167
  end
153
168
 
154
169
  # Returns whether the +last_name+ attribute has been set.
155
170
  def last_name?
156
- @last_name.present?
171
+ last_name.present?
157
172
  end
158
173
 
159
174
  # Returns the full name of the card holder.
160
175
  #
161
176
  # @return [String] the full name of the card holder
162
177
  def name
163
- [@first_name, @last_name].compact.join(' ')
178
+ [first_name, last_name].compact.join(' ')
164
179
  end
165
180
 
166
181
  def name=(full_name)
@@ -169,8 +184,21 @@ module ActiveMerchant #:nodoc:
169
184
  self.first_name = names.join(" ")
170
185
  end
171
186
 
187
+ %w(month year start_month start_year).each do |m|
188
+ class_eval %(
189
+ def #{m}=(v)
190
+ @#{m} = case v
191
+ when "", nil, 0
192
+ nil
193
+ else
194
+ v.to_i
195
+ end
196
+ end
197
+ )
198
+ end
199
+
172
200
  def verification_value?
173
- !@verification_value.blank?
201
+ !verification_value.blank?
174
202
  end
175
203
 
176
204
  # Returns a display-friendly version of the card number.
@@ -199,15 +227,16 @@ module ActiveMerchant #:nodoc:
199
227
  #
200
228
  # Any validation errors are added to the {#errors} attribute.
201
229
  def validate
202
- validate_essential_attributes
230
+ errors = validate_essential_attributes + validate_verification_value
203
231
 
204
232
  # Bogus card is pretty much for testing purposes. Lets just skip these extra tests if its used
205
- return if brand == 'bogus'
233
+ return errors_hash(errors) if brand == 'bogus'
206
234
 
207
- validate_card_brand
208
- validate_card_number
209
- validate_verification_value
210
- validate_switch_or_solo_attributes
235
+ errors_hash(
236
+ errors +
237
+ validate_card_brand_and_number +
238
+ validate_switch_or_solo_attributes
239
+ )
211
240
  end
212
241
 
213
242
  def self.requires_verification_value?
@@ -216,66 +245,106 @@ module ActiveMerchant #:nodoc:
216
245
 
217
246
  private
218
247
 
219
- def before_validate #:nodoc:
220
- self.month = month.to_i
221
- self.year = year.to_i
222
- self.start_month = start_month.to_i unless start_month.nil?
223
- self.start_year = start_year.to_i unless start_year.nil?
224
- self.number = number.to_s.gsub(/[^\d]/, "")
225
- self.brand.downcase! if brand.respond_to?(:downcase)
226
- self.brand = self.class.brand?(number) if brand.blank?
248
+ def validate_essential_attributes #:nodoc:
249
+ errors = []
250
+
251
+ errors << [:first_name, "cannot be empty"] if first_name.blank?
252
+ errors << [:last_name, "cannot be empty"] if last_name.blank?
253
+
254
+ if(empty?(month) || empty?(year))
255
+ errors << [:month, "is required"] if empty?(month)
256
+ errors << [:year, "is required"] if empty?(year)
257
+ else
258
+ errors << [:month, "is not a valid month"] if !valid_month?(month)
259
+
260
+ if expired?
261
+ errors << [:year, "expired"]
262
+ else
263
+ errors << [:year, "is not a valid year"] if !valid_expiry_year?(year)
264
+ end
265
+ end
266
+
267
+ errors
227
268
  end
228
269
 
229
- def validate_card_number #:nodoc:
230
- if number.blank?
231
- errors.add :number, "is required"
270
+ def validate_card_brand_and_number #:nodoc:
271
+ errors = []
272
+
273
+ if !empty?(brand)
274
+ errors << [:brand, "is invalid"] if !CreditCard.card_companies.keys.include?(brand)
275
+ end
276
+
277
+ if empty?(number)
278
+ errors << [:number, "is required"]
232
279
  elsif !CreditCard.valid_number?(number)
233
- errors.add :number, "is not a valid credit card number"
280
+ errors << [:number, "is not a valid credit card number"]
234
281
  end
235
282
 
236
- unless errors.on(:number) || errors.on(:brand)
237
- errors.add :brand, "does not match the card number" unless CreditCard.matching_brand?(number, brand)
283
+ if errors.empty?
284
+ errors << [:brand, "does not match the card number"] if !CreditCard.matching_brand?(number, brand)
238
285
  end
239
- end
240
286
 
241
- def validate_card_brand #:nodoc:
242
- errors.add :brand, "is required" if brand.blank? && number.present?
243
- errors.add :brand, "is invalid" unless brand.blank? || CreditCard.card_companies.keys.include?(brand)
287
+ errors
244
288
  end
245
289
 
246
- alias_method :validate_card_type, :validate_card_brand
247
-
248
- def validate_essential_attributes #:nodoc:
249
- errors.add :first_name, "cannot be empty" if @first_name.blank?
250
- errors.add :last_name, "cannot be empty" if @last_name.blank?
290
+ def validate_verification_value #:nodoc:
291
+ errors = []
251
292
 
252
- if @month.to_i.zero? || @year.to_i.zero?
253
- errors.add :month, "is required" if @month.to_i.zero?
254
- errors.add :year, "is required" if @year.to_i.zero?
255
- else
256
- errors.add :month, "is not a valid month" unless valid_month?(@month)
257
- errors.add :year, "expired" if expired?
258
- errors.add :year, "is not a valid year" unless expired? || valid_expiry_year?(@year)
293
+ if verification_value?
294
+ unless valid_card_verification_value?(verification_value, brand)
295
+ errors << [:verification_value, "should be #{card_verification_value_length(brand)} digits"]
296
+ end
297
+ elsif CreditCard.requires_verification_value?
298
+ errors << [:verification_value, "is required"]
259
299
  end
300
+ errors
260
301
  end
261
302
 
262
303
  def validate_switch_or_solo_attributes #:nodoc:
304
+ errors = []
305
+
263
306
  if %w[switch solo].include?(brand)
264
- unless valid_month?(@start_month) && valid_start_year?(@start_year) || valid_issue_number?(@issue_number)
265
- if @issue_number.blank?
266
- errors.add :start_month, "is invalid" unless valid_month?(@start_month)
267
- errors.add :start_year, "is invalid" unless valid_start_year?(@start_year)
268
- errors.add :issue_number, "cannot be empty"
307
+ valid_start_month = valid_month?(start_month)
308
+ valid_start_year = valid_start_year?(start_year)
309
+
310
+ if((!valid_start_month || !valid_start_year) && !valid_issue_number?(issue_number))
311
+ if empty?(issue_number)
312
+ errors << [:issue_number, "cannot be empty"]
313
+ errors << [:start_month, "is invalid"] if !valid_start_month
314
+ errors << [:start_year, "is invalid"] if !valid_start_year
269
315
  else
270
- errors.add :issue_number, "is invalid" unless valid_issue_number?(@issue_number)
316
+ errors << [:issue_number, "is invalid"] if !valid_issue_number?(issue_number)
271
317
  end
272
318
  end
273
319
  end
320
+
321
+ errors
274
322
  end
275
323
 
276
- def validate_verification_value #:nodoc:
277
- if CreditCard.requires_verification_value?
278
- errors.add :verification_value, "is required" unless verification_value?
324
+ class ExpiryDate #:nodoc:
325
+ attr_reader :month, :year
326
+ def initialize(month, year)
327
+ @month = month.to_i
328
+ @year = year.to_i
329
+ end
330
+
331
+ def expired? #:nodoc:
332
+ Time.now.utc > expiration
333
+ end
334
+
335
+ def expiration #:nodoc:
336
+ begin
337
+ Time.utc(year, month, month_days, 23, 59, 59)
338
+ rescue ArgumentError
339
+ Time.at(0).utc
340
+ end
341
+ end
342
+
343
+ private
344
+ def month_days
345
+ mdays = [nil,31,28,31,30,31,30,31,31,30,31,30,31]
346
+ mdays[2] = 29 if Date.leap?(year)
347
+ mdays[month]
279
348
  end
280
349
  end
281
350
  end
@@ -2,6 +2,10 @@ module ActiveMerchant #:nodoc:
2
2
  module Billing #:nodoc:
3
3
  module CreditCardFormatting
4
4
 
5
+ def expdate(credit_card)
6
+ "#{format(credit_card.month, :two_digits)}#{format(credit_card.year, :two_digits)}"
7
+ end
8
+
5
9
  # This method is used to format numerical information pertaining to credit cards.
6
10
  #
7
11
  # format(2005, :two_digits) # => "05"
@@ -15,7 +19,6 @@ module ActiveMerchant #:nodoc:
15
19
  else number
16
20
  end
17
21
  end
18
-
19
22
  end
20
23
  end
21
24
  end
@@ -2,7 +2,7 @@ module ActiveMerchant #:nodoc:
2
2
  module Billing #:nodoc:
3
3
  # Convenience methods that can be included into a custom Credit Card object, such as an ActiveRecord based Credit Card object.
4
4
  module CreditCardMethods
5
- CARD_COMPANIES = {
5
+ CARD_COMPANIES = {
6
6
  'visa' => /^4\d{12}(\d{3})?$/,
7
7
  'master' => /^(5[1-5]\d{4}|677189)\d{10}$/,
8
8
  'discover' => /^(6011|65\d{2}|64[4-9]\d)\d{12}|(62\d{14})$/,
@@ -16,116 +16,133 @@ module ActiveMerchant #:nodoc:
16
16
  'forbrugsforeningen' => /^600722\d{10}$/,
17
17
  'laser' => /^(6304|6706|6709|6771(?!89))\d{8}(\d{4}|\d{6,7})?$/
18
18
  }
19
-
19
+
20
20
  def self.included(base)
21
21
  base.extend(ClassMethods)
22
22
  end
23
-
23
+
24
24
  def valid_month?(month)
25
25
  (1..12).include?(month.to_i)
26
26
  end
27
-
27
+
28
28
  def valid_expiry_year?(year)
29
29
  (Time.now.year..Time.now.year + 20).include?(year.to_i)
30
30
  end
31
-
31
+
32
32
  def valid_start_year?(year)
33
- year.to_s =~ /^\d{4}$/ && year.to_i > 1987
33
+ ((year.to_s =~ /^\d{4}$/) && (year.to_i > 1987))
34
+ end
35
+
36
+ # Credit card providers have 3 digit verification values
37
+ # This isn't standardised, these are called various names such as
38
+ # CVC, CVV, CID, CSC and more
39
+ # See: http://en.wikipedia.org/wiki/Card_security_code
40
+ # American Express is the exception with 4 digits
41
+ #
42
+ # Below are links from the card providers with their requirements
43
+ # visa: http://usa.visa.com/personal/security/3-digit-security-code.jsp
44
+ # master: http://www.mastercard.com/ca/merchant/en/getstarted/Anatomy_MasterCard.html
45
+ # jcb: http://www.jcbcard.com/security/info.html
46
+ # diners_club: http://www.dinersclub.com/assets/DinersClub_card_ID_features.pdf
47
+ # discover: https://www.discover.com/credit-cards/help-center/glossary.html
48
+ # american_express: https://online.americanexpress.com/myca/fuidfyp/us/action?request_type=un_fuid&Face=en_US
49
+ def valid_card_verification_value?(cvv, brand)
50
+ cvv.to_s =~ /^\d{#{card_verification_value_length(brand)}}$/
34
51
  end
35
52
 
36
- def valid_issue_number?(number)
37
- number.to_s =~ /^\d{1,2}$/
53
+ def card_verification_value_length(brand)
54
+ brand == 'american_express' ? 4 : 3
38
55
  end
39
56
 
57
+ def valid_issue_number?(number)
58
+ (number.to_s =~ /^\d{1,2}$/)
59
+ end
60
+
40
61
  module ClassMethods
41
- # Returns true if it validates. Optionally, you can pass a card brand as an argument and
62
+ # Returns true if it validates. Optionally, you can pass a card brand as an argument and
42
63
  # make sure it is of the correct brand.
43
64
  #
44
65
  # References:
45
66
  # - http://perl.about.com/compute/perl/library/nosearch/P073000.htm
46
67
  # - http://www.beachnet.com/~hstiles/cardtype.html
47
68
  def valid_number?(number)
48
- valid_test_mode_card_number?(number) ||
49
- valid_card_number_length?(number) &&
69
+ valid_test_mode_card_number?(number) ||
70
+ valid_card_number_length?(number) &&
50
71
  valid_checksum?(number)
51
72
  end
52
-
73
+
53
74
  # Regular expressions for the known card companies.
54
- #
55
- # References:
56
- # - http://en.wikipedia.org/wiki/Credit_card_number
57
- # - http://www.barclaycardbusiness.co.uk/information_zone/processing/bin_rules.html
75
+ #
76
+ # References:
77
+ # - http://en.wikipedia.org/wiki/Credit_card_number
78
+ # - http://www.barclaycardbusiness.co.uk/information_zone/processing/bin_rules.html
58
79
  def card_companies
59
80
  CARD_COMPANIES
60
81
  end
61
-
82
+
62
83
  # Returns a string containing the brand of card from the list of known information below.
63
84
  # Need to check the cards in a particular order, as there is some overlap of the allowable ranges
64
85
  #--
65
- # TODO Refactor this method. We basically need to tighten up the Maestro Regexp.
66
- #
67
- # Right now the Maestro regexp overlaps with the MasterCard regexp (IIRC). If we can tighten
68
- # things up, we can boil this whole thing down to something like...
69
- #
86
+ # TODO Refactor this method. We basically need to tighten up the Maestro Regexp.
87
+ #
88
+ # Right now the Maestro regexp overlaps with the MasterCard regexp (IIRC). If we can tighten
89
+ # things up, we can boil this whole thing down to something like...
90
+ #
70
91
  # def brand?(number)
71
92
  # return 'visa' if valid_test_mode_card_number?(number)
72
93
  # card_companies.find([nil]) { |brand, regexp| number =~ regexp }.first.dup
73
94
  # end
74
- #
95
+ #
75
96
  def brand?(number)
76
97
  return 'bogus' if valid_test_mode_card_number?(number)
77
98
 
78
99
  card_companies.reject { |c,p| c == 'maestro' }.each do |company, pattern|
79
- return company.dup if number =~ pattern
100
+ return company.dup if number =~ pattern
80
101
  end
81
-
102
+
82
103
  return 'maestro' if number =~ card_companies['maestro']
83
104
 
84
105
  return nil
85
106
  end
86
107
 
87
108
  def type?(number)
88
- deprecated "CreditCard#type? is deprecated and will be removed from a future release of ActiveMerchant. Please use CreditCard#brand? instead."
109
+ ActiveMerchant.deprecated "CreditCard#type? is deprecated and will be removed from a future release of ActiveMerchant. Please use CreditCard#brand? instead."
89
110
  brand?(number)
90
111
  end
91
-
112
+
92
113
  def first_digits(number)
93
- number.to_s.slice(0,6)
114
+ number.to_s.slice(0,6)
94
115
  end
95
-
96
- def last_digits(number)
97
- number.to_s.length <= 4 ? number : number.to_s.slice(-4..-1)
116
+
117
+ def last_digits(number)
118
+ number.to_s.length <= 4 ? number : number.to_s.slice(-4..-1)
98
119
  end
99
-
120
+
100
121
  def mask(number)
101
122
  "XXXX-XXXX-XXXX-#{last_digits(number)}"
102
123
  end
103
-
124
+
104
125
  # Checks to see if the calculated brand matches the specified brand
105
126
  def matching_brand?(number, brand)
106
127
  brand?(number) == brand
107
128
  end
108
129
 
109
130
  def matching_type?(number, brand)
110
- deprecated "CreditCard#matching_type? is deprecated and will be removed from a future release of ActiveMerchant. Please use CreditCard#matching_brand? instead."
131
+ ActiveMerchant.deprecated "CreditCard#matching_type? is deprecated and will be removed from a future release of ActiveMerchant. Please use CreditCard#matching_brand? instead."
111
132
  matching_brand?(number, brand)
112
133
  end
113
134
 
114
- def deprecated(message)
115
- warn(Kernel.caller[1] + message)
116
- end
117
-
118
135
  private
119
-
136
+
120
137
  def valid_card_number_length?(number) #:nodoc:
121
138
  number.to_s.length >= 12
122
139
  end
123
-
140
+
124
141
  def valid_test_mode_card_number?(number) #:nodoc:
125
- ActiveMerchant::Billing::Base.test? &&
142
+ ActiveMerchant::Billing::Base.test? &&
126
143
  %w[1 2 3 success failure error].include?(number.to_s)
127
144
  end
128
-
145
+
129
146
  # Checks the validity of a card number by use of the Luhn Algorithm.
130
147
  # Please see http://en.wikipedia.org/wiki/Luhn_algorithm for details.
131
148
  def valid_checksum?(number) #:nodoc:
@@ -134,7 +151,7 @@ module ActiveMerchant #:nodoc:
134
151
  weight = number[-1 * (i + 2), 1].to_i * (2 - (i % 2))
135
152
  sum += (weight < 10) ? weight : weight - 9
136
153
  end
137
-
154
+
138
155
  (number[-1,1].to_i == (10 - sum % 10) % 10)
139
156
  end
140
157
  end