solidus_oxxo_pay 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (29) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +26 -0
  3. data/README.md +42 -0
  4. data/Rakefile +21 -0
  5. data/app/assets/images/oxxopay_brand.png +0 -0
  6. data/app/assets/javascripts/spree/backend/solidus_oxxo_pay.js +2 -0
  7. data/app/assets/javascripts/spree/frontend/solidus_oxxo_pay.js +2 -0
  8. data/app/assets/stylesheets/spree/backend/solidus_oxxo_pay.css +4 -0
  9. data/app/assets/stylesheets/spree/frontend/solidus_oxxo_pay.css +122 -0
  10. data/app/controllers/spree/conekta_oxxo_controller.rb +19 -0
  11. data/app/helpers/spree/base_helper_decorator.rb +9 -0
  12. data/app/models/spree/conekta_oxxo_payment.rb +96 -0
  13. data/app/models/spree/payment_method/conekta_oxxo.rb +25 -0
  14. data/app/policies/payment_oxxo_policy.rb +14 -0
  15. data/app/views/spree/admin/payments/source_forms/_conektaoxxo.html.erb +12 -0
  16. data/app/views/spree/admin/payments/source_views/_conektaoxxo.html.erb +13 -0
  17. data/app/views/spree/checkout/payment/_conektaoxxo.html.erb +11 -0
  18. data/app/views/spree/checkout/payment_label/_conektaoxxo_label.html.erb +3 -0
  19. data/app/views/spree/conekta/payments/_conekta_oxxo.html.erb +29 -0
  20. data/app/views/spree/conekta_oxxo/receipt.html.erb +14 -0
  21. data/config/locales/en.yml +5 -0
  22. data/config/routes.rb +4 -0
  23. data/db/migrate/20181121200357_create_conekta_oxxo_payments.rb +12 -0
  24. data/lib/generators/solidus_oxxo_pay/install/install_generator.rb +30 -0
  25. data/lib/solidus_oxxo_pay.rb +4 -0
  26. data/lib/solidus_oxxo_pay/engine.rb +25 -0
  27. data/lib/solidus_oxxo_pay/factories.rb +6 -0
  28. data/lib/solidus_oxxo_pay/version.rb +3 -0
  29. metadata +314 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 4a67c8525d3ca13b4ef0c58656688a7ce4b0d12926e27bfafef78c7404ee104c
