Showing
3 changed files
with
25 additions
and
14 deletions
1 | -class AddVarStatusTo<%=@model_name.camelize%> < ActiveRecord::Migration | 1 | +class AddVarStatusTo<%=@model_name.pluralize.camelize%> < ActiveRecord::Migration |
2 | def change | 2 | def change |
3 | add_column :<%=@model_name.pluralize.underscore%>, :var_status, :string, default: 'pending' | 3 | add_column :<%=@model_name.pluralize.underscore%>, :var_status, :string, default: 'pending' |
4 | + add_column :<%=@model_name.pluralize.underscore%>, :barcode_url, :string | ||
4 | end | 5 | end |
5 | end | 6 | end | ... | ... |
1 | require 'rails/generators' | 1 | require 'rails/generators' |
2 | 2 | ||
3 | -class VarStatusGenerator < Rails::Generators::NamedBase | 3 | +class VarModelGenerator < Rails::Generators::NamedBase |
4 | source_root File.expand_path('../templates', __FILE__) | 4 | source_root File.expand_path('../templates', __FILE__) |
5 | desc "This generator generates layout file with navigation." | 5 | desc "This generator generates layout file with navigation." |
6 | 6 | ||
7 | - def generate_status | 7 | + def generate_model |
8 | d = Time.now.strftime('%Y%m%d%H%M%S') | 8 | d = Time.now.strftime('%Y%m%d%H%M%S') |
9 | @model_name = name | 9 | @model_name = name |
10 | - template "var_status.rb", | 10 | + template "var_model.rb", |
11 | "db/migrate/#{d}_add_var_status_to_#{name.pluralize.underscore}.rb" | 11 | "db/migrate/#{d}_add_var_status_to_#{name.pluralize.underscore}.rb" |
12 | end | 12 | end |
13 | end | 13 | end | ... | ... |
... | @@ -15,7 +15,6 @@ module Var | ... | @@ -15,7 +15,6 @@ module Var |
15 | return { error_message: 'Service is not supported' } unless VALID_SERVICES.include? service | 15 | return { error_message: 'Service is not supported' } unless VALID_SERVICES.include? service |
16 | return { error_message: "#{object.class.to_s} doesn't support charges"} unless object.respond_to?(:charge_with) | 16 | return { error_message: "#{object.class.to_s} doesn't support charges"} unless object.respond_to?(:charge_with) |
17 | charge = object.charge_with(service, options) | 17 | charge = object.charge_with(service, options) |
18 | - object.update_columns(var_status: 'payed') unless charge.include? :error_message | ||
19 | return charge | 18 | return charge |
20 | end | 19 | end |
21 | end | 20 | end |
... | @@ -44,15 +43,19 @@ module ActsAsChargeable | ... | @@ -44,15 +43,19 @@ module ActsAsChargeable |
44 | end | 43 | end |
45 | 44 | ||
46 | def charge_with_conekta(options) | 45 | def charge_with_conekta(options) |
47 | - if(!options.include? :card_token) | 46 | + charge = conekta_charge(options) |
48 | - error_message = "Conekta needs a card token sent as a third paramater" | 47 | + object.update_columns(var_status: charge.status) |
49 | - return { error_message: error_message} | 48 | + charge |
50 | - end | 49 | + rescue Conekta::ParameterValidationError, Conekta::ProcessingError, Conekta::Error => e |
50 | + self.update_columns(var_status: 'failed') | ||
51 | + { error_message: e.message } | ||
52 | + end | ||
53 | + | ||
54 | + def conekta_charge(conekta_type) | ||
51 | @charge ||= Conekta::Charge.create({ | 55 | @charge ||= Conekta::Charge.create({ |
52 | description: self.sync(:conekta, 'description'), | 56 | description: self.sync(:conekta, 'description'), |
53 | amount: self.sync(:conekta, 'amount'), currency: "MXN", | 57 | amount: self.sync(:conekta, 'amount'), currency: "MXN", |
54 | reference_id: self.sync(:conekta, 'reference_id'), | 58 | reference_id: self.sync(:conekta, 'reference_id'), |
55 | - card: options[:card_token], | ||
56 | details: { | 59 | details: { |
57 | name: self.sync(:conekta, 'name'), | 60 | name: self.sync(:conekta, 'name'), |
58 | email: self.sync(:conekta, 'email'), | 61 | email: self.sync(:conekta, 'email'), |
... | @@ -62,10 +65,17 @@ module ActsAsChargeable | ... | @@ -62,10 +65,17 @@ module ActsAsChargeable |
62 | unit_price: self.sync(:conekta, 'amount'), quantity: 1, | 65 | unit_price: self.sync(:conekta, 'amount'), quantity: 1, |
63 | }] | 66 | }] |
64 | } | 67 | } |
65 | - }) | 68 | + }.merge(conekta_type_of_charge(options))) |
66 | - rescue Conekta::ParameterValidationError, Conekta::ProcessingError, Conekta::Error => e | 69 | + end |
67 | - self.update_columns(var_status: 'failed') | 70 | + |
68 | - { error_message: e.message } | 71 | + def conekta_type_of_charge(conekta_type) |
72 | + if options[:conekta_type] == 'card' | ||
73 | + { card: options[:card_token] } | ||
74 | + elsif options[:conekta_type] == 'oxxo' | ||
75 | + { cash: { type: "oxxo", | ||
76 | + expires_at: (Time.zone.today + 3.days).strftime('%Y-%m-%d')} | ||
77 | + } | ||
78 | + end | ||
69 | end | 79 | end |
70 | 80 | ||
71 | # def charge_with_paypal(options) | 81 | # def charge_with_paypal(options) | ... | ... |
-
Please register or login to post a comment