Toggle navigation
Toggle navigation
This project
Loading...
Sign in
Ruby Gems
/
var
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
Abraham Rodriguez
2016-01-07 16:36:47 -0600
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
5e2929447b65ba014ee20b4a1e22b8b902b12985
5e292944
1 parent
bfcdff60
Rubocop and handle exceptions correctly
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
75 additions
and
65 deletions
Rakefile
bin/console
lib/generators/var_model/templates/var_model.rb
lib/generators/var_model/var_model_generator.rb
lib/var.rb
lib/var/version.rb
var.gemspec
Rakefile
View file @
5e29294
require
"bundler/gem_tasks"
require
'bundler/gem_tasks'
...
...
bin/console
View file @
5e29294
#!/usr/bin/env ruby
require
"bundler/setup"
require
"var"
require
'bundler/setup'
require
'var'
# You can add fixtures and/or initialization code here to make experimenting
# with your gem easier. You can also use a different console, if you like.
...
...
@@ -10,5 +10,5 @@ require "var"
# require "pry"
# Pry.start
require
"irb"
require
'irb'
IRB
.
start
...
...
lib/generators/var_model/templates/var_model.rb
View file @
5e29294
class
AddVarStatusTo
<
%=@model_name.pluralize.camelize%> < ActiveRecord::Migration
def change
add_column :<%=
@model_name
.
pluralize
.
underscore
%>, :var_status, :string, default: 'pending'
add_column :<%=@model_name.pluralize.underscore%>
,
:barcode_url
,
:string
add_column :<%=@model_name.pluralize.underscore%>
,
:var_barcode_url
,
:string
add_column
:<
%=
@model_name
.
pluralize
.
underscore
%>, :var_barcode, :string
add_column :<%=@model_name.pluralize.underscore%>
,
:var_payment_expires_at
,
:datetime
add_column
:<
%=
@model_name
.
pluralize
.
underscore
%>, :var_id, :string
add_column :<%=@model_name.pluralize.underscore%>
,
:var_service
,
:string
end
end
...
...
lib/generators/var_model/var_model_generator.rb
View file @
5e29294
require
'rails/generators'
# Generator for models
class
VarModelGenerator
<
Rails
::
Generators
::
NamedBase
source_root
File
.
expand_path
(
'../templates'
,
__FILE__
)
desc
"This generator generates layout file with navigation."
desc
'This generator generates layout file with navigation.'
def
generate_model
d
=
Time
.
now
.
strftime
(
'%Y%m%d%H%M%S'
)
@model_name
=
name
template
"var_model.rb"
,
template
'var_model.rb'
,
"db/migrate/
#{
d
}
_add_var_status_to_
#{
name
.
pluralize
.
underscore
}
.rb"
end
end
...
...
lib/var.rb
View file @
5e29294
require
"var/version"
require
'var/version'
require
'conekta'
require
'paypal-sdk-rest'
# Main Module
module
Var
# TODO: add paypal
# @@valid_services = [:conekta, :paypal]
...
...
@@ -13,15 +14,15 @@ module Var
def
self
.
create_charge
(
service
,
object
,
options
=
{})
return
{
error_message:
'Service is not supported'
}
unless
VALID_SERVICES
.
include?
service
return
{
error_message:
"
#{
object
.
class
.
to_s
}
doesn't support charges"
}
unless
object
.
respond_to?
(
:charge_with
)
return
{
error_message:
"
#{
object
.
class
}
doesn't support charges"
}
unless
object
.
respond_to?
(
:charge_with
)
charge
=
object
.
charge_with
(
service
,
options
)
return
charge
charge
end
end
# Module for models
module
ActsAsChargeable
extend
ActiveSupport
::
Concern
# Class Methods
module
ClassMethods
def
acts_as_chargeable
(
keys
=
{})
include
ChargeableInstanceMethods
...
...
@@ -29,55 +30,62 @@ module ActsAsChargeable
self
.
sync_attributes
=
keys
end
end
# Instance Methods
module
ChargeableInstanceMethods
def
charge_with
(
service
,
options
)
if
!
instance_support?
(
service
)
error_message
=
"
#{
self
.
class
.
to_s
}
doesn't support"
\
" charges with
#{
service
.
to_s
}
"
return
{
error_message:
error_message
}
unless
instance_support?
(
service
)
error_message
=
"
#{
self
.
class
}
doesn't support"
\
" charges with
#{
service
}
"
return
{
error_message:
error_message
}
end
se
lf
.
send
(
"charge_with_
#{
service
.
to_s
}
"
,
options
)
se
nd
(
"charge_with_
#{
service
}
"
,
options
)
rescue
Exception
=>
exception
{
error_message:
exception
.
message
}
end
def
charge_with_conekta
(
options
)
charge
=
conekta_charge
(
options
)
object
.
update_columns
(
var_status:
charge
.
status
)
update_columns
(
var_status:
charge
.
status
,
var_id:
charge
.
id
,
var_service:
'conekta'
)
update_conekta_barcode
(
charge
)
if
options
[
:conekta_type
]
==
'oxxo'
charge
rescue
Conekta
::
ParameterValidationError
,
Conekta
::
ProcessingError
,
Conekta
::
Error
=>
e
self
.
update_columns
(
var_status:
'failed'
)
rescue
Conekta
::
ParameterValidationError
,
Conekta
::
ProcessingError
,
Conekta
::
Error
=>
e
update_columns
(
var_status:
'failed'
)
{
error_message:
e
.
message
}
end
def
conekta_charge
(
conekta_type
)
def
conekta_charge
(
options
)
@charge
||=
Conekta
::
Charge
.
create
({
description:
s
elf
.
s
ync
(
:conekta
,
'description'
),
amount:
s
elf
.
sync
(
:conekta
,
'amount'
),
currency:
"MXN"
,
reference_id:
s
elf
.
s
ync
(
:conekta
,
'reference_id'
),
description:
sync
(
:conekta
,
'description'
),
amount:
s
ync
(
:conekta
,
'amount'
),
currency:
'MXN'
,
reference_id:
sync
(
:conekta
,
'reference_id'
),
details:
{
name:
self
.
sync
(
:conekta
,
'name'
),
email:
self
.
sync
(
:conekta
,
'email'
),
name:
sync
(
:conekta
,
'name'
),
email:
sync
(
:conekta
,
'email'
),
line_items:
[{
name:
self
.
sync
(
:conekta
,
'name'
),
description:
self
.
sync
(
:conekta
,
'description'
),
unit_price:
self
.
sync
(
:conekta
,
'amount'
),
quantity:
1
,
}]
}
description:
sync
(
:conekta
,
'description'
),
quantity:
1
,
unit_price:
sync
(
:conekta
,
'amount'
),
name:
sync
(
:conekta
,
'name'
)
}]
}
}.
merge
(
conekta_type_of_charge
(
options
)))
end
def
conekta_type_of_charge
(
conekta_type
)
def
conekta_type_of_charge
(
options
)
if
options
[
:conekta_type
]
==
'card'
{
card:
options
[
:card_token
]
}
elsif
options
[
:conekta_type
]
==
'oxxo'
{
cash:
{
type:
"oxxo"
,
expires_at:
(
Time
.
zone
.
today
+
3
.
days
).
strftime
(
'%Y-%m-%d'
)}
{
cash:
{
type:
'oxxo'
,
expires_at:
(
Time
.
zone
.
today
+
3
.
days
).
strftime
(
'%Y-%m-%d'
)
}
}
end
end
def
update_conekta_barcode
(
charge
)
method
=
charge
.
payment_method
update_columns
(
var_barcode:
method
.
barcode
,
var_barcode_url:
method
.
barcode_url
,
var_payment_expires_at:
Time
.
at
(
method
.
expires_at
))
end
# def charge_with_paypal(options)
# if(!options.include? :card)
# error_message = "Paypal needs a card sent as a third paramater"
...
...
@@ -110,13 +118,9 @@ module ActsAsChargeable
# description: self.sync(:paypal, 'description') }]})
# end
def
find_charge
(
service
)
if
!
instance_support?
(
service
)
error_message
=
"
#{
self
.
class
.
to_s
}
doesn't support"
\
" charges with
#{
service
.
to_s
}
"
return
{
error_message:
error_message
}
end
self
.
send
(
"find_
#{
service
.
to_s
}
_charge"
)
def
find_charge
return
{
error_message:
'Not charged yet'
}
unless
var_service
send
(
"find_
#{
var_service
}
_charge"
)
rescue
Exception
=>
exception
{
error_message:
exception
.
message
}
end
...
...
@@ -127,18 +131,17 @@ module ActsAsChargeable
end
def
find_conekta_charge
ref_id
=
self
.
sync
(
:conekta
,
'reference_id'
)
Conekta
::
Charge
.
where
({
'status.ne'
=>
'paid'
,
'reference_id'
=>
ref_id
})
Conekta
::
Charge
.
find
(
var_id
)
end
def
instance_support?
(
service
)
return
self
.
sync_attributes
.
include?
(
service
)
sync_attributes
.
include?
(
service
)
end
def
sync
(
service
,
key
)
service_attributes
=
se
lf
.
send
(
"
#{
service
.
to_s
}
_attributes"
)
return
se
lf
.
send
(
key
)
if
!
service_attributes
.
include?
key
.
to_sym
se
lf
.
se
nd
(
service_attributes
[
key
.
to_sym
])
service_attributes
=
se
nd
(
"
#{
service
}
_attributes"
)
return
se
nd
(
key
)
unless
service_attributes
.
include?
key
.
to_sym
send
(
service_attributes
[
key
.
to_sym
])
end
# def sync_attribute(key)
...
...
@@ -147,13 +150,15 @@ module ActsAsChargeable
# end
def
conekta_attributes
s
elf
.
s
ync_attributes
[
:conekta
]
||
{}
sync_attributes
[
:conekta
]
||
{}
end
def
paypal_attributes
s
elf
.
s
ync_attributes
[
:paypal
]
||
{}
sync_attributes
[
:paypal
]
||
{}
end
end
end
ActiveRecord
::
Base
.
send
(
:include
,
ActsAsChargeable
)
if
defined?
ActiveRecord
::
Base
\ No newline at end of file
if
defined?
ActiveRecord
::
Base
ActiveRecord
::
Base
.
send
(
:include
,
ActsAsChargeable
)
end
...
...
lib/var/version.rb
View file @
5e29294
# Var Version
module
Var
VERSION
=
"0.2.5"
VERSION
=
'0.2.8'
end
...
...
var.gemspec
View file @
5e29294
...
...
@@ -4,30 +4,30 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
require
'var/version'
Gem
::
Specification
.
new
do
|
spec
|
spec
.
name
=
"var"
spec
.
name
=
'var'
spec
.
version
=
Var
::
VERSION
spec
.
authors
=
[
"abrahamrq"
]
spec
.
email
=
[
"abraham.rq03@gmail.com"
]
spec
.
authors
=
[
'abrahamrq'
]
spec
.
email
=
[
'abraham.rq03@gmail.com'
]
spec
.
summary
=
%q{summary of var}
spec
.
description
=
%q{description of var}
spec
.
homepage
=
"https://github.com/abrahamrq"
spec
.
summary
=
'summary of var'
spec
.
description
=
'description of var'
spec
.
homepage
=
'https://github.com/abrahamrq'
# Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
# delete this section to allow pushing this gem to any host.
if
spec
.
respond_to?
(
:metadata
)
spec
.
metadata
[
'allowed_push_host'
]
=
"TODO: Set to 'http://mygemserver.com'"
else
raise
"RubyGems 2.0 or newer is required to protect against public gem pushes."
fail
'RubyGems 2.0+ is required to protect against public gem pushes.'
end
spec
.
files
=
`git ls-files -z`
.
split
(
"
\x0
"
).
reject
{
|
f
|
f
.
match
(
%r{^(test|spec|features)/}
)
}
spec
.
bindir
=
"exe"
spec
.
bindir
=
'exe'
spec
.
executables
=
spec
.
files
.
grep
(
%r{^exe/}
)
{
|
f
|
File
.
basename
(
f
)
}
spec
.
require_paths
=
[
"lib"
]
spec
.
require_paths
=
[
'lib'
]
spec
.
add_dependency
'conekta'
,
"~> 0.5"
spec
.
add_dependency
'conekta'
,
'~> 0.5'
spec
.
add_dependency
'paypal-sdk-rest'
spec
.
add_development_dependency
"bundler"
,
"~> 1.10.a"
spec
.
add_development_dependency
"rake"
,
"~> 10.0"
spec
.
add_development_dependency
'bundler'
,
'~> 1.10.a'
spec
.
add_development_dependency
'rake'
,
'~> 10.0'
end
...
...
Please
register
or
login
to post a comment