solidus_oxxo_pay 1.0.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 (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: []