Abraham Rodriguez

exceptions

Showing 1 changed file with 62 additions and 72 deletions
...@@ -12,10 +12,11 @@ module Var ...@@ -12,10 +12,11 @@ module Var
12 end 12 end
13 13
14 def self.create_charge(service, object, options = {}) 14 def self.create_charge(service, object, options = {})
15 - binding.pry
16 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
17 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)
18 - 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
19 end 20 end
20 end 21 end
21 22
...@@ -37,86 +38,77 @@ module ActsAsChargeable ...@@ -37,86 +38,77 @@ module ActsAsChargeable
37 " charges with #{service.to_s}" 38 " charges with #{service.to_s}"
38 return { error_message: error_message} 39 return { error_message: error_message}
39 end 40 end
40 - begin 41 + self.send("charge_with_#{service.to_s}", options)
41 - self.send("charge_with_#{service.to_s}", options) 42 + rescue Exception => exception
42 - rescue => exception 43 + { error_message: exception.message }
43 - return { error_message: exception.message }
44 - end
45 end 44 end
46 45
47 def charge_with_conekta(options) 46 def charge_with_conekta(options)
48 - binding.pry
49 if(!options.include? :card_token) 47 if(!options.include? :card_token)
50 error_message = "Conekta needs a card token sent as a third paramater" 48 error_message = "Conekta needs a card token sent as a third paramater"
51 return { error_message: error_message} 49 return { error_message: error_message}
52 end 50 end
53 - begin 51 + @charge ||= Conekta::Charge.create({
54 - @charge ||= Conekta::Charge.create({ 52 + description: self.sync(:conekta, 'description'),
55 - description: self.sync(:conekta, 'description'), 53 + amount: self.sync(:conekta, 'amount'), currency: "MXN",
56 - amount: self.sync(:conekta, 'amount'), 54 + reference_id: self.sync(:conekta, 'reference_id'),
57 - currency: "MXN", 55 + card: options[:card_token],
58 - reference_id: self.sync(:conekta, 'reference_id'), 56 + details: {
59 - card: options[:card_token], 57 + name: self.sync(:conekta, 'name'),
60 - details: { 58 + email: self.sync(:conekta, 'email'),
59 + line_items: [{
61 name: self.sync(:conekta, 'name'), 60 name: self.sync(:conekta, 'name'),
62 - email: self.sync(:conekta, 'email'), 61 + description: self.sync(:conekta, 'description'),
63 - line_items: [{ 62 + unit_price: self.sync(:conekta, 'amount'), quantity: 1,
64 - name: self.sync(:conekta, 'name'), 63 + }]
65 - description: self.sync(:conekta, 'description'), 64 + }
66 - unit_price: self.sync(:conekta, 'amount'), 65 + })
67 - quantity: 1, 66 + rescue Conekta::ParameterValidationError, Conekta::ProcessingError, Conekta::Error => e
68 - }] 67 + self.update_columns(var_status: 'failed')
69 - } 68 + { error_message: e.message }
70 - })
71 - rescue => exception
72 - self.update_columns(var_status: 'failed')
73 - return { error_message: exception.message }
74 - end
75 end 69 end
76 70
77 - def charge_with_paypal(options) 71 + # def charge_with_paypal(options)
78 - if(!options.include? :card) 72 + # if(!options.include? :card)
79 - error_message = "Paypal needs a card sent as a third paramater" 73 + # error_message = "Paypal needs a card sent as a third paramater"
80 - return { error_message: error_message} 74 + # return { error_message: error_message}
81 - end 75 + # end
82 - @payment = PayPal::SDK::REST::Payment.new({ 76 + # @payment = PayPal::SDK::REST::Payment.new({
83 - intent: "sale", 77 + # intent: "sale",
84 - payer: { 78 + # payer: {
85 - payer_info: { 79 + # payer_info: {
86 - email: self.sync(:paypal, 'email')}, 80 + # email: self.sync(:paypal, 'email')},
87 - payment_method: "credit_card", 81 + # payment_method: "credit_card",
88 - funding_instruments: [{ 82 + # funding_instruments: [{
89 - credit_card: { 83 + # credit_card: {
90 - type: options[:card][:type], 84 + # type: options[:card][:type],
91 - number: options[:card][:number], 85 + # number: options[:card][:number],
92 - expire_month: options[:card][:expire_month], 86 + # expire_month: options[:card][:expire_month],
93 - expire_year: options[:card][:expire_year], 87 + # expire_year: options[:card][:expire_year],
94 - cvv2: options[:card][:cvv2]}}]}, 88 + # cvv2: options[:card][:cvv2]}}]},
95 - transactions: [{ 89 + # transactions: [{
96 - item_list: { 90 + # item_list: {
97 - items: [{ 91 + # items: [{
98 - name: self.sync(:paypal, 'name'), 92 + # name: self.sync(:paypal, 'name'),
99 - sku: self.sync(:paypal, 'sku'), 93 + # sku: self.sync(:paypal, 'sku'),
100 - price: self.sync(:paypal, 'price'), 94 + # price: self.sync(:paypal, 'price'),
101 - currency: "MXN", 95 + # currency: "MXN",
102 - quantity: 1 }]}, 96 + # quantity: 1 }]},
103 - amount: { 97 + # amount: {
104 - total: self.sync(:paypal, 'price'), 98 + # total: self.sync(:paypal, 'price'),
105 - currency: "MXN" }, 99 + # currency: "MXN" },
106 - description: self.sync(:paypal, 'description') }]}) 100 + # description: self.sync(:paypal, 'description') }]})
107 - end 101 + # end
108 102
109 def find_charge(service) 103 def find_charge(service)
110 - begin 104 + if !instance_support?(service)
111 - if !instance_support?(service) 105 + error_message = "#{self.class.to_s} doesn't support" \
112 - error_message = "#{self.class.to_s} doesn't support" \ 106 + " charges with #{service.to_s}"
113 - " charges with #{service.to_s}" 107 + return { error_message: error_message}
114 - return { error_message: error_message}
115 - end
116 - self.send("find_#{service.to_s}_charge")
117 - rescue => exception
118 - return { error_message: exception.message }
119 end 108 end
109 + self.send("find_#{service.to_s}_charge")
110 + rescue Exception => exception
111 + { error_message: exception.message }
120 end 112 end
121 113
122 def charged?(service) 114 def charged?(service)
...@@ -135,9 +127,7 @@ module ActsAsChargeable ...@@ -135,9 +127,7 @@ module ActsAsChargeable
135 127
136 def sync(service, key) 128 def sync(service, key)
137 service_attributes = self.send("#{service.to_s}_attributes") 129 service_attributes = self.send("#{service.to_s}_attributes")
138 - if !service_attributes.include? key.to_sym 130 + return self.send(key) if !service_attributes.include? key.to_sym
139 - return self.send(key)
140 - end
141 self.send(service_attributes[key.to_sym]) 131 self.send(service_attributes[key.to_sym])
142 end 132 end
143 133
......