spree_liqpay 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (399) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +56 -0
  4. data/Rakefile +15 -0
  5. data/app/controllers/spree/checkout_controller_decorator.rb +17 -0
  6. data/app/controllers/spree/liqpay_status_controller.rb +25 -0
  7. data/app/models/spree/payment_method/liqpay.rb +39 -0
  8. data/app/views/spree/checkout/liqpay_result.html.erb +9 -0
  9. data/app/views/spree/checkout/payment/_liqpay.html.erb +16 -0
  10. data/config/routes.rb +13 -0
  11. data/lib/active_merchant/billing/liqpay.rb +44 -0
  12. data/lib/spree_liqpay.rb +3 -0
  13. data/lib/spree_liqpay/engine.rb +31 -0
  14. data/lib/spree_liqpay/factories.rb +9 -0
  15. data/lib/spree_liqpay/version.rb +3 -0
  16. data/lib/tasks/spree_liqpay_tasks.rake +8 -0
  17. data/spec/controllers/spree/checkout_controller_spec.rb +54 -0
  18. data/spec/controllers/spree/liqpay_status_controller_spec.rb +116 -0
  19. data/spec/dummy/Rakefile +6 -0
  20. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  21. data/spec/dummy/app/assets/stylesheets/application.css +15 -0
  22. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  23. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  24. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  25. data/spec/dummy/bin/bundle +3 -0
  26. data/spec/dummy/bin/rails +4 -0
  27. data/spec/dummy/bin/rake +4 -0
  28. data/spec/dummy/bin/setup +29 -0
  29. data/spec/dummy/config.ru +4 -0
  30. data/spec/dummy/config/application.rb +25 -0
  31. data/spec/dummy/config/boot.rb +5 -0
  32. data/spec/dummy/config/database.yml +25 -0
  33. data/spec/dummy/config/environment.rb +5 -0
  34. data/spec/dummy/config/environments/development.rb +42 -0
  35. data/spec/dummy/config/environments/production.rb +79 -0
  36. data/spec/dummy/config/environments/test.rb +43 -0
  37. data/spec/dummy/config/initializers/assets.rb +11 -0
  38. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  39. data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
  40. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  41. data/spec/dummy/config/initializers/inflections.rb +16 -0
  42. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  43. data/spec/dummy/config/initializers/session_store.rb +3 -0
  44. data/spec/dummy/config/initializers/spree.rb +1 -0
  45. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  46. data/spec/dummy/config/locales/en.yml +23 -0
  47. data/spec/dummy/config/routes.rb +3 -0
  48. data/spec/dummy/config/secrets.yml +22 -0
  49. data/spec/dummy/log/development.log +10215 -0
  50. data/spec/dummy/log/test.log +34165 -0
  51. data/spec/dummy/public/404.html +67 -0
  52. data/spec/dummy/public/422.html +67 -0
  53. data/spec/dummy/public/500.html +66 -0
  54. data/spec/dummy/public/assets/FontAwesome-bdc5d0b9f397be83e886c74b0141d1954aa4384b359dce49829994c4a2e1f7bf.otf +0 -0
  55. data/spec/dummy/public/assets/application-8f06a73c35179188914ab50e057157639fce1401c1cdca640ac9cec33746fc5b.js +13 -0
  56. data/spec/dummy/public/assets/application-e80e8f2318043e8af94dddc2adad5a4f09739a8ebb323b3ab31cd71d45fd9113.css +16 -0
  57. data/spec/dummy/public/assets/bootstrap/glyphicons-halflings-regular-13634da87d9e23f8c3ed9108ce1724d183a39ad072e73e1b3d8cbf646d2d0407.eot +0 -0
  58. data/spec/dummy/public/assets/bootstrap/glyphicons-halflings-regular-42f60659d265c1a3c30f9fa42abcbb56bd4a53af4d83d316d6dd7a36903c43e5.svg +288 -0
  59. data/spec/dummy/public/assets/bootstrap/glyphicons-halflings-regular-a26394f7ede100ca118eff2eda08596275a9839b959c226e15439557a5a80742.woff +0 -0
  60. data/spec/dummy/public/assets/bootstrap/glyphicons-halflings-regular-e395044093757d82afcb138957d06a1ea9361bdcf0b442d06a18a8051af57456.ttf +0 -0
  61. data/spec/dummy/public/assets/bootstrap/glyphicons-halflings-regular-fe185d11a49676890d47bb783312a0cda5a44c4039214094e7957b4c040ef11c.woff2 +0 -0
  62. data/spec/dummy/public/assets/credit_cards/amex_cid-110b3c8694faccb08f6c0e150833efd218b6fe420fdca7175e3551c8bd4b925e.gif +0 -0
  63. data/spec/dummy/public/assets/credit_cards/credit_card-5ca047adf17e2e7fdd101d108b2ac90178b4ccb32d02628ce723bb14ccb9bcea.gif +0 -0
  64. data/spec/dummy/public/assets/credit_cards/discover_cid-a3047727fc48922fb60924d854938c44924fe3580e89b22e07afc00d6fd6cc69.gif +0 -0
  65. data/spec/dummy/public/assets/credit_cards/icons/american_express-bddd7ca01fc4468e3c198995040f060ee885cf3bf7dfd4525717c4457d518ed2.png +0 -0
  66. data/spec/dummy/public/assets/credit_cards/icons/cirrus-4f875cd1f8b69d983eae94789064e64beee80a3d00d01c2407ef80ec4333bab5.png +0 -0
  67. data/spec/dummy/public/assets/credit_cards/icons/delta-f8058ef2e9c52116978902e28d578c11d37b50f58c2ae20c05f431d483f34d79.png +0 -0
  68. data/spec/dummy/public/assets/credit_cards/icons/diners_club-106b815730e7585d6fdf2899aa341979235406c82efcb489ed889ffc96cde880.png +0 -0
  69. data/spec/dummy/public/assets/credit_cards/icons/directdebit-b02eaf68946ab2547eb63e884e749bff74ce3f7b4e54710d63efb930968d9f84.png +0 -0
  70. data/spec/dummy/public/assets/credit_cards/icons/discover-7657f566fa8ab8b930fa2a1fa90caf0c5d5430afbd1b23425471cc29fc95c48a.png +0 -0
  71. data/spec/dummy/public/assets/credit_cards/icons/egold-7fa5daf64d696d244c6e1d8847c1823c30934ac9ce2772d44622d150b0ab36c6.png +0 -0
  72. data/spec/dummy/public/assets/credit_cards/icons/maestro-04253c601b66912deff0ee2a481c9bcf9154b8965ea4a52761db273fdff70144.png +0 -0
  73. data/spec/dummy/public/assets/credit_cards/icons/master-c93be9b003aa2d00eabb76e6ae9bfd3412548da8b64606e4a552c945934b45c2.png +0 -0
  74. data/spec/dummy/public/assets/credit_cards/icons/paypal-f85bbab879c983e0a969228fc30f9a6b8bf3897e82e519968c0c81368c0d0c96.png +0 -0
  75. data/spec/dummy/public/assets/credit_cards/icons/solo-91b1d214eaa7c8cbbc1509f628c325f265e226053d1de40702e4ef32435cc71f.png +0 -0
  76. data/spec/dummy/public/assets/credit_cards/icons/switch-808fe60a28ba3b4e4ebb41a712434d1fc0f5ae7d16b3fb290cd63d8e315c0975.png +0 -0
  77. data/spec/dummy/public/assets/credit_cards/icons/visa-601f8c5e3262bae9694d84d6859e1f99f8f4c8c03f08456183b80ea19c469054.png +0 -0
  78. data/spec/dummy/public/assets/credit_cards/icons/visaelectron-6ac6e40b7af2dedd1ee0aad0665fae12f2ebf690c8421fe0f24141d02643be75.png +0 -0
  79. data/spec/dummy/public/assets/credit_cards/icons/westernunion-5060c8fc7fe0efd1d05f9f39ea85d87d9117f7d8ac92de1fc7acdd740cbef338.png +0 -0
  80. data/spec/dummy/public/assets/credit_cards/icons/wirecard-0570018a538835cb2b0f0ab5ae72cc4b01661d0369c1b9977318a914509d4139.png +0 -0
  81. data/spec/dummy/public/assets/credit_cards/icons/worldpay-114e072092625fad239074dd7851848fdc7529e548145fa7ec6e564dbb2056a6.png +0 -0
  82. data/spec/dummy/public/assets/credit_cards/master_cid-aebcf5a0020689ae243e0b8c31da62d8801c1d071bfe0c7c97528fc298abbf96.jpg +0 -0
  83. data/spec/dummy/public/assets/credit_cards/visa_cid-0c885c2d8c5795439e23387124fcd92b7f330589a755c13c78556d19657d9c14.gif +0 -0
  84. data/spec/dummy/public/assets/favicon-92e86d463e909754599d66730477622cd3dd0b9bff58c47c9c38bebceb8073e5.ico +0 -0
  85. data/spec/dummy/public/assets/flags/ad-ef1f272d48e639e44a22cc7c71420d894b3c521797d00d5af2072cc58d598be9.png +0 -0
  86. data/spec/dummy/public/assets/flags/ae-bb18629e7ddb90e406c759b0b93766761cae73d6ede6e373b89ce8f4c041ef29.png +0 -0
  87. data/spec/dummy/public/assets/flags/af-a8957a0e0edb0a51f2cce520061a5a0ecef6f586798c71e393715bb48fd37ada.png +0 -0
  88. data/spec/dummy/public/assets/flags/ag-6b001708bc387cffe6f158c52bc1841127050180f7b0e31143d5a888d06f5c32.png +0 -0
  89. data/spec/dummy/public/assets/flags/ai-19f9e4d11f2f8d9a752e3f7cb430078075ee0c8de9e1fb87b608c37b14516e6a.png +0 -0
  90. data/spec/dummy/public/assets/flags/al-b0da94e5af1a778831f5db5f06de42a6982cd971660d3f3571a11c68064ca77e.png +0 -0
  91. data/spec/dummy/public/assets/flags/am-0af94a468db3e45055db8d37c37bd4316dd2bc5fd8b4b5c34517aae4e2ab4a74.png +0 -0
  92. data/spec/dummy/public/assets/flags/an-9e2b725c70fa638c401d9381d05f103071fad0acf25b0e978d09260a369f335f.png +0 -0
  93. data/spec/dummy/public/assets/flags/ao-49b0a50005440417bd679d03d4d78f9ba0d1c457285c97e94f36e56b1e8b623b.png +0 -0
  94. data/spec/dummy/public/assets/flags/ar-badc0b10528abd183a4eebb4153a0e333c77a71841dfa4d96b0eb541a75c67ad.png +0 -0
  95. data/spec/dummy/public/assets/flags/as-fbb5e2234ddae8122c9cab47bc2e107d2598a99ebd54eb496247103fd9acfa44.png +0 -0
  96. data/spec/dummy/public/assets/flags/at-6b2ea37071e9af298e0a9af729d95e424707180b20eb3c05953f04d7164a2355.png +0 -0
  97. data/spec/dummy/public/assets/flags/au-8c358904fef21d42ad6c411cfa5bea4ca474991fd8d0a5897eae0673b09c91cd.png +0 -0
  98. data/spec/dummy/public/assets/flags/aw-046058883005428af70920f6ad8544acd568a257664a4b723842b6e22e6d5c8e.png +0 -0
  99. data/spec/dummy/public/assets/flags/ax-aa3d8e13a298d4be767047e7271db8e010ee2031805aace4a76d725a269326f2.png +0 -0
  100. data/spec/dummy/public/assets/flags/az-7203cdfce354193134b4a06ace469fdb8a0cd0ed19892c552b879d47df843ea6.png +0 -0
  101. data/spec/dummy/public/assets/flags/ba-1a794c9d919db0ee1f6861127d3ea5f8cdfce622759a5957252c5841c730370c.png +0 -0
  102. data/spec/dummy/public/assets/flags/bb-0203ae02d0dfe51c44be16236e34bbc1af57a2a16e4047724d4a206812ad5d02.png +0 -0
  103. data/spec/dummy/public/assets/flags/bd-e5d98dc849c83f87a5e3678766782225b535449a400ebe8bdb555dd53bb46565.png +0 -0
  104. data/spec/dummy/public/assets/flags/be-dda1fb90657271dc47f3f1aa0e5958746f7daa9882c1e5cee6163dd15b8b10d1.png +0 -0
  105. data/spec/dummy/public/assets/flags/bf-3af3f997b3cbe38bbcd10d71bfd5f8a671195921f079ecca7f290877f576188a.png +0 -0
  106. data/spec/dummy/public/assets/flags/bg-dc50282320bbec80f9bce5aa89e2b7cb790c32f112626ac87c09c2ae3e305b44.png +0 -0
  107. data/spec/dummy/public/assets/flags/bh-ae21faa25c8b98f413acdadacd85935c979c4308b10de3649d11a2765d282e04.png +0 -0
  108. data/spec/dummy/public/assets/flags/bi-b66984dbdf692bd5d1703d0fb810b150f185e042c6a48f4553f71ca30ecdeb9d.png +0 -0
  109. data/spec/dummy/public/assets/flags/bj-712936bf413cbf1b2d0c97cdd11fdd5096a860073620e033d4000d8336c386d8.png +0 -0
  110. data/spec/dummy/public/assets/flags/bm-1cf65d58c743937739ffcdc34264a42e4f363465dd2aaeea20a5c979985a9780.png +0 -0
  111. data/spec/dummy/public/assets/flags/bn-c4090e80467aa9141b69f5d688009934b3b544c2f458dad842af5ceef4782729.png +0 -0
  112. data/spec/dummy/public/assets/flags/bo-7776fdc6be0d13c0e458bf586240151290ef9e33c1da6d067b991f2888707c7c.png +0 -0
  113. data/spec/dummy/public/assets/flags/br-abb38894b6488991a037af0d295ae7de12badf7651bed2def591e02d655a159f.png +0 -0
  114. data/spec/dummy/public/assets/flags/bs-93782baac34bd0384c73d0e6a73b29f309486c43a6d8befb4f8dd302a74d893a.png +0 -0
  115. data/spec/dummy/public/assets/flags/bt-45478ac859d5ad0f471ace4673ce0a7fac6197976e9c762462125e214439fce5.png +0 -0
  116. data/spec/dummy/public/assets/flags/bv-60afb3c087192467f613a90358e8bbfd4a90d54514bccf8c2d7c04e27a0b3ec4.png +0 -0
  117. data/spec/dummy/public/assets/flags/bw-781f4dd7f0208902f53f449b1b63e077cbba561712d3613c3e19bafe5a9c3659.png +0 -0
  118. data/spec/dummy/public/assets/flags/by-0aa7216ed10ffaa828d66f59c3eadbe1bb27d56e6af05aeeaa7d22036ec6aac8.png +0 -0
  119. data/spec/dummy/public/assets/flags/bz-6c606d09a715692b13bdb8eae32348f236e643097bbc5438b306d2d972335ce1.png +0 -0
  120. data/spec/dummy/public/assets/flags/ca-0bac90d7a524a883919a75fd493054c6e08f5ad9a584b20ed19fe84f6856b96c.png +0 -0
  121. data/spec/dummy/public/assets/flags/catalonia-cb2938dd6888d3603c66a3305e412803a0272328956d22c6caf6616bd24a2cd3.png +0 -0
  122. data/spec/dummy/public/assets/flags/cc-04478bedc48d948ab6f5db41dfe5b314186c873bb10166e27991db1a64bbccae.png +0 -0
  123. data/spec/dummy/public/assets/flags/cd-80af1ee2b074e7ea63a18b78c850e13662d4a25c67c59888e20a463e7db9174c.png +0 -0
  124. data/spec/dummy/public/assets/flags/cf-86ed8c82e63da4790ae4f07b5692a73b1f13724b43a31caedb471c7714cca27c.png +0 -0
  125. data/spec/dummy/public/assets/flags/cg-318535b0928d8eb43643aa1843cf6e487543c0fb5f8a0b7f16e4e3052edf3fe1.png +0 -0
  126. data/spec/dummy/public/assets/flags/ch-10aabf6c133d86ec5cdcf598c95059269a280d2e5c25a0950732c688d8c5ecd9.png +0 -0
  127. data/spec/dummy/public/assets/flags/ci-0907a191270f6bea1ae83f927add5d189f269b76b0da139478e333c9adc76738.png +0 -0
  128. data/spec/dummy/public/assets/flags/ck-8dd84c48227a028e9d642bd38d409af93a87da52e4d54c25522bb94bd3cae157.png +0 -0
  129. data/spec/dummy/public/assets/flags/cl-242514bf0a879b6c0927fafe6ede5b2b7581fcd5d9e3afe03338645f46ba4730.png +0 -0
  130. data/spec/dummy/public/assets/flags/cm-266047eb736590d354017826aeb3492ba2e14387fda070c7be5a78aa70140ced.png +0 -0
  131. data/spec/dummy/public/assets/flags/cn-0242f535f7ee0cc26bd88cc9f807ece4a6d70129303b902a232b38c58e66ef51.png +0 -0
  132. data/spec/dummy/public/assets/flags/co-5f4706ee632b11f3bd236619101f3a60facd61bef93b2f72f28b9cab5850c2b4.png +0 -0
  133. data/spec/dummy/public/assets/flags/cr-1b4d9cdad0573a8d68550d3b5105f690b723b264b9838eb5593d25b2d5b946ef.png +0 -0
  134. data/spec/dummy/public/assets/flags/cs-468e9b446f45f9f1595b539e62e02d0eaee8fc359e66d8fdf82a7822ef782b59.png +0 -0
  135. data/spec/dummy/public/assets/flags/cu-4d0103f7573bc35cbb69331e258d11ef037d449e60cc2ab26c1b98f0a1cc97ba.png +0 -0
  136. data/spec/dummy/public/assets/flags/cv-687ad939bbd5ecea1dde0fd3ccee4dd16ad3894ce9035a4405f29f2be9016b34.png +0 -0
  137. data/spec/dummy/public/assets/flags/cx-f59dc699e6ad44fddd771bc3905b2c8b696943a49b7bcf89041c8c39a470c4c1.png +0 -0
  138. data/spec/dummy/public/assets/flags/cy-6b56e94aff58c33cf8c5bbea0c0eb62567afffb0bbc86eda4cc1589d79254114.png +0 -0
  139. data/spec/dummy/public/assets/flags/cz-1eae82dc82a4c313b171ae2da4345ee806d408f87bc52d7e02156850a34c5061.png +0 -0
  140. data/spec/dummy/public/assets/flags/de-eeb9c5ac4f5dce7a2019a1f030364156931cced20dd8c46f9ffe2196928d2651.png +0 -0
  141. data/spec/dummy/public/assets/flags/dj-0ccee31ce3c058fa2b541ac7fd991903d1c66874dce6514f63f1442dee4855ca.png +0 -0
  142. data/spec/dummy/public/assets/flags/dk-95253486ae74b2987697e95e810fb4e2c5866e7290d3e8c3bfa64b33ed7fb76b.png +0 -0
  143. data/spec/dummy/public/assets/flags/dm-f57bd2163b0ebe4a8728ac755fe28d85512f55ff87b04089bbd3826ff7ef63c1.png +0 -0
  144. data/spec/dummy/public/assets/flags/do-d97aca994993c49d2ef6aaf3296238638c76a2159ffc7e2529a06e6bde2aa773.png +0 -0
  145. data/spec/dummy/public/assets/flags/dz-ce27120e43465dbea001808b5ec8e5ac5c253d527461f1f7a056859db8f9febe.png +0 -0
  146. data/spec/dummy/public/assets/flags/ec-8363ffdc4b0a0aa938d615927dae26237568f5169fe32692ee19890ef1060e18.png +0 -0
  147. data/spec/dummy/public/assets/flags/ee-2e24f5e269e321e3803a6e41bceb8816cc5816d3c7b0493f52a53b27505ad134.png +0 -0
  148. data/spec/dummy/public/assets/flags/eg-d443aa3de82d29bba75afc96374235688d583f9bea1c0dbd741c449af7b6cf72.png +0 -0
  149. data/spec/dummy/public/assets/flags/eh-233af90cd3363b6bafa354a74052f69646ba4af6ee8aee29c74f333eac5dc7e5.png +0 -0
  150. data/spec/dummy/public/assets/flags/england-0ae6fcb2a77fd9459100d52f8fa3f8bb2767ad8039232e9ac0616dc90bd9a419.png +0 -0
  151. data/spec/dummy/public/assets/flags/er-30df94c019c724a6af0cd947b48491ca1d5b1e7286cfc85f5e53cb1dfa561989.png +0 -0
  152. data/spec/dummy/public/assets/flags/es-c9386d961d51a6d82a43ac835447213588d199f722e4464922197a59cc731495.png +0 -0
  153. data/spec/dummy/public/assets/flags/et-89e75ce76f8453dc493cc9ebf89327dc0bb5b4cdb7f3708dc7f5e63624c55ac9.png +0 -0
  154. data/spec/dummy/public/assets/flags/europeanunion-5827d447303a4ada9d2da5609ae17e5cdfdc533fde7a0c1e57bdfc036621f5d4.png +0 -0
  155. data/spec/dummy/public/assets/flags/fam-b31f535c339b8a62e59803491ed367ed78ba687ba312b45e2e23c08c03716ae8.png +0 -0
  156. data/spec/dummy/public/assets/flags/fi-3b207d0c6ee72e75399aaf0f64e219c04f4bf4f107750540b48daad896618711.png +0 -0
  157. data/spec/dummy/public/assets/flags/fj-d01000142065a9e593dab6f088dcb676ade63da46d64ff75972e6fd2535057ea.png +0 -0
  158. data/spec/dummy/public/assets/flags/fk-441b504e4f18efd445daac71069545bf3628e9b1d31a8d756b2eaab85fc696db.png +0 -0
  159. data/spec/dummy/public/assets/flags/fm-56527d8175aa85562db40023622363c505d49bd5826dc77ab505d4fb3cbfc87b.png +0 -0
  160. data/spec/dummy/public/assets/flags/fo-7007c1790d0f437f17b5ec540c57ae124821d07e682202af57dbde124f7e3732.png +0 -0
  161. data/spec/dummy/public/assets/flags/fr-f36a4cd04e2f4483c23b977e22a2e53d77c8f5198e5e921d44c300d9d9e07023.png +0 -0
  162. data/spec/dummy/public/assets/flags/ga-51cfd915f38cfb3184780baed489cece9bb15cb0c75232d1fdcd401854c9ce84.png +0 -0
  163. data/spec/dummy/public/assets/flags/gb-e6cf87f6b6f6c3cd542a6156d69257c1dba10b58fa034d291bcf83b1713938e9.png +0 -0
  164. data/spec/dummy/public/assets/flags/gd-96f7eb27a12214a2e00eef52511b7bda91d3f619b5e45619f206c2eecf43329d.png +0 -0
  165. data/spec/dummy/public/assets/flags/ge-48b0b3a587362b20e0e37f1b5012e9f52d23755a336750573dd525b875a57f67.png +0 -0
  166. data/spec/dummy/public/assets/flags/gf-f36a4cd04e2f4483c23b977e22a2e53d77c8f5198e5e921d44c300d9d9e07023.png +0 -0
  167. data/spec/dummy/public/assets/flags/gh-c230e13b00c32fa60b1567f18ef3520cc31ff9dc3857da2e625e1794020c4e71.png +0 -0
  168. data/spec/dummy/public/assets/flags/gi-635a1785d383722cfa0144892046965379572668b343ea8be1adc7a53e492f1a.png +0 -0
  169. data/spec/dummy/public/assets/flags/gl-7396fcdd5dd34f5f405b330ff65ed385cd3f0daa6bbe4eb34b756e45e42817fa.png +0 -0
  170. data/spec/dummy/public/assets/flags/gm-80d9ff5bb351ae28d5c265e8b468330ccea17a0faaf0294bba7b07bb532f04f2.png +0 -0
  171. data/spec/dummy/public/assets/flags/gn-7f2a58684db68811180bf374fbe78cded850f7726f6b0716855ca0565d4e0c69.png +0 -0
  172. data/spec/dummy/public/assets/flags/gp-080b599f6985ffd8810ba59e46c37e30f88c2da9e549c72fb387148640a78a00.png +0 -0
  173. data/spec/dummy/public/assets/flags/gq-d5466c348453139035a08af715407100f51ee6b17b7df29337e16fbb47865ed7.png +0 -0
  174. data/spec/dummy/public/assets/flags/gr-9a0c5b943758badfc6d47d161d89a7f0807b94afddabeaaf14d6be49c8fa5399.png +0 -0
  175. data/spec/dummy/public/assets/flags/gs-be013ae7bca433bf25668ca02f973c0f867673f9ef4c84c5ee9bda45b765b2fc.png +0 -0
  176. data/spec/dummy/public/assets/flags/gt-6f9a54ccabaa0dc33b80122a3c4e3037ff0135bf9ebae202ff00cdd58d108a1d.png +0 -0
  177. data/spec/dummy/public/assets/flags/gu-a7688d00dc08abd992de9958b02da57934ec34ac17ed932fd28baaf5734e1266.png +0 -0
  178. data/spec/dummy/public/assets/flags/gw-bfc5b7ed3084ea1fa9a976529d32ba87da5b512404e512852b3f71005b19dc3d.png +0 -0
  179. data/spec/dummy/public/assets/flags/gy-0d36c475121af3dc5478734c1ab3233c9737c9212bc2b45839776f38cbb8e8f1.png +0 -0
  180. data/spec/dummy/public/assets/flags/hk-4cead35229843fd97f010199465863c075640de0541b3f98e62a1064fb07d843.png +0 -0
  181. data/spec/dummy/public/assets/flags/hm-8c358904fef21d42ad6c411cfa5bea4ca474991fd8d0a5897eae0673b09c91cd.png +0 -0
  182. data/spec/dummy/public/assets/flags/hn-95b56b06171c1093da3c0bf647977c2b36c44b1f91d70e8a207368816b5976f1.png +0 -0
  183. data/spec/dummy/public/assets/flags/hr-12ef45466d42c5f70f0c973f5b3e52eaa4aa35efac4f6537f42fee3d1524ffee.png +0 -0
  184. data/spec/dummy/public/assets/flags/ht-9283fbec5249cc1131567165ef3976d60bbcd0364de22c7bd73801a15f0fdcf6.png +0 -0
  185. data/spec/dummy/public/assets/flags/hu-b8cd13968a135da90e96df17a666170a9ee63c61b312fb89922e6c8057f3aa06.png +0 -0
  186. data/spec/dummy/public/assets/flags/id-e709e44618667bf802fc5100372f1182f576a549609038adae1e92f9deaea871.png +0 -0
  187. data/spec/dummy/public/assets/flags/ie-8611500d6c3e8828a8fd705f022e089b67fa64096428762f7f163289ba99463f.png +0 -0
  188. data/spec/dummy/public/assets/flags/il-50fc78e5e3397c7da53651afc8461025d55fdc9c449d191f53fc5c7d18707cfd.png +0 -0
  189. data/spec/dummy/public/assets/flags/in-1d075357a252156abc61c9415c174e366c40714a8a89a754dfdc7ef8b5c0ae6c.png +0 -0
  190. data/spec/dummy/public/assets/flags/io-18e117a44a22ffcf6b0631d02c85f4c0c7b11d5fc2f20d0251243a8def8601f8.png +0 -0
  191. data/spec/dummy/public/assets/flags/iq-e6dd8696d457c2d053e25b266d5bdeea94b3cad648267a7e4b8f2ab700473b89.png +0 -0
  192. data/spec/dummy/public/assets/flags/ir-010a06402b4cc61ecdd65192ed60a97ac3f6c7ee4b0a7bf85711d74d3dac513e.png +0 -0
  193. data/spec/dummy/public/assets/flags/is-236dfbb80deaf2295ed9338cc6a0034edaaac15c9b4f8d5f895fc5bb4ed5847f.png +0 -0
  194. data/spec/dummy/public/assets/flags/it-095cb6510cb255b993ef3cdd61b43caa7cd829cc36ed46e244ae8c00c57ce2e9.png +0 -0
  195. data/spec/dummy/public/assets/flags/ja-fa43b75daf61ce0fa3dd2ec1eef9ccffea59687603541b2f8be1b5b5e01534cc.png +0 -0
  196. data/spec/dummy/public/assets/flags/jm-5da6194a700441aee59a39d8d288fba3ddf551e6b64e534979ab262065eb1bc9.png +0 -0
  197. data/spec/dummy/public/assets/flags/jo-d78ea5d59924a92c926286cf74fc59eb8e11e966ddc20dfdbd7b99d57af97540.png +0 -0
  198. data/spec/dummy/public/assets/flags/ke-ed60c5075ffa709678280b47d5e1efcf8f3f9928a4bab56f4a4ba9a4c4eac324.png +0 -0
  199. data/spec/dummy/public/assets/flags/kg-6e13edc529f5da76d30648eef61281ca21e320c6d3e73fe22a65f62a1357147d.png +0 -0
  200. data/spec/dummy/public/assets/flags/kh-971ff678ee9d3865ca90120d79f31ea0175316c7e51aeb0aee4a854107f35e18.png +0 -0
  201. data/spec/dummy/public/assets/flags/ki-7d73bbe50926056c46bcb40f0b51b3ba7b4e9b345cce0618acb3367edc877939.png +0 -0
  202. data/spec/dummy/public/assets/flags/km-b9daca74d1c96037b9e1c79a9e7302b8ba52c9cffdb1f29f62232bcb957cb2f4.png +0 -0
  203. data/spec/dummy/public/assets/flags/kn-19656ab123691d21f6592cba55a32bc46bd03074fdc96772e0fb8cf1f37e44df.png +0 -0
  204. data/spec/dummy/public/assets/flags/kp-7c9f848fbf87e24586207a22b02e7b4033befdb2b021a47bdfda47b79334826d.png +0 -0
  205. data/spec/dummy/public/assets/flags/kr-cdcb151b11d8d618523782815ce9e63ff2b28f4d8f8a7589520bbabbb5c618ff.png +0 -0
  206. data/spec/dummy/public/assets/flags/kw-35d45a790499f4b943f2ba105dfbd6a31b5fcab93ecb013deed9c4b56b45e56c.png +0 -0
  207. data/spec/dummy/public/assets/flags/ky-f31812e6f5e5bb17c5bb6a7ab32ecd155e0c6daa50309d968e5d351f309da116.png +0 -0
  208. data/spec/dummy/public/assets/flags/kz-f27e9f159cfb131cfed54dff249bde3ffaf10a5e81ce642e38d6a21f601e9f19.png +0 -0
  209. data/spec/dummy/public/assets/flags/la-06164598d4b69a9eadb00fda097939540012b3f1ef33948eaad2e31a272c1aa3.png +0 -0
  210. data/spec/dummy/public/assets/flags/lb-17062b238f0edc8eae00e8385dab88fd6f10a5d44f060ab277fab7534b7cb337.png +0 -0
  211. data/spec/dummy/public/assets/flags/lc-b982029e245cb597c79f989aa5d010a529ef59cd500b675df2786bc05686e354.png +0 -0
  212. data/spec/dummy/public/assets/flags/li-dd43a86aa6fd38fda791343ec4ccac98e4a51ec5ce0d494cfd7ee660f6624fc6.png +0 -0
  213. data/spec/dummy/public/assets/flags/lk-201c532b68ff0b7bfd294e0e2fe348a739a82bbce4631be0745f3c7a69c675d3.png +0 -0
  214. data/spec/dummy/public/assets/flags/lr-bb09d6defefd666287c56a9fba83a044ca89520e60f0e08c1dc4e543d405eb86.png +0 -0
  215. data/spec/dummy/public/assets/flags/ls-f09f2c525f3e01415bc1a9a8f0a4eb4e95dd1fe5ef79525afed2b59ac9dd7e1f.png +0 -0
  216. data/spec/dummy/public/assets/flags/lt-fd5c30ca96682a34049cd1f7ad6d6e9809e438ed4e4fedb3b3fc35f7cc415b73.png +0 -0
  217. data/spec/dummy/public/assets/flags/lu-86afe2793d9fe696ce7b709702a40afe149d57f8d507c41d1955aee137e826b3.png +0 -0
  218. data/spec/dummy/public/assets/flags/lv-2939ce17a96a22a8eb6fd29ade1ec36fb8a844cd7ddeffbb92b45eeb25a203e9.png +0 -0
  219. data/spec/dummy/public/assets/flags/ly-12340b27966e4257cb3539c492c4c19d8a668135ab87ffe059211bb8407f4232.png +0 -0
  220. data/spec/dummy/public/assets/flags/ma-5bfabdd46fdf9b43c1157c7997801cb180ecdb34d7b0fc9ff9012d603bd669ab.png +0 -0
  221. data/spec/dummy/public/assets/flags/mc-c7e6112e3bbece3d74f60b66a3ba1fcd4a7906628fbea3ed104ee7d5ef4e536e.png +0 -0
  222. data/spec/dummy/public/assets/flags/md-0117a4a5b166ffdc760223fa0bb879b0583d5097550759565ab5049dc6afb2fa.png +0 -0
  223. data/spec/dummy/public/assets/flags/me-6f4a8eb40794a0db6613ec91046bb656ecb726a186a6b16bafbf466af95b98dc.png +0 -0
  224. data/spec/dummy/public/assets/flags/mg-ec6dae16323560ba1bfea73e199d544ae5ab05c617e15bd5c11e0f25da0c0bd6.png +0 -0
  225. data/spec/dummy/public/assets/flags/mh-182134569b11fdb7cdf98935b6aac838a7cdc2219d10af2ba647f43b4ed494bd.png +0 -0
  226. data/spec/dummy/public/assets/flags/mk-1487afc2ca8fdf0d196cf45f36459baf4ea563b694c73281d671f07bb00389eb.png +0 -0
  227. data/spec/dummy/public/assets/flags/ml-d308921442660325d73ef3e5e6ac8a449e08d9a6f2f9d5020c5b11366ed17047.png +0 -0
  228. data/spec/dummy/public/assets/flags/mm-bd428bf04ec2745c1e6b64338f2f5c33fd16d9066feeedc91fa8c639987e99ac.png +0 -0
  229. data/spec/dummy/public/assets/flags/mn-c73fc5309423ed388cbf538ab6c5672251bb9902658df3d918de895d7e8d2687.png +0 -0
  230. data/spec/dummy/public/assets/flags/mo-9dc23f80f344c7178415582cfebb23eb01edc0b551fb9571bf904c8e38dac460.png +0 -0
  231. data/spec/dummy/public/assets/flags/mp-d4e634234ee20cd0e133a1b884274658b783ff74f006720099b29e7470c8ee86.png +0 -0
  232. data/spec/dummy/public/assets/flags/mq-1954112b9b5bf0e755756dd1465fb6c5c40518e94c0d28ab903fe3343a374b35.png +0 -0
  233. data/spec/dummy/public/assets/flags/mr-f923202870986e2c973f45bea2ef8d7fc5ff043d32dc0ae1218cdf387e92dc1d.png +0 -0
  234. data/spec/dummy/public/assets/flags/ms-cb79ad3d268453b0df80b1c73ce0e0d7e1ab3a9a7c3fcede66c2f6449ea2f35f.png +0 -0
  235. data/spec/dummy/public/assets/flags/mt-b06c405a5b8604c58570f417a68517264af5fcd91ec376dca47bca022637fd7c.png +0 -0
  236. data/spec/dummy/public/assets/flags/mu-7d9efa78b29d42c4036ccd594d3605c1b4f114a6024d118c05324ca959dec7e6.png +0 -0
  237. data/spec/dummy/public/assets/flags/mv-560eec103a87430c393931d57f73fa08c34a9f403f77218ef6996a3862424bd3.png +0 -0
  238. data/spec/dummy/public/assets/flags/mw-5731ef6acdfa5337f7e7a95b9bffd7eebd7adfdd881a85bd11c83e0ebd7a506b.png +0 -0
  239. data/spec/dummy/public/assets/flags/mx-d6a9ea37b78f1f2a9993e3ec54abdc526442d58e6915d6210291c16bf721ab35.png +0 -0
  240. data/spec/dummy/public/assets/flags/my-f16bf7c5ab0f9042281a3628c83ef14acc8e44f636c573d7c95f5ed7ce0c63c9.png +0 -0
  241. data/spec/dummy/public/assets/flags/mz-8f064015673fe60e24ac97270685dcf9d6652f0f11948ec633dbd3a26431ff5b.png +0 -0
  242. data/spec/dummy/public/assets/flags/na-e0185cfb7f1e4d8f4ba4c923a57297cf1972c8ab211dca4aa765b70ed5ef9c58.png +0 -0
  243. data/spec/dummy/public/assets/flags/nc-e5862568515124982dd0a8389ed9f64006784cdc91e9691ea8fd867b6c0047d1.png +0 -0
  244. data/spec/dummy/public/assets/flags/ne-c1353de8ead48d0aad698d36835c86b1564230efa911c688cc3de4f8ac9cdf1e.png +0 -0
  245. data/spec/dummy/public/assets/flags/nf-5c4a52a85f7d1358d164182ddfc4a22742247ab3b0173dc144d914bf26108305.png +0 -0
  246. data/spec/dummy/public/assets/flags/ng-29ba341db7f620a6f21f2df61528bf198a8dc521789ec9be1b668c71df90a98d.png +0 -0
  247. data/spec/dummy/public/assets/flags/ni-b1d1fefb6231d66138e7877d819c26063da2b77b6242f03c7f712790ef194f08.png +0 -0
  248. data/spec/dummy/public/assets/flags/nl-e188f98c3d1c722d93cf24bb7c2561584a6fc3ea2d1ab35a7fd52b3bbb2188cd.png +0 -0
  249. data/spec/dummy/public/assets/flags/no-60afb3c087192467f613a90358e8bbfd4a90d54514bccf8c2d7c04e27a0b3ec4.png +0 -0
  250. data/spec/dummy/public/assets/flags/np-5d1f6ee9142d73a42af08dda8c6bb032adb2b495003e77e94fda02ad4d35ee0c.png +0 -0
  251. data/spec/dummy/public/assets/flags/nr-c8ff90b052d45e228f1f27f3efc4a0784078b023b54b88c422c287f538324dea.png +0 -0
  252. data/spec/dummy/public/assets/flags/nu-38b6f0d49daf87cbb950213171f3aa07543f42e50b33254e55f90013c5fc79fa.png +0 -0
  253. data/spec/dummy/public/assets/flags/nz-299ba1bfe9e7c72e0b691a82160c4e5c776f5f6dfeaaddcd317d401c6f730ed1.png +0 -0
  254. data/spec/dummy/public/assets/flags/om-cbb018c606b417465dc6653bd1ee614699451365fa707998a262f5f351b0bdea.png +0 -0
  255. data/spec/dummy/public/assets/flags/pa-33bf85bea07b7b4a76b0a55c457ac32b1caf2a7412feb092ebe0ea34cbc4254c.png +0 -0
  256. data/spec/dummy/public/assets/flags/pe-309189725e682e605bf9a87af1aafdac727c0c9bfb446049d703c28c55e6739b.png +0 -0
  257. data/spec/dummy/public/assets/flags/pf-662c8a799373de04b3aa206b98e3abfc038de9d578afb94dce3bf206231cb90c.png +0 -0
  258. data/spec/dummy/public/assets/flags/pg-b115f810152c14de557d6bce12ab2623d1b8dafc6b9f77be4de472c7fa61aefd.png +0 -0
  259. data/spec/dummy/public/assets/flags/ph-3d4031c131da91a47f7e521a8432018d96a38416af935b7259adb57224571b03.png +0 -0
  260. data/spec/dummy/public/assets/flags/pk-faec919478261f3f0045cc768afb3d68fec32251e921a7979ccabd36eba5e3b1.png +0 -0
  261. data/spec/dummy/public/assets/flags/pl-98491e423eafd3bd0f5a35bb123cbe70443a4c29961579f868ca35cbdee73092.png +0 -0
  262. data/spec/dummy/public/assets/flags/pm-aa965a4da2750b87abf54de158190c94ea0252fd9500e92950c091017e652294.png +0 -0
  263. data/spec/dummy/public/assets/flags/pn-65d6e64681f831aa1d7f908ba1065172e0cac7efb53afbf602402d8af521594b.png +0 -0
  264. data/spec/dummy/public/assets/flags/pr-f827d6ef0b9c8f785519cea226e852470577cedf6fd1cfd37fe46fb7284a2412.png +0 -0
  265. data/spec/dummy/public/assets/flags/ps-bafac5092f91ca205f32276ad36d332f326754faf32b4d7175f8ef4b0ae60a5b.png +0 -0
  266. data/spec/dummy/public/assets/flags/pt-2af22923899eea4a4997481bae73840ab2f4294798b85509f3cb63c05fe68e2c.png +0 -0
  267. data/spec/dummy/public/assets/flags/pw-52298f868b533b289ae691c7421419aae479ae0f2497d05fd270d57f403b628e.png +0 -0
  268. data/spec/dummy/public/assets/flags/py-fb4d67ad57617cd58596a29c595f6f54f8c3a40c66d327b1bcb0633138fcb2a0.png +0 -0
  269. data/spec/dummy/public/assets/flags/qa-64fe2c62eb72efb945367362ab925226957bb0bc2ac756bb2e8eea4130c2a797.png +0 -0
  270. data/spec/dummy/public/assets/flags/re-f36a4cd04e2f4483c23b977e22a2e53d77c8f5198e5e921d44c300d9d9e07023.png +0 -0
  271. data/spec/dummy/public/assets/flags/ro-1de8399bb6b6e4f263884d43fe1f920edfd868bfff81ffcb2cd1aa05f18c15bf.png +0 -0
  272. data/spec/dummy/public/assets/flags/rs-48e64ce5f4ce4d86cb18bbce07a223a26862ecf80ae2d1c7a27dab05666970ae.png +0 -0
  273. data/spec/dummy/public/assets/flags/ru-66b7a51cad9c5616048b24e5ef462de1842d413396e908e6177388cfddf02c12.png +0 -0
  274. data/spec/dummy/public/assets/flags/rw-ca5c72728ba368fb3e713f2480581bc79a341f1092a45e7395fe458c22185a03.png +0 -0
  275. data/spec/dummy/public/assets/flags/sa-d42be6e56327fef927abfcdbed9a90ff588ed85eb7dc6d4fd977f23484b53776.png +0 -0
  276. data/spec/dummy/public/assets/flags/sb-3b6e4e9efdaebcc7f5635eee2bdb619c937d5d34e1500cf0b377f2a28c6548f4.png +0 -0
  277. data/spec/dummy/public/assets/flags/sc-f33e4154e9cd692917f9d0cf59f66099546d53ba285618d94aae5a786f41b625.png +0 -0
  278. data/spec/dummy/public/assets/flags/scotland-bab190cc4cf394a6bf806299761cc2bbf8847fd3dc305ed415f6c8cafeb29542.png +0 -0
  279. data/spec/dummy/public/assets/flags/sd-48e2255daf8463615d8a472d0dea2932f59ef34932c6fbb3af20ea009494143f.png +0 -0
  280. data/spec/dummy/public/assets/flags/se-6f96fc8f9f474e8b8a6a82ed9bb5e22e19c6c5921fd363bb903fa693dfb9447a.png +0 -0
  281. data/spec/dummy/public/assets/flags/sg-97c1bf166fb4411d87059762993a36406ae8abe8d0fd7be23dd7d2d5bb2b2e6d.png +0 -0
  282. data/spec/dummy/public/assets/flags/sh-2ea819e7e980f86873221bd0eceb507682dbfd8873f911f9546f2860198f3676.png +0 -0
  283. data/spec/dummy/public/assets/flags/si-c845942e846ec7b8b48b2884a2a87e124f1d2189d06f66962616333199094437.png +0 -0
  284. data/spec/dummy/public/assets/flags/sj-60afb3c087192467f613a90358e8bbfd4a90d54514bccf8c2d7c04e27a0b3ec4.png +0 -0
  285. data/spec/dummy/public/assets/flags/sk-d9bf59672e55e725816bfcd1fd98f3b49977d9e4fa699fa914ff909fb666c590.png +0 -0
  286. data/spec/dummy/public/assets/flags/sl-37ef9b2c93afa8f1ba1439a8f483f770e5b0dbed8f6855c07081fb3424a1a702.png +0 -0
  287. data/spec/dummy/public/assets/flags/sm-91a48d84cfcefaffb4f0abea2299cb83665732c433c21cad03cb9ef7e53e6308.png +0 -0
  288. data/spec/dummy/public/assets/flags/sn-74bed1fd906de7c232a6690078a25de900bff19af530f55ea30a4605d63681b2.png +0 -0
  289. data/spec/dummy/public/assets/flags/so-af82827ce1c5d3eb583e3db086e1cc72c870893de93ba54f1c5b967594d88152.png +0 -0
  290. data/spec/dummy/public/assets/flags/sr-f928538fc2b37f82ec547cb29637a6bd24c9ad7359b793459bfb37a0de14ab23.png +0 -0
  291. data/spec/dummy/public/assets/flags/st-bcc7f43bd45948aa08f597f0eac89f6070e7c08025803186b5e3eabb51262d65.png +0 -0
  292. data/spec/dummy/public/assets/flags/sv-3df8876af944ae3a99a5d1fd1c84050b70d67642a02d2f12c0e09e6dbd898f28.png +0 -0
  293. data/spec/dummy/public/assets/flags/sy-9b636ba6bd86e5fd89233e9fa7ada3412be172cd8909c5d7033bdf3e2b0a3732.png +0 -0
  294. data/spec/dummy/public/assets/flags/sz-35fb614ab8cf30cc969f9ae994c5e1243de6605a9e70562e5f8c05e670831de8.png +0 -0
  295. data/spec/dummy/public/assets/flags/tc-67b97242e2fcd0debaacd8a5ade75617557ef44f7386da6cfc917cfd82d5d549.png +0 -0
  296. data/spec/dummy/public/assets/flags/td-537d94634b3b40310179050d9c5c9db0f50412ca5818c519808d378f09e30153.png +0 -0
  297. data/spec/dummy/public/assets/flags/tf-aaa40d13c512587f6d47a7d01715e46de0b659b841eb1e031b090caedec20ad0.png +0 -0
  298. data/spec/dummy/public/assets/flags/tg-995f4a97da26b81cc826c5675acd629f09b039ecc2c116c11f13ed4cfb2d242b.png +0 -0
  299. data/spec/dummy/public/assets/flags/th-f7f657b09e9bb20e949bebbf1b3a65be65de04c76be9712186155580ed9ee758.png +0 -0
  300. data/spec/dummy/public/assets/flags/tj-a30fa9e428afd2c23411626cdeb33d5d89849c2fd364d5aad499e7ac16c18121.png +0 -0
  301. data/spec/dummy/public/assets/flags/tk-77cc85b466ce62aea743baafb0c7a65b9e5e9f53413c427b214ac3450c209d1e.png +0 -0
  302. data/spec/dummy/public/assets/flags/tl-9a439ee55ca8f2e8066cff17d1547f44f06d874579953ec592ce18aa8a2fba81.png +0 -0
  303. data/spec/dummy/public/assets/flags/tm-3427f0321084ca0547ec81266b0894022815ae220288e59e1239a50949c8e662.png +0 -0
  304. data/spec/dummy/public/assets/flags/tn-951af2387b21f78c14f55fc447aaad8d32c3ca51d3680407013da170a8b6c819.png +0 -0
  305. data/spec/dummy/public/assets/flags/to-50d011ac78160126905599602381c70ffda371da5cde450ed40e570ea634973e.png +0 -0
  306. data/spec/dummy/public/assets/flags/tr-2a9146c77250846a921ab00cdb0cd20d5902d15db190d4587ddd122d6a009fae.png +0 -0
  307. data/spec/dummy/public/assets/flags/tt-605f724a8086ae8739fb129de2d2e88e4f414011be5a18615d2593bc412660c7.png +0 -0
  308. data/spec/dummy/public/assets/flags/tv-709f66ff58d47cc735685c6f9a064af3285e733a110d446c29905e7254ba4109.png +0 -0
  309. data/spec/dummy/public/assets/flags/tw-550b86c349b6933c4390b2b917f0550b82aa07eb6d159f6cc33d7bbb20b7383e.png +0 -0
  310. data/spec/dummy/public/assets/flags/tz-34519f2a049c88665cc6c4559dc1781981b9266402eddd7baa89917072c342a6.png +0 -0
  311. data/spec/dummy/public/assets/flags/ua-700f7e559bb3fe77e181f9b1e30a3840e277568873484805b9bce3adff1f75d1.png +0 -0
  312. data/spec/dummy/public/assets/flags/ug-d926cf69f1982556f897f88afeeb278bc71b9516773d46f0020e860f1fde4539.png +0 -0
  313. data/spec/dummy/public/assets/flags/um-3027aa5b9c31a9b3f55fc37e68ddf44f302787b46bc325544adf24660cb6d214.png +0 -0
  314. data/spec/dummy/public/assets/flags/us-3f988127a2629627a099d4118fda394ed6d13489486f9e93549fc5e3c0aed77c.png +0 -0
  315. data/spec/dummy/public/assets/flags/uy-d80e516901dd7242aa6c92e67916f91d50c85243badcf7f91db2fb373955a76d.png +0 -0
  316. data/spec/dummy/public/assets/flags/uz-235e4f479f3e5fdf245cde78a34ddb68e6ee3f9079648dc392e06c7dbf40f8fe.png +0 -0
  317. data/spec/dummy/public/assets/flags/va-84bccff68b16ea597cb5da010fa1eea3795a610849dcb876524afac116da524f.png +0 -0
  318. data/spec/dummy/public/assets/flags/vc-286a2c3e0e0b82c92be6d92c32dd92893257587df0a7c381e72c0d0825fcd631.png +0 -0
  319. data/spec/dummy/public/assets/flags/ve-269a9af6575973cec589ea778b347e248d7b6e8c6a940cdf066544eba9f21e70.png +0 -0
  320. data/spec/dummy/public/assets/flags/vg-471040114acb688ed6c2aef759ce5edaf1cbe51b3e8fd2813b7ea27e4fc46c41.png +0 -0
  321. data/spec/dummy/public/assets/flags/vi-35c5791a262cfb7c48f02cfaab72055cab3fe80148a39b8474fd56cbf7819284.png +0 -0
  322. data/spec/dummy/public/assets/flags/vn-64ad0d0537e45280ab400b26f4f49036e72b9aed8068ceaecf2f57a65602ebff.png +0 -0
  323. data/spec/dummy/public/assets/flags/vu-26307e868d0d16eab9c1257cc4b0b690734e1f8d5df468696336d1584d1593c6.png +0 -0
  324. data/spec/dummy/public/assets/flags/wales-a32b3a88039b9883f3a0a63dea5e5b94a79d76d163c1348f9c18aa6bd443b12d.png +0 -0
  325. data/spec/dummy/public/assets/flags/wf-419a6d31c082d90d7f6f06732a6f34d7e64e51c367a0c910271ba47bceffd2d9.png +0 -0
  326. data/spec/dummy/public/assets/flags/ws-7eeb568b00050b9b3d08a9c7893eed7605310fc2bb7a1e72e23f41d0fd7cf024.png +0 -0
  327. data/spec/dummy/public/assets/flags/ye-51a92b279b0b44e5af5632cada6c86cc3acf4b8c98e7dc69247ff58f76f7d22b.png +0 -0
  328. data/spec/dummy/public/assets/flags/yt-68cdc14adbaa5d0c54c003eef95f4c3a9e3fcd87e10250de7531be95190c2dcb.png +0 -0
  329. data/spec/dummy/public/assets/flags/za-011efff91910ca8aa8a5e3f9bffa803d39b78156746a95e600e9081bbfc06ff0.png +0 -0
  330. data/spec/dummy/public/assets/flags/zm-c45e1d50c5a08e77734e5d71a5ca4b4c8bedb40343f84d68a817277b8d66fba9.png +0 -0
  331. data/spec/dummy/public/assets/flags/zw-d36b54a455cc417633967cd710324a89669e7e1bf5394883a1d095125a8e0ecd.png +0 -0
  332. data/spec/dummy/public/assets/fontawesome-webfont-9e540a087924a6e64790149d735cac022640e4fa6bff6bd65f5e9f41529bf0b3.ttf +0 -0
  333. data/spec/dummy/public/assets/fontawesome-webfont-aadc3580d2b64ff5a7e6f1425587db4e8b033efcbf8f5c332ca52a5ed580c87c.woff2 +0 -0
  334. data/spec/dummy/public/assets/fontawesome-webfont-bfdef833219a6edffd9c3cbc28db72739d22bb4d20cc2e2f8d56a7a4d408a206.svg +565 -0
  335. data/spec/dummy/public/assets/fontawesome-webfont-cbb644d0ee730ea57dd5fbae35ef5ba4a41d57a254a6b1215de5c9ff8a321c2d.eot +0 -0
  336. data/spec/dummy/public/assets/fontawesome-webfont-e3870de89716b72cb61a4bba0e17c75783b361cdaba35ea96961c3070bd8ca18.woff +0 -0
  337. data/spec/dummy/public/assets/jquery.validate/localization/messages_ar-f8281dd07f94760bfed61523c5d0424d3cd5a104666d47716caafbd9b03eab24.js +26 -0
  338. data/spec/dummy/public/assets/jquery.validate/localization/messages_bg-da7b1e2df4a1693b942da1ae02a20dd1f4adf64a6baafbabd82157f172e682c1.js +26 -0
  339. data/spec/dummy/public/assets/jquery.validate/localization/messages_ca-04b94299a595ef290a44c64c2d4317b64fa3b787df8d7e3a6d0e51215b3469fd.js +26 -0
  340. data/spec/dummy/public/assets/jquery.validate/localization/messages_cs-a7f46657501e7b5f3b5f06568be97a83ce40cc840abc989bf03098263dda70fb.js +26 -0
  341. data/spec/dummy/public/assets/jquery.validate/localization/messages_da-6484a08602c80642792ca64045b2900a3f0b3ea73a5d5f7419a31c720aed9786.js +23 -0
  342. data/spec/dummy/public/assets/jquery.validate/localization/messages_de-9cd7a848dfc29330caf91a84b4c4d1d2be0174a6b4970e3bcc4735d5862101e8.js +23 -0
  343. data/spec/dummy/public/assets/jquery.validate/localization/messages_el-de0b045b591b83016986df7fa59ebd4b414d350be7eb0bfc1a12cef2e81e7fdb.js +26 -0
  344. data/spec/dummy/public/assets/jquery.validate/localization/messages_es-05b2504eb79d375c0263fc5635d8e8fb38f092cfd86a997f6f80744f14dee39f.js +26 -0
  345. data/spec/dummy/public/assets/jquery.validate/localization/messages_et-ea015734d0c9f9fe9d390cd767205108b6b475a3ece4e42cb02eb6d2f664859e.js +24 -0
  346. data/spec/dummy/public/assets/jquery.validate/localization/messages_eu-92d61e79af1008046b7ff5f9eb671ad17aac985fe71810f4b3e40943fd3aa30d.js +26 -0
  347. data/spec/dummy/public/assets/jquery.validate/localization/messages_fa-17953586fb98eb1e454a7f6b36a9ff3cabf1abc466ff7e961261ebd955351d18.js +26 -0
  348. data/spec/dummy/public/assets/jquery.validate/localization/messages_fi-09b1c9a710e8f49976bd8afc49e93fdc6c91ebd8340af8820c9237d98f61b4d0.js +24 -0
  349. data/spec/dummy/public/assets/jquery.validate/localization/messages_fr-03df7d08a6bf5351a9752ca8f0926897c148afcc877e15cfb930175429a2e84b.js +48 -0
  350. data/spec/dummy/public/assets/jquery.validate/localization/messages_ge-34665abac406e8d2fceea28597cedfa2e3830b1d3d8160e33eafd092d789e1bc.js +24 -0
  351. data/spec/dummy/public/assets/jquery.validate/localization/messages_he-15bb4a5b3047650e85c2dd8510d2297f7c6a069667c42bccb364151c8296993f.js +26 -0
  352. data/spec/dummy/public/assets/jquery.validate/localization/messages_hr-4b07c214b48259c0afc0bb974c35834a16920628ad4194715c59de9ca2cf580e.js +26 -0
  353. data/spec/dummy/public/assets/jquery.validate/localization/messages_hu-f3a58ed3410760ad990810c6c9295ebeedf19365c0dc53fee86f535bd0d0ba7f.js +25 -0
  354. data/spec/dummy/public/assets/jquery.validate/localization/messages_it-0afd015aec10c1d64ac858e2fab5293ee66f21a8c2a8b63bbec22083383e3f86.js +26 -0
  355. data/spec/dummy/public/assets/jquery.validate/localization/messages_ja-b4c9b5fa769f77b212708da39b899e9b98081866dc8a7159d3ac76656e60cbca.js +26 -0
  356. data/spec/dummy/public/assets/jquery.validate/localization/messages_ka-411390cadb42258a88e2bb5aa27dd54c5c9aa50309075af5d6d51f6e19632cda.js +26 -0
  357. data/spec/dummy/public/assets/jquery.validate/localization/messages_kk-59e2458cf305bf9d58d86fb3d98509a0237653b8e3adc4d06bdcbda902991216.js +26 -0
  358. data/spec/dummy/public/assets/jquery.validate/localization/messages_ko-a082d3ed93cef2cb0e672c71a7dd2d463d8b8976b86e01cd7771422a80732e4f.js +26 -0
  359. data/spec/dummy/public/assets/jquery.validate/localization/messages_lt-a254b76e31fe044072f8b6702acb2f5b6daebef51f28cedeef7691131d2fdf01.js +26 -0
  360. data/spec/dummy/public/assets/jquery.validate/localization/messages_lv-b04be0edbb8c05e2fc58aa24ac48620582077979d54d1334cf5429394765664c.js +26 -0
  361. data/spec/dummy/public/assets/jquery.validate/localization/messages_ms-3568633eb5ba1892dd3dbb3bc9dd955a58abb01c74fe759cafdef1bcccc515a9.js +26 -0
  362. data/spec/dummy/public/assets/jquery.validate/localization/messages_nl-1134b4c51a2907d5d845e43389815eb2427c1a5847c5bb4ed2be1acdc7b780c3.js +36 -0
  363. data/spec/dummy/public/assets/jquery.validate/localization/messages_no-8a139e609066c1e83ab6e1458bcfd4feb14aa0556ab1ee42431b8815364600a1.js +26 -0
  364. data/spec/dummy/public/assets/jquery.validate/localization/messages_pl-2d5751d40032d3d551f67fd1943449aba4fd1fbfede742079e33359213fd5ae2.js +26 -0
  365. data/spec/dummy/public/assets/jquery.validate/localization/messages_ptbr-c201419608ac000f8a94c5c0bf7db8a52694895f1850326ebbc64fdf7bfd53f7.js +25 -0
  366. data/spec/dummy/public/assets/jquery.validate/localization/messages_ptpt-f68d3313d517fdf8f1d31026648ac24a3a60c428e72ea09146760ebbaf43ce1b.js +25 -0
  367. data/spec/dummy/public/assets/jquery.validate/localization/messages_ro-425c4283d4fa22b638f74e76a1c11705b688aed807fbeeb7bffd2fb239da9089.js +26 -0
  368. data/spec/dummy/public/assets/jquery.validate/localization/messages_ru-3f3763a3f1fb986040c9f35bd0f58c88b26e1ad17203b10fbd03c9fef7468077.js +26 -0
  369. data/spec/dummy/public/assets/jquery.validate/localization/messages_se-47f49e9646d2bb015d99415692e6f934caad9cddd49164f55e284ffc969410f9.js +24 -0
  370. data/spec/dummy/public/assets/jquery.validate/localization/messages_si-e537f0bcaab5856dbc54a46134ef751238bc3adf09f23e1d0100f8304ac2ba9d.js +26 -0
  371. data/spec/dummy/public/assets/jquery.validate/localization/messages_sk-670df54d180707d107494b7c84ed2580f4f1e69da231deec7ad70ef22f2e85d1.js +23 -0
  372. data/spec/dummy/public/assets/jquery.validate/localization/messages_sl-9765b74e0318f749ca488fea342100925de8be8aeba089afe16b9135593d1eb8.js +26 -0
  373. data/spec/dummy/public/assets/jquery.validate/localization/messages_sr-c0fc42939394784bcfc588d414bc23203bfd74549e112c61d2d79b3e67b26fe8.js +26 -0
  374. data/spec/dummy/public/assets/jquery.validate/localization/messages_sv-589ac3e9ba1644da18d8a47a43d105c652f9e91ea6bb1b296243cc8ef36e3180.js +24 -0
  375. data/spec/dummy/public/assets/jquery.validate/localization/messages_th-934faf3e6ed1d245979a35bbddd692a75d33f82fbe23227a97bade5346899431.js +26 -0
  376. data/spec/dummy/public/assets/jquery.validate/localization/messages_tr-95ce6082d7fb91cc9a61979994b305ebf70eb15b53576835e6bb38adef17780e.js +26 -0
  377. data/spec/dummy/public/assets/jquery.validate/localization/messages_tw-245c54eeaeff8be5af30ee989d3ef3d561c5274afe7a1b1861e4d9f79f5cfff1.js +25 -0
  378. data/spec/dummy/public/assets/jquery.validate/localization/messages_uk-8d5b2a67c7ab133b1b1da07e1b78adcc65733007a824e1a4f8a4a115db70942b.js +26 -0
  379. data/spec/dummy/public/assets/jquery.validate/localization/messages_vi-85f54a4b58d4023e5482d9653bcbf6f5980569e80c467f8b56c4ca6e11ab75c2.js +26 -0
  380. data/spec/dummy/public/assets/jquery.validate/localization/messages_zh-d721803d9bbf4de10be48be9136837c7386bf88f306169460027f83ceb7e0a5b.js +26 -0
  381. data/spec/dummy/public/assets/jquery.validate/localization/messages_zhtw-3d3a652c693f3a06174068827977d3ebe26891a8f44b2b97c9f94a8278577a07.js +27 -0
  382. data/spec/dummy/public/assets/logo/spree_50-1c7335be355d4672a35c5023956d0c883f254831f3e3dae3f2ca05976ceb5e50.png +0 -0
  383. data/spec/dummy/public/assets/noimage/large-fe154e843e2b66339f5460ae669c9a6307224a451ed6ba86479c8bf9837ede96.png +0 -0
  384. data/spec/dummy/public/assets/noimage/mini-d5d987414566f22657bbe0b08a980ddb4230d156845a31ab3cad0a0825016ce8.png +0 -0
  385. data/spec/dummy/public/assets/noimage/product-fe154e843e2b66339f5460ae669c9a6307224a451ed6ba86479c8bf9837ede96.png +0 -0
  386. data/spec/dummy/public/assets/noimage/small-1eaf254c069b00a8a692912bddd1660da5f1f80ac202c6bdc4d81b40fd2e0792.png +0 -0
  387. data/spec/dummy/public/assets/spree/frontend/all-3431ee651166421eda2b758ce4be4c8ec2682490a9c0cf0838ce6fff787a9cce.js +13994 -0
  388. data/spec/dummy/public/assets/spree/frontend/all-3b0a8d13ac439d7445b17dc0227eb2053cdffe2f86d6455c80fb093ec05a534b.css +5712 -0
  389. data/spec/dummy/public/assets/spree/frontend/all-6c15ac83ec6caa00ff56fa7ec64e22ed98bd3360197c3ab166ed3fd1ad26ea6e.css +5712 -0
  390. data/spec/dummy/public/assets/spree_header-198b754a34f1428c25f64303be8ac2aae84a076433af18ca55b65d7cbf1a0e13.jpg +0 -0
  391. data/spec/dummy/public/favicon.ico +0 -0
  392. data/spec/dummy/vendor/assets/javascripts/spree/frontend/all.js +11 -0
  393. data/spec/dummy/vendor/assets/stylesheets/spree/frontend/all.css +10 -0
  394. data/spec/features/liqpay_spec.rb +94 -0
  395. data/spec/lib/active_merchant/billing/liqpay_spec.rb +117 -0
  396. data/spec/models/spree/payment_method/liqpay_spec.rb +73 -0
  397. data/spec/spec_helper.rb +53 -0
  398. data/spec/support/json.rb +7 -0
  399. metadata +964 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b57dad854511cbc1cc40f1d9e433620117f8a45f