4
+ data.tar.gz: 19023765bd1f752e8f844fb3e7ca5b4a69a6239ad3d14c6e716e0094027f4020
5
+ SHA512:
6
+ metadata.gz: c73e5c4b115b1b53b7b497ec5ec571e88ec6278ad3b17f485aa5ee908d0439e62529ed1670a3eeb31c45b801085b76c124e452dd55d367333f2c04d5041ec5b6
7
+ data.tar.gz: cdbaa65fd03881925198e2103773df9a85acb4386f20e610dd50639ab6f685bbcbbbae8a5643c4bb95064f4d2c80ebc550d117581c934e02a5dc2f7b8e84259c
data/LICENSE ADDED
@@ -0,0 +1,26 @@
1
+ Copyright (c) 2018 Magmalabs
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without modification,
5
+ are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright notice,
8
+ this list of conditions and the following disclaimer.
9
+ * Redistributions in binary form must reproduce the above copyright notice,
10
+ this list of conditions and the following disclaimer in the documentation
11
+ and/or other materials provided with the distribution.
12
+ * Neither the name Spree nor the names of its contributors may be used to
13
+ endorse or promote products derived from this software without specific
14
+ prior written permission.
15
+
16
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
20
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
23
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
24
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
25
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
data/README.md ADDED
@@ -0,0 +1,42 @@
1
+ [![Build Status](https://travis-ci.org/magma-labs/solidus_oxxo_pay.svg?branch=master)](https://travis-ci.org/magma-labs/solidus_oxxo_pay)
2
+
3
+ SolidusOxxoPay
4
+ ==============
5
+
6
+ This extensions allows process payments using mexican payment Conekta Oxxo
7
+
8
+ Installation
9
+ ------------
10
+
11
+ Add solidus_oxxo_pay to your Gemfile:
12
+
13
+ ```ruby
14
+ gem 'solidus_oxxo_pay'
15
+ ```
16
+
17
+ Bundle your dependencies and run the installation generator:
18
+
19
+ ```shell
20
+ bundle
21
+ bundle exec rails g solidus_oxxo_pay:install
22
+ ```
23
+
24
+ Testing
25
+ -------
26
+
27
+ First bundle your dependencies, then run `rake`. `rake` will default to building the dummy app if it does not exist, then it will run specs, and [Rubocop](https://github.com/bbatsov/rubocop) static code analysis. The dummy app can be regenerated by using `rake test_app`.
28
+
29
+ ```shell
30
+ bundle
31
+ bundle exec rake test_app
32
+ bundle exec rake
33
+ ```
34
+
35
+ When testing your applications integration with this extension you may use it's factories.
36
+ Simply add this require statement to your spec_helper:
37
+
38
+ ```ruby
39
+ require 'solidus_oxxo_pay/factories'
40
+ ```
41
+
42
+ Copyright (c) 2018 Magmalabs, released under the MIT License
data/Rakefile ADDED
@@ -0,0 +1,21 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require 'rspec/core/rake_task'
5
+ require 'spree/testing_support/extension_rake'
6
+
7
+ RSpec::Core::RakeTask.new
8
+
9
+ task :default do
10
+ if Dir["spec/dummy"].empty?
11
+ Rake::Task[:test_app].invoke
12
+ Dir.chdir("../../")
13
+ end
14
+ Rake::Task[:spec].invoke
15
+ end
16
+
17
+ desc 'Generates a dummy app for testing'
18
+ task :test_app do
19
+ ENV['LIB_NAME'] = 'solidus_oxxo_pay'
20
+ Rake::Task['extension:test_app'].invoke
21
+ end
Binary file
@@ -0,0 +1,2 @@
1
+ // Placeholder manifest file.
2
+ // the installer will append this file to the app vendored assets here: vendor/assets/javascripts/spree/backend/all.js'
@@ -0,0 +1,2 @@
1
+ // Placeholder manifest file.
2
+ // the installer will append this file to the app vendored assets here: vendor/assets/javascripts/spree/frontend/all.js'
@@ -0,0 +1,4 @@
1
+ /*
2
+ Placeholder manifest file.
3
+ the installer will append this file to the app vendored assets here: 'vendor/assets/stylesheets/spree/backend/all.css'
4
+ */
@@ -0,0 +1,122 @@
1
+ .opps-title {
2
+ margin-bottom: 10px;
3
+ font-size: 15px;
4
+ font-weight: 600;
5
+ text-transform: uppercase;
6
+ }
7
+
8
+ .opps {
9
+ width: 496px;
10
+ border-radius: 4px;
11
+ box-sizing: border-box;
12
+ padding: 0 45px;
13
+ margin: 40px auto;
14
+ overflow: hidden;
15
+ border: 1px solid #b0afb5;
16
+ font-family: 'Open Sans', sans-serif;
17
+ color: #4f5365;
18
+ }
19
+
20
+ .opps-reminder {
21
+ position: relative;
22
+ top: -1px;
23
+ padding: 9px 0 10px;
24
+ font-size: 11px;
25
+ text-transform: uppercase;
26
+ text-align: center;
27
+ color: #ffffff;
28
+ background: #000000;
29
+ }
30
+
31
+ .opps-info {
32
+ margin-top: 26px;
33
+ position: relative;
34
+ }
35
+
36
+ .opps-info:after {
37
+ visibility: hidden;
38
+ display: block;
39
+ font-size: 0;
40
+ content: " ";
41
+ clear: both;
42
+ height: 0;
43
+
44
+ }
45
+
46
+ .opps-brand {
47
+ width: 45%;
48
+ float: left;
49
+ }
50
+
51
+ .opps-brand img {
52
+ max-width: 150px;
53
+ margin-top: 2px;
54
+ }
55
+
56
+ .opps-ammount {
57
+ width: 55%;
58
+ float: right;
59
+ }
60
+
61
+ .opps-ammount h2 {
62
+ font-size: 36px;
63
+ color: #000000;
64
+ line-height: 24px;
65
+ margin-bottom: 15px;
66
+ }
67
+
68
+ .opps-ammount h2 sup {
69
+ font-size: 16px;
70
+ position: relative;
71
+ top: -2px
72
+ }
73
+
74
+ .opps-ammount p {
75
+ font-size: 10px;
76
+ line-height: 14px;
77
+ }
78
+
79
+ .opps-reference {
80
+ margin-top: 14px;
81
+ }
82
+
83
+ .opps-reference {
84
+ font-size: 27px;
85
+ color: #000000;
86
+ text-align: center;
87
+ margin-top: -1px;
88
+ padding: 6px 0 7px;
89
+ border: 1px solid #b0afb5;
90
+ border-radius: 4px;
91
+ background: #f8f9fa;
92
+ }
93
+
94
+ .opps-instructions {
95
+ margin: 32px -45px 0;
96
+ padding: 32px 45px 45px;
97
+ border-top: 1px solid #b0afb5;
98
+ background: #f8f9fa;
99
+ }
100
+
101
+ .steps-list {
102
+ margin: 17px 0 0 16px;
103
+ }
104
+
105
+ li + li {
106
+ margin-top: 10px;
107
+ color: #000000;
108
+ }
109
+
110
+ .oxxo-print-button {
111
+ color: #1155cc;
112
+ }
113
+
114
+ .opps-footnote {
115
+ margin-top: 22px;
116
+ padding: 22px 20 24px;
117
+ color: #108f30;
118
+ text-align: center;
119
+ border: 1px solid #108f30;
120
+ border-radius: 4px;
121
+ background: #ffffff;
122
+ }
@@ -0,0 +1,19 @@
1
+ module Spree
2
+ class ConektaOxxoController < StoreController
3
+ skip_before_action :verify_authenticity_token
4
+
5
+ def create
6
+ if params[:data][:object][:object] == 'charge' && params[:data][:object][:status] == 'paid'
7
+ payment = Spree::Payment.find_by(response_code: params[:data][:object][:payment_method][:reference])
8
+ policy = PaymentOxxoPolicy.new(payment)
9
+ policy.process(params[:data][:object])
10
+ end
11
+ head :ok
12
+ end
13
+
14
+ def receipt
15
+ @payment = Spree::Payment.find(params[:id])
16
+ render layout: false
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,9 @@
1
+ module Spree::BaseHelper
2
+ def conekta_oxxo_receipt(order = nil)
3
+ @order ||= order
4
+ if @order.paid_with?('Oxxo')
5
+ response_code = @order.payments&.last.response_code
6
+ render partial: 'spree/conekta/payments/conekta_oxxo', locals: { order: @order, response_code: response_code }
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,96 @@
1
+ module Spree
2
+ class ConektaOxxoPayment < Spree::PaymentSource
3
+ attr_accessor :server, :test_mode, :api_key
4
+
5
+ def authorize(money, creditcard, gateway_options)
6
+
7
+ ::Conekta.api_key = api_key
8
+ ::Conekta.api_version = "2.0.0"
9
+
10
+ order = Spree::Order.find_by(number: creditcard.number)
11
+
12
+ begin
13
+ response = ::Conekta::Order.create(payload(order))
14
+ creditcard.update_attribute :conekta_order_id, response.id
15
+ ActiveMerchant::Billing::Response.new(true, 'Orden creada satisfactoriamente', {}, parse_response(response))
16
+ rescue ::Conekta::Error => error
17
+ ActiveMerchant::Billing::Response.new(false, error.details.map(&:message).join(', '))
18
+ end
19
+ end
20
+
21
+ def name
22
+ 'Oxxo Pay'
23
+ end
24
+
25
+ def month
26
+ payment_method.updated_at.month
27
+ end
28
+
29
+ def year
30
+ payment_method.updated_at.year
31
+ end
32
+
33
+ def cc_type
34
+ 'N/A'
35
+ end
36
+
37
+ def last_digits
38
+ 'N/A'
39
+ end
40
+
41
+ def actions
42
+ %w(void)
43
+ end
44
+
45
+ def gateway_customer_profile_id
46
+ user_id
47
+ end
48
+
49
+ def gateway_payment_profile_id
50
+ id
51
+ end
52
+
53
+ private
54
+ def payload(order)
55
+ {
56
+ currency: 'MXN',
57
+ customer_info: {
58
+ name: order.ship_address.full_name,
59
+ email: order.email,
60
+ phone: order.ship_address.phone
61
+ },
62
+ charges: [
63
+ {
64
+ payment_method: {
65
+ type: 'oxxo_cash'
66
+ }
67
+ }
68
+ ],
69
+ line_items: order_line_items(order),
70
+ shipping_lines: shipping_lines(order),
71
+ shipping_contact: {
72
+ address: {
73
+ street1: order.ship_address.address1,
74
+ postal_code: order.ship_address.zipcode,
75
+ country: 'mx'
76
+ }
77
+ }
78
+ }
79
+ end
80
+
81
+ def order_line_items(order)
82
+ order.line_items.map { |li| {name: li.product.name, unit_price: (li.price * 100).to_i, quantity: li.quantity} }
83
+ end
84
+
85
+ def parse_response(response)
86
+ {
87
+ authorization: response.charges.first.payment_method.reference,
88
+ conekta_order_id: response.id
89
+ }
90
+ end
91
+
92
+ def shipping_lines(order)
93
+ order.shipments.map {|s| {id: s.id, carrier: s.shipping_method.name, amount: (s.cost * 100).to_i} }
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,25 @@
1
+ module Spree
2
+ class PaymentMethod::ConektaOxxo < Spree::PaymentMethod
3
+ preference :api_key, :string, default: ''
4
+
5
+ def payment_profiles_supported?
6
+ false
7
+ end
8
+
9
+ def source_required?
10
+ true
11
+ end
12
+
13
+ def gateway_class
14
+ Spree::ConektaOxxoPayment
15
+ end
16
+
17
+ def payment_source_class
18
+ Spree::ConektaOxxoPayment
19
+ end
20
+
21
+ def auto_capture?
22
+ false
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,14 @@
1
+ class PaymentOxxoPolicy
2
+ attr_reader :payment
3
+
4
+ def initialize(payment)
5
+ @payment = payment
6
+ end
7
+
8
+ def process(options)
9
+ return unless options[:status].eql?('paid')
10
+
11
+ payment.complete if (options[:amount].to_i/100 - payment.amount).abs < 0.01
12
+ payment.order.updater.update
13
+ end
14
+ end
@@ -0,0 +1,12 @@
1
+ <fieldset>
2
+ <legend align="center">Oxxo Pay</legend>
3
+ <div class="opps-info text-center">
4
+ <div class="opps-brand">
5
+ <%= image_tag 'oxxopay_brand.png', alt: 'OXXOPay' %>
6
+ </div>
7
+ <% param_prefix = "payment_source[#{payment_method.id}]" %>
8
+ <%= hidden_field_tag "#{param_prefix}[first_name]", @order.ship_address&.first_name %>
9
+ <%= hidden_field_tag "#{param_prefix}[last_name]", @order.ship_address&.last_name %>
10
+ <%= hidden_field_tag "#{param_prefix}[number]", @order.number %>
11
+ </div>
12
+ </fieldset>
@@ -0,0 +1,13 @@
1
+ <fieldset>
2
+ <legend align="center">Oxxo Pay</legend>
3
+ <div class="opps-info text-center">
4
+ <div class="opps-brand">
5
+ <%= image_tag 'oxxopay_brand.png', alt: 'OXXOPay' %>
6
+ </div>
7
+ </div>
8
+ <div class="opps-reference">
9
+ <h3>Referencia</h3>
10
+ <h1><%= payment.response_code.to_s.scan(/.{1,4}/).join('-') %></h1>
11
+ </div>
12
+ <%= link_to t('payment.print_ticket'), oxxo_pay_receipt_path(id: payment.id), target: 'new', class: 'eyecatcher-link__text' %>
13
+ </fieldset>
@@ -0,0 +1,11 @@
1
+ <div class="row">
2
+ <div class="twelve rows alpha omega center">
3
+ <div class="payment-label-title">Oxxo Pay</div>
4
+ <p class="payment-label-description">Al completar tu compra se te entregará un número de referencia para que puedas
5
+ pagar en tu tienda Oxxo más cercana</p>
6
+ <% param_prefix = "payment_source[#{payment_method.id}]" %>
7
+ <%= hidden_field_tag "#{param_prefix}[first_name]", current_order.ship_address&.first_name %>
8
+ <%= hidden_field_tag "#{param_prefix}[last_name]", current_order.ship_address&.last_name %>
9
+ <%= hidden_field_tag "#{param_prefix}[number]", current_order&.number %>
10
+ </div>
11
+ </div>
@@ -0,0 +1,3 @@
1
+ <div>
2
+ <div class="payment-label">Oxxo pay</div>
3
+ </div>
@@ -0,0 +1,29 @@
1
+ <div class="opps">
2
+ <div class="opps-header">
3
+ <div class="opps-info">
4
+ <div class="opps-brand">
5
+ <%= image_tag 'oxxopay_brand.png', alt: 'OXXOPay', class: 'summary-oxxo-image' %>
6
+ </div>
7
+ <div class="opps-ammount">
8
+ <h3 class="opps-title">Monto a pagar</h3>
9
+ <h2><%= order.display_total %> <sup>MXN</sup></h2>
10
+ <p>OXXO cobrará una comisión adicional al momento de realizar el pago.</p>
11
+ </div>
12
+ </div>
13
+ <div class="opps-reference">
14
+ <h3 class="opps-reference-title">Referencia</h3>
15
+ <h1 class="opps-reference"><%= response_code.scan(/.{1,4}/).join('-') %></h1>
16
+ </div>
17
+ </div>
18
+ <div class="opps-instructions">
19
+ <h3>Instrucciones</h3>
20
+ <ol class="steps-list">
21
+ <li>Acude a la tienda OXXO más cercana. <a href="https://www.google.com.mx/maps/search/oxxo/" target="_blank">Encuéntrala aquí</a>.</li>
22
+ <li>Indica en caja que quieres realizar un pago de <strong>OXXOPay</strong>.</li>
23
+ <li>Dicta al cajero el número de referencia en esta ficha para que tecleé directamete en la pantalla de venta.</li>
24
+ <li>Realiza el pago correspondiente con dinero en efectivo.</li>
25
+ <li>Al confirmar tu pago, el cajero te entregará un comprobante impreso. <strong>En el podrás verificar que se haya realizado correctamente.</strong> Conserva este comprobante de pago.</li>
26
+ </ol>
27
+ <div class="opps-footnote">Al completar estos pasos recibirás un correo confirmando tu pago.</div>
28
+ </div>
29
+ </div>
@@ -0,0 +1,14 @@
1
+ <html>
2
+ <head>
3
+ <%= stylesheet_link_tag 'oxxo_pay', media: 'all', 'data-turbolinks-track': 'false' %>
4
+ <link href="https://fonts.googleapis.com/css?family=Open+Sans:400,600,700" rel="stylesheet">
5
+ </head>
6
+ <body>
7
+ <%= conekta_oxxo_receipt(@payment.order) %>
8
+ </body>
9
+ <script type="text/javascript" charset="utf-8">
10
+ document.addEventListener('DOMContentLoaded', function () {
11
+ window.print();
12
+ });
13
+ </script>
14
+ </html>
@@ -0,0 +1,5 @@
1
+ # Sample localization file for English. Add more files in this directory for other locales.
2
+ # See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
3
+
4
+ en:
5
+ hello: Hello world
data/config/routes.rb ADDED
@@ -0,0 +1,4 @@
1
+ Spree::Core::Engine.routes.draw do
2
+ get 'oxxo-pay/receipt', to: 'conekta_oxxo#receipt'
3
+ post 'oxxo-pay', to: 'conekta_oxxo#create'
4
+ end
@@ -0,0 +1,12 @@
1
+ class CreateConektaOxxoPayments < ActiveRecord::Migration[5.0]
2
+ def change
3
+ create_table :spree_conekta_oxxo_payments do |t|
4
+ t.references :payment_method
5
+ t.string :number
6
+ t.string :conekta_order_id
7
+ t.string :first_name
8
+ t.string :last_name
9
+ t.integer :user_id
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,30 @@
1
+ module SolidusOxxoPay
2
+ module Generators
3
+ class InstallGenerator < Rails::Generators::Base
4
+ class_option :auto_run_migrations, type: :boolean, default: false
5
+
6
+ def add_javascripts
7
+ append_file 'vendor/assets/javascripts/spree/frontend/all.js', "//= require spree/frontend/solidus_oxxo_pay\n"
8
+ append_file 'vendor/assets/javascripts/spree/backend/all.js', "//= require spree/backend/solidus_oxxo_pay\n"
9
+ end
10
+
11
+ def add_stylesheets
12
+ inject_into_file 'vendor/assets/stylesheets/spree/frontend/all.css', " *= require spree/frontend/solidus_oxxo_pay\n", before: /\*\//, verbose: true
13
+ inject_into_file 'vendor/assets/stylesheets/spree/backend/all.css', " *= require spree/backend/solidus_oxxo_pay\n", before: /\*\//, verbose: true
14
+ end
15
+
16
+ def add_migrations
17
+ run 'bundle exec rake railties:install:migrations FROM=solidus_oxxo_pay'
18
+ end
19
+
20
+ def run_migrations
21
+ run_migrations = options[:auto_run_migrations] || ['', 'y', 'Y'].include?(ask('Would you like to run the migrations now? [Y/n]'))
22
+ if run_migrations
23
+ run 'bundle exec rake db:migrate'
24
+ else
25
+ puts 'Skipping rake db:migrate, don\'t forget to run it!'
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,4 @@
1
+ require 'solidus_core'
2
+ require 'solidus_support'
3
+ require 'deface'
4
+ require 'solidus_oxxo_pay/engine'
@@ -0,0 +1,25 @@
1
+ module SolidusOxxoPay
2
+ class Engine < Rails::Engine
3
+ require 'spree/core'
4
+ isolate_namespace Spree
5
+ engine_name 'solidus_oxxo_pay'
6
+
7
+ # use rspec for tests
8
+ config.generators do |g|
9
+ g.test_framework :rspec
10
+ end
11
+
12
+ initializer 'spree_payment_network.register.payment_methods' do |app|
13
+ app.config.spree.payment_methods << Spree::PaymentMethod::ConektaOxxo
14
+ app.config.assets.precompile += %w( oxxopay_brand.png )
15
+ end
16
+
17
+ def self.activate
18
+ Dir.glob(File.join(File.dirname(__FILE__), '../../app/**/*_decorator*.rb')) do |c|
19
+ Rails.configuration.cache_classes ? require(c) : load(c)
20
+ end
21
+ end
22
+
23
+ config.to_prepare(&method(:activate).to_proc)
24
+ end
25
+ end
@@ -0,0 +1,6 @@
1
+ FactoryBot.define do
2
+ # Define your Spree extensions Factories within this file to enable applications, and other extensions to use and override them.
3
+ #
4
+ # Example adding this to your spec_helper will load these Factories for use:
5
+ # require 'solidus_oxxo_pay/factories'
6
+ end
@@ -0,0 +1,3 @@
1
+ module SolidusOxxoPay
2
+ VERSION = '1.0.0'
3
+ end
metadata ADDED
@@ -0,0 +1,314 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: solidus_oxxo_pay
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Magmalabs
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-06-28 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: solidus
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '3'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '2.0'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '3'
33
+ - !ruby/object:Gem::Dependency
34
+ name: solidus_support
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: deface
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '1.0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '1.0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: conekta
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ type: :runtime
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ - !ruby/object:Gem::Dependency
76
+ name: capybara
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ - !ruby/object:Gem::Dependency
90
+ name: capybara-screenshot
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ - !ruby/object:Gem::Dependency
104
+ name: poltergeist
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ - !ruby/object:Gem::Dependency
118
+ name: coffee-rails
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ - !ruby/object:Gem::Dependency
132
+ name: sass-rails
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ type: :development
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
145
+ - !ruby/object:Gem::Dependency
146
+ name: database_cleaner
147
+ requirement: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
152
+ type: :development
153
+ prerelease: false
154
+ version_requirements: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ - !ruby/object:Gem::Dependency
160
+ name: ffaker
161
+ requirement: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ type: :development
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - ">="
171
+ - !ruby/object:Gem::Version
172
+ version: '0'
173
+ - !ruby/object:Gem::Dependency
174
+ name: factory_bot
175
+ requirement: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - ">="
178
+ - !ruby/object:Gem::Version
179
+ version: '0'
180
+ type: :development
181
+ prerelease: false
182
+ version_requirements: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - ">="
185
+ - !ruby/object:Gem::Version
186
+ version: '0'
187
+ - !ruby/object:Gem::Dependency
188
+ name: rspec-rails
189
+ requirement: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - ">="
192
+ - !ruby/object:Gem::Version
193
+ version: '0'
194
+ type: :development
195
+ prerelease: false
196
+ version_requirements: !ruby/object:Gem::Requirement
197
+ requirements:
198
+ - - ">="
199
+ - !ruby/object:Gem::Version
200
+ version: '0'
201
+ - !ruby/object:Gem::Dependency
202
+ name: rubocop
203
+ requirement: !ruby/object:Gem::Requirement
204
+ requirements:
205
+ - - ">="
206
+ - !ruby/object:Gem::Version
207
+ version: 0.49.0
208
+ type: :development
209
+ prerelease: false
210
+ version_requirements: !ruby/object:Gem::Requirement
211
+ requirements:
212
+ - - ">="
213
+ - !ruby/object:Gem::Version
214
+ version: 0.49.0
215
+ - !ruby/object:Gem::Dependency
216
+ name: rubocop-rspec
217
+ requirement: !ruby/object:Gem::Requirement
218
+ requirements:
219
+ - - '='
220
+ - !ruby/object:Gem::Version
221
+ version: 1.4.0
222
+ type: :development
223
+ prerelease: false
224
+ version_requirements: !ruby/object:Gem::Requirement
225
+ requirements:
226
+ - - '='
227
+ - !ruby/object:Gem::Version
228
+ version: 1.4.0
229
+ - !ruby/object:Gem::Dependency
230
+ name: simplecov
231
+ requirement: !ruby/object:Gem::Requirement
232
+ requirements:
233
+ - - ">="
234
+ - !ruby/object:Gem::Version
235
+ version: '0'
236
+ type: :development
237
+ prerelease: false
238
+ version_requirements: !ruby/object:Gem::Requirement
239
+ requirements:
240
+ - - ">="
241
+ - !ruby/object:Gem::Version
242
+ version: '0'
243
+ - !ruby/object:Gem::Dependency
244
+ name: sqlite3
245
+ requirement: !ruby/object:Gem::Requirement
246
+ requirements:
247
+ - - "~>"
248
+ - !ruby/object:Gem::Version
249
+ version: 1.3.6
250
+ type: :development
251
+ prerelease: false
252
+ version_requirements: !ruby/object:Gem::Requirement
253
+ requirements:
254
+ - - "~>"
255
+ - !ruby/object:Gem::Version
256
+ version: 1.3.6
257
+ description: This extension process payments using the Conekta Oxxo payment method
258
+ email: developers@magmalabs.io
259
+ executables: []
260
+ extensions: []
261
+ extra_rdoc_files: []
262
+ files:
263
+ - LICENSE
264
+ - README.md
265
+ - Rakefile
266
+ - app/assets/images/oxxopay_brand.png
267
+ - app/assets/javascripts/spree/backend/solidus_oxxo_pay.js
268
+ - app/assets/javascripts/spree/frontend/solidus_oxxo_pay.js
269
+ - app/assets/stylesheets/spree/backend/solidus_oxxo_pay.css
270
+ - app/assets/stylesheets/spree/frontend/solidus_oxxo_pay.css
271
+ - app/controllers/spree/conekta_oxxo_controller.rb
272
+ - app/helpers/spree/base_helper_decorator.rb
273
+ - app/models/spree/conekta_oxxo_payment.rb
274
+ - app/models/spree/payment_method/conekta_oxxo.rb
275
+ - app/policies/payment_oxxo_policy.rb
276
+ - app/views/spree/admin/payments/source_forms/_conektaoxxo.html.erb
277
+ - app/views/spree/admin/payments/source_views/_conektaoxxo.html.erb
278
+ - app/views/spree/checkout/payment/_conektaoxxo.html.erb
279
+ - app/views/spree/checkout/payment_label/_conektaoxxo_label.html.erb
280
+ - app/views/spree/conekta/payments/_conekta_oxxo.html.erb
281
+ - app/views/spree/conekta_oxxo/receipt.html.erb
282
+ - config/locales/en.yml
283
+ - config/routes.rb
284
+ - db/migrate/20181121200357_create_conekta_oxxo_payments.rb
285
+ - lib/generators/solidus_oxxo_pay/install/install_generator.rb
286
+ - lib/solidus_oxxo_pay.rb
287
+ - lib/solidus_oxxo_pay/engine.rb
288
+ - lib/solidus_oxxo_pay/factories.rb
289
+ - lib/solidus_oxxo_pay/version.rb
290
+ homepage: https://www.magmalabs.io/
291
+ licenses:
292
+ - MIT
293
+ metadata: {}
294
+ post_install_message:
295
+ rdoc_options: []
296
+ require_paths:
297
+ - lib
298
+ required_ruby_version: !ruby/object:Gem::Requirement
299
+ requirements:
300
+ - - ">="
301
+ - !ruby/object:Gem::Version
302
+ version: '0'
303
+ required_rubygems_version: !ruby/object:Gem::Requirement
304
+ requirements:
305
+ - - ">="
306
+ - !ruby/object:Gem::Version
307
+ version: '0'
308
+ requirements: []
309
+ rubyforge_project:
310
+ rubygems_version: 2.7.6
311
+ signing_key:
312
+ specification_version: 4
313
+ summary: A solidus extension to process payments via Conekta Oxxo
314
+ test_files: []