4
+ data.tar.gz: 6f4fad3cbfdbb54d4300e81d2865e73b116273b7
5
+ SHA512:
6
+ metadata.gz: 8d716af5b00743b6abbc6b4d6fc6d229f2f313aa1f13d746088f906ca33cdd3959bcc7ccf768c5a30c3ff3ac00327702ea5c53823c4ed00ab261a9ee3fc6821c
7
+ data.tar.gz: 927650748d63870eeb2091dc01f3d3f1c1e0b8ca358a6f5fc4678801405dd0346c668a0dba575bd1375839ac8473c9f65bf3cc6b5af1a5de2a55590c5ded7d9a
@@ -0,0 +1,20 @@
1
+ Copyright 2015 Oleg Kukareka
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,56 @@
1
+ # Spree Liqpay
2
+
3
+ [Liqpay.com](https://www.liqpay.com/en/) payment gateway API for [Spree E-Commerce](https://spreecommerce.com/).
4
+
5
+ ## Installation
6
+
7
+ Update your `Gemfile`:
8
+
9
+ ```ruby
10
+ gem 'spree_liqpay', github: 'kukareka/spree_liqpay'
11
+ ```
12
+
13
+ Run `Bundler`:
14
+
15
+ ```
16
+ bundle install
17
+ ```
18
+
19
+ ## Configuration
20
+
21
+ 1. Login to Spree Backend.
22
+
23
+ 2. Open "Configurations -> Payment Methods"
24
+
25
+ 3. Click "New Payment Method".
26
+
27
+ 4. Choose provider "Spree::PaymentMethod::Liqpay".
28
+
29
+ 5. Enter any name and description. It will be visible to client during checkout. Click "Create".
30
+
31
+ 6. Enter your public and private keys retrieved from [liqpay.com](https://www.liqpay.com/en/).
32
+
33
+ 7. Enter order description (it will be visible to client during checkout on Liqpay site).
34
+
35
+ 8. Turn off the Test mode.
36
+
37
+ ## How it works
38
+
39
+ 1. A client selects Liqpay payment method on Payment tab during checkout on our site.
40
+ 2. We redirect him to payment form on Liqpay.com where he makes the payment.
41
+ 3. Liqpay.com redirects the client back to our site.
42
+ 4. We wait for a callback from Liqpay.com (takes a few seconds) and redirect the client to "Order complete" page.
43
+
44
+ ## Tests
45
+
46
+ Powered by [RSpec](http://rspec.info/), [Capybara](https://github.com/jnicklas/capybara) and [Selenium](http://www.seleniumhq.org/).
47
+
48
+ Run `rake app:setup` before the tests to init the dummy app.
49
+
50
+ ## References
51
+
52
+ 1. [Liqpay.com official Ruby SDK](https://github.com/liqpay/sdk-ruby) (not used by this gem)
53
+ 2. [Liqpay.com FAQ](https://www.liqpay.com/en/faq)
54
+ 3. [Liqpay.com API reference](https://www.liqpay.com/en/doc)
55
+
56
+
@@ -0,0 +1,15 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ APP_RAKEFILE = File.expand_path '../spec/dummy/Rakefile', __FILE__
8
+ load 'rails/tasks/engine.rake'
9
+
10
+ require 'bundler/gem_tasks'
11
+ require 'rspec/core/rake_task'
12
+
13
+ RSpec::Core::RakeTask.new spec: 'app:setup'
14
+
15
+ task default: :spec
@@ -0,0 +1,17 @@
1
+ module Spree
2
+ CheckoutController.class_eval do
3
+ def liqpay_result
4
+ update if has_completed_payments?
5
+ end
6
+
7
+ def liqpay_status
8
+ render json: {completed: has_completed_payments?}
9
+ end
10
+
11
+ private
12
+
13
+ def has_completed_payments?
14
+ @order.payments.completed.any?
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,25 @@
1
+ module Spree
2
+ class LiqpayStatusController < ApplicationController
3
+
4
+ skip_before_filter :verify_authenticity_token
5
+
6
+ # callbacks from Liqpay server
7
+ def update
8
+ @payment_method = PaymentMethod.find params[:payment_method_id]
9
+ data = JSON.parse Base64.strict_decode64 params[:data]
10
+ render text: "Bad signature\n", status: 401 and return unless @payment_method.check_signature params[:data], params[:signature]
11
+ @order = Order.find data['order_id']
12
+
13
+ raise ArgumentError unless @order.payments.completed.empty? &&
14
+ data['currency'] == @order.currency &&
15
+ BigDecimal(data['amount']) == @order.total &&
16
+ data['type'] == 'buy' &&
17
+ (data['status'] == 'success' || (@payment_method.preferred_test_mode && data['status'] == 'sandbox'))
18
+
19
+ payment = @order.payments.create amount: @order.total, payment_method: @payment_method
20
+ payment.complete!
21
+
22
+ render text: "Thank you.\n"
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,39 @@
1
+ module Spree
2
+ class PaymentMethod::Liqpay < PaymentMethod
3
+ preference :server, :string, default: 'https://www.liqpay.com'
4
+ preference :public_key, :string, default: ''
5
+ preference :private_key, :string, default: ''
6
+ preference :order_description, :string, default: -> {Spree::Store.current.name}
7
+ preference :test_mode, :boolean, default: true
8
+
9
+ def provider_class
10
+ ActiveMerchant::Billing::Liqpay
11
+ end
12
+
13
+ def provider
14
+ @provider ||= provider_class.new preferred_public_key, preferred_private_key
15
+ end
16
+
17
+ def source_required?
18
+ false
19
+ end
20
+
21
+ def checkout_url
22
+ "#{preferred_server}/api/checkout"
23
+ end
24
+
25
+ def cnb_form_fields order, result_url, server_url
26
+ provider.cnb_form_fields amount: order.total,
27
+ currency: order.currency,
28
+ description: preferred_order_description,
29
+ order_id: order.id,
30
+ result_url: result_url,
31
+ server_url: server_url,
32
+ sandbox: preferred_test_mode ? 1 : 0
33
+ end
34
+
35
+ def check_signature data, signature
36
+ provider.check_signature data, signature
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,9 @@
1
+ <script>
2
+ $(function() {
3
+ setInterval(function(){
4
+ $.getJSON('<%= liqpay_status_order_checkout_url(@order, format: :json) %>', function(data) {
5
+ if (data.completed) location.reload();})}, 500)});
6
+ </script>
7
+ <div id="liqpay_spinner">
8
+ <!-- Here is the best place for some exciting animation -->
9
+ </div>
@@ -0,0 +1,16 @@
1
+ <script>
2
+ $(function() {
3
+ var checkout_form = $('#checkout_form_payment');
4
+ var checkout_form_action = checkout_form.prop('action');
5
+ var radio = $('#order_payments_attributes__payment_method_id_<%= payment_method.id %>')
6
+ var change_submit_url = function() {
7
+ checkout_form.prop('action', radio.prop('checked') ? '<%= payment_method.checkout_url %>' : checkout_form_action);
8
+ };
9
+ $('input[type=radio][name="order[payments_attributes][][payment_method_id]"]', checkout_form).change(change_submit_url);
10
+ change_submit_url();
11
+ })
12
+ </script>
13
+ <% payment_method.cnb_form_fields(@order, liqpay_result_order_checkout_url(@order),
14
+ liqpay_status_update_url(payment_method.id)).each do |name, value| %>
15
+ <%= hidden_field_tag name, value %>
16
+ <% end %>
@@ -0,0 +1,13 @@
1
+ Spree::Core::Engine.routes.draw do
2
+ resources :orders do
3
+ resource :checkout, :controller => 'checkout' do
4
+ member do
5
+ get :liqpay_result
6
+ get :liqpay_status
7
+ end
8
+ end
9
+ end
10
+
11
+ post '/liqpay_status/:payment_method_id' => 'liqpay_status#update', :as => :liqpay_status_update
12
+
13
+ end
@@ -0,0 +1,44 @@
1
+ require 'base64'
2
+ require 'digest/sha1'
3
+ require 'json'
4
+
5
+ module ActiveMerchant #:nodoc:
6
+ module Billing #:nodoc:
7
+ class Liqpay < Gateway
8
+
9
+ def initialize public_key, private_key
10
+ @public_key = public_key
11
+ @private_key = private_key
12
+ end
13
+
14
+ def cnb_form_fields options
15
+ params = {version: 3, public_key: @public_key}.merge options
16
+ data = encode params
17
+ {
18
+ data: data,
19
+ signature: encode_signature(data)
20
+ }
21
+ end
22
+
23
+ def encode data
24
+ encode64 encode_json data
25
+ end
26
+
27
+ def encode64 param
28
+ Base64.strict_encode64 param
29
+ end
30
+
31
+ def encode_json params
32
+ JSON.generate params
33
+ end
34
+
35
+ def encode_signature param
36
+ encode64 Digest::SHA1.digest @private_key + param + @private_key
37
+ end
38
+
39
+ def check_signature data, signature
40
+ signature == encode_signature(data)
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,3 @@
1
+ require 'spree_core'
2
+ require 'spree_frontend'
3
+ require 'spree_liqpay/engine'
@@ -0,0 +1,31 @@
1
+ require 'spree_core'
2
+
3
+ module SpreeLiqpay
4
+ class Engine < ::Rails::Engine
5
+ isolate_namespace Spree
6
+ engine_name 'spree_liqpay'
7
+
8
+ config.autoload_paths += %W(#{config.root}/lib)
9
+
10
+ # use rspec for tests
11
+ config.generators do |g|
12
+ g.test_framework :rspec, fixture: false
13
+ g.fixture_replacement :factory_girl, dir: 'spec/factories'
14
+ g.assets false
15
+ g.helper false
16
+ end
17
+
18
+ def self.activate
19
+ Dir.glob(File.join(File.dirname(__FILE__), '../../app/**/*_decorator*.rb')) do |c|
20
+ Rails.configuration.cache_classes ? require(c) : load(c)
21
+ end
22
+ end
23
+
24
+ config.to_prepare &method(:activate).to_proc
25
+
26
+ initializer 'spree.liqpay.payment_methods', after: 'spree.register.payment_methods' do |app|
27
+ app.config.spree.payment_methods << ::Spree::PaymentMethod::Liqpay
28
+ end
29
+
30
+ end
31
+ end
@@ -0,0 +1,9 @@
1
+ FactoryGirl.define do
2
+ factory :liqpay, class: Spree::PaymentMethod::Liqpay do
3
+ name 'Liqpay'
4
+ preferred_server 'http://localhost/'
5
+ preferred_private_key SecureRandom.hex 16
6
+ preferred_public_key SecureRandom.hex 8
7
+ active true
8
+ end
9
+ end
@@ -0,0 +1,3 @@
1
+ module SpreeLiqpay
2
+ VERSION = '0.1.0'
3
+ end
@@ -0,0 +1,8 @@
1
+ desc 'Prepare test app'
2
+ task :setup do
3
+ Rake::Task['app:spree:install:migrations'].invoke
4
+ Rake::Task['app:db:create'].invoke
5
+ Rake::Task['app:db:migrate'].invoke
6
+ Rake::Task['app:db:seed'].invoke
7
+ Rake::Task['app:assets:precompile'].invoke
8
+ end
@@ -0,0 +1,54 @@
1
+ require 'spec_helper'
2
+
3
+ module Spree
4
+ describe CheckoutController, type: :controller do
5
+ routes { Spree::Core::Engine.routes }
6
+
7
+ let(:order) { create :order_with_line_items, state: 'payment' }
8
+
9
+ before do
10
+ expect(controller).to receive_messages current_order: order, check_authorization: true
11
+ end
12
+
13
+ describe '#liqpay_status' do
14
+ it 'returns false if the order has no completed payments' do
15
+ completed_payments false
16
+ get :liqpay_status, order_id: order
17
+ expect(response).to have_http_status :success
18
+ expect(JSON.parse(response.body)['completed']).to eq false
19
+ end
20
+
21
+ it 'returns true if the order has completed payments' do
22
+ completed_payments true
23
+ get :liqpay_status, order_id: order
24
+ expect(response).to have_http_status :success
25
+ expect(JSON.parse(response.body)['completed']).to eq true
26
+ end
27
+ end
28
+
29
+ describe '#liqpay_result' do
30
+ render_views
31
+
32
+ it 'waits for response from liqpay gateway' do
33
+ completed_payments false
34
+ get :liqpay_result, order_id: order
35
+ expect(response).to have_http_status :success
36
+ expect(response.body).to have_selector '#liqpay_spinner'
37
+ end
38
+
39
+ it 'redirects to update action after response from liqpay gateway' do
40
+ completed_payments true
41
+ get :liqpay_result, order_id: order
42
+ expect(response).to have_http_status :redirect
43
+ end
44
+ end
45
+
46
+ private
47
+
48
+ def completed_payments value
49
+ expect(controller).to receive(:has_completed_payments?).and_return value
50
+ end
51
+
52
+
53
+ end
54
+ end
@@ -0,0 +1,116 @@
1
+ require 'spec_helper.rb'
2
+
3
+ module Spree
4
+ describe LiqpayStatusController, type: :controller do
5
+ routes { Spree::Core::Engine.routes }
6
+
7
+ let(:liqpay) { create :liqpay }
8
+ let(:order) { create :order_with_line_items }
9
+ let(:data) do
10
+ {
11
+ order_id: order.id,
12
+ currency: order.currency,
13
+ amount: order.total,
14
+ type: 'buy',
15
+ status: 'sandbox'
16
+ }
17
+ end
18
+
19
+ it 'needs payment method' do
20
+ expect do
21
+ post :update, payment_method_id: liqpay.id * 100
22
+ end.to raise_error ActiveRecord::RecordNotFound
23
+ end
24
+
25
+ it 'checks signature' do
26
+ check_signature false
27
+ post :update, payment_method_id: liqpay, data: encode_json(data)
28
+ expect(response.status).to eq 401
29
+ end
30
+
31
+ context 'with correct signature' do
32
+ before do
33
+ check_signature true
34
+ end
35
+
36
+ it 'needs order' do
37
+ expect do
38
+ post :update, payment_method_id: liqpay, data: encode_json(order_id: order.id * 100)
39
+ end.to raise_error ActiveRecord::RecordNotFound
40
+ end
41
+
42
+ context 'order' do
43
+ before do
44
+ create :payment, order: order, state: :completed
45
+ end
46
+ it 'must not have complete payments' do
47
+ expect do
48
+ post :update, payment_method_id: liqpay, data: encode_json(order_id: order.id)
49
+ end.to raise_error ArgumentError
50
+ end
51
+ end
52
+
53
+ it 'checks currency' do
54
+ expect do
55
+ post :update, payment_method_id: liqpay, data: encode_json(data.merge currency: 'XXX')
56
+ end.to raise_error ArgumentError
57
+ end
58
+
59
+ it 'checks amount' do
60
+ expect do
61
+ post :update, payment_method_id: liqpay, data: encode_json(data.merge amount: (order.total * 2).to_digits)
62
+ end.to raise_error ArgumentError
63
+ end
64
+
65
+ it 'checks type' do
66
+ expect do
67
+ post :update, payment_method_id: liqpay, data: encode_json(data.merge type: 'sell')
68
+ end.to raise_error ArgumentError
69
+ end
70
+
71
+ it 'checks status' do
72
+ expect do
73
+ post :update, payment_method_id: liqpay, data: encode_json(data.merge status: 'fail')
74
+ end.to raise_error ArgumentError
75
+ end
76
+
77
+ it 'does not allow sandbox status without test mode' do
78
+ test_mode false
79
+ expect do
80
+ post :update, payment_method_id: liqpay, data: encode_json(data.merge status: 'sandbox')
81
+ end.to raise_error ArgumentError
82
+ end
83
+
84
+ it 'allows sandbox status in test mode' do
85
+ test_mode true
86
+ post :update, payment_method_id: liqpay, data: encode_json(data.merge status: 'sandbox')
87
+ expect(response).to have_http_status :success
88
+ end
89
+
90
+ it 'creates payment' do
91
+ post :update, payment_method_id: liqpay, data: encode_json(data)
92
+
93
+ expect(response).to have_http_status :success
94
+
95
+ expect(order.payments.count).to eq 1
96
+
97
+ payment = order.payments.first
98
+
99
+ expect(payment.payment_method).to eq liqpay
100
+ expect(payment.state).to eq 'completed'
101
+ expect(payment.amount).to eq order.total
102
+ end
103
+ end
104
+
105
+ private
106
+
107
+ def check_signature value
108
+ expect_any_instance_of(Spree::PaymentMethod::Liqpay).to receive(:check_signature).and_return value
109
+ end
110
+
111
+ def test_mode value
112
+ expect_any_instance_of(Spree::PaymentMethod::Liqpay).to receive(:preferred_test_mode).and_return value
113
+ end
114
+
115
+ end
116
+ end