Abraham Rodriguez

initial commint

1 +/.bundle/
2 +/.yardoc
3 +/Gemfile.lock
4 +/_yardoc/
5 +/coverage/
6 +/doc/
7 +/pkg/
8 +/spec/reports/
9 +/tmp/
1 +language: ruby
2 +rvm:
3 + - 2.1.5
4 +before_install: gem install bundler -v 1.10.0.pre.2
1 +source 'https://rubygems.org'
2 +
3 +# Specify your gem's dependencies in var.gemspec
4 +gemspec
1 +# Var
2 +
3 +Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/var`. To experiment with that code, run `bin/console` for an interactive prompt.
4 +
5 +TODO: Delete this and the text above, and describe your gem
6 +
7 +## Installation
8 +
9 +Add this line to your application's Gemfile:
10 +
11 +```ruby
12 +gem 'var'
13 +```
14 +
15 +And then execute:
16 +
17 + $ bundle
18 +
19 +Or install it yourself as:
20 +
21 + $ gem install var
22 +
23 +## Usage
24 +
25 +TODO: Write usage instructions here
26 +
27 +## Development
28 +
29 +After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment.
30 +
31 +To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
32 +
33 +## Contributing
34 +
35 +1. Fork it ( https://github.com/[my-github-username]/var/fork )
36 +2. Create your feature branch (`git checkout -b my-new-feature`)
37 +3. Commit your changes (`git commit -am 'Add some feature'`)
38 +4. Push to the branch (`git push origin my-new-feature`)
39 +5. Create a new Pull Request
1 +require "bundler/gem_tasks"
1 +#!/usr/bin/env ruby
2 +
3 +require "bundler/setup"
4 +require "var"
5 +
6 +# You can add fixtures and/or initialization code here to make experimenting
7 +# with your gem easier. You can also use a different console, if you like.
8 +
9 +# (If you use this, don't forget to add pry to your Gemfile!)
10 +# require "pry"
11 +# Pry.start
12 +
13 +require "irb"
14 +IRB.start
1 +#!/bin/bash
2 +set -euo pipefail
3 +IFS=$'\n\t'
4 +
5 +bundle install
6 +
7 +# Do any other automated setup that you need to do here
1 +require "var/version"
2 +require 'conekta'
3 +
4 +module Var
5 + @@valid_services = [:conekta]
6 +
7 + def self.valid_services
8 + @@valid_services
9 + end
10 +
11 + def self.create_charge(service, object, options = {})
12 + if(!@@valid_services.include?(service))
13 + return { error_message: 'Service is not supported' }
14 + end
15 + if(!object.respond_to?(:charge_with))
16 + return { error_message: "#{object.class.to_s} doesn't support charges"}
17 + end
18 + object.charge_with(:conekta, options)
19 + end
20 +
21 + private
22 +end
23 +
24 +module ActsAsChargeable
25 + extend ActiveSupport::Concern
26 +
27 + module ClassMethods
28 + def acts_as_chargeable(keys = {})
29 + include ChargeableInstanceMethods
30 + cattr_accessor :sync_attributes
31 + self.sync_attributes = keys
32 + end
33 + end
34 +
35 + module ChargeableInstanceMethods
36 + def charge_with(service, options)
37 + begin
38 + self.send("charge_with_#{service.to_s}", options)
39 + rescue => exception
40 + return { error_message: exception.message }
41 + end
42 + end
43 +
44 + def charge_with_conekta(options)
45 + if(!options.include? :card_token)
46 + error_message = "Conekta needs a card token sent as a third paramater"
47 + return { error_message: error_message}
48 + end
49 + @charge ||= Conekta::Charge.create({
50 + description: self.sync_attribute('description'),
51 + amount: self.sync_attribute('amount'),
52 + currency: "MXN",
53 + reference_id: self.sync_attribute('reference_id'),
54 + card: options[:card_token],
55 + details: {
56 + name: self.sync_attribute('details_name'),
57 + email: self.sync_attribute('details_email'),
58 + line_items: [{
59 + name: self.sync_attribute('details_name'),
60 + description: self.sync_attribute('description'),
61 + unit_price: self.sync_attribute('amount'),
62 + quantity: 1,
63 + }]
64 + }
65 + })
66 + end
67 +
68 + def find_charge(service)
69 + begin
70 + if(!Var.valid_services.include?(service))
71 + return { error_message: 'Service is not supported' }
72 + end
73 + self.send("find_#{service.to_s}_charge")
74 + rescue => exception
75 + return { error_message: exception.message }
76 + end
77 + end
78 +
79 + def find_conekta_charge
80 + ref_id = self.sync_attribute('reference_id')
81 + Conekta::Charge.where({'status.ne'=>'paid', 'reference_id'=> ref_id})
82 + end
83 +
84 + def sync_attribute(key)
85 + return self.send(key) unless self.sync_attributes.include? key.to_sym
86 + self.send(sync_attributes[key.to_sym])
87 + end
88 + end
89 +end
90 +
91 +ActiveRecord::Base.send(:include, ActsAsChargeable) if defined? ActiveRecord::Base
...\ No newline at end of file ...\ No newline at end of file
1 +module Var
2 + VERSION = "0.1.0"
3 +end
No preview for this file type
1 +# coding: utf-8
2 +lib = File.expand_path('../lib', __FILE__)
3 +$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4 +require 'var/version'
5 +
6 +Gem::Specification.new do |spec|
7 + spec.name = "var"
8 + spec.version = Var::VERSION
9 + spec.authors = ["abrahamrq"]
10 + spec.email = ["abraham.rq03@gmail.com"]
11 +
12 + spec.summary = %q{summary of var}
13 + spec.description = %q{description of var}
14 + spec.homepage = "https://github.com/abrahamrq"
15 +
16 + # Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
17 + # delete this section to allow pushing this gem to any host.
18 + if spec.respond_to?(:metadata)
19 + spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'"
20 + else
21 + raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
22 + end
23 +
24 + spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
25 + spec.bindir = "exe"
26 + spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
27 + spec.require_paths = ["lib"]
28 +
29 + spec.add_dependency 'conekta', "~> 0.5"
30 + spec.add_development_dependency "bundler", "~> 1.10.a"
31 + spec.add_development_dependency "rake", "~> 10.0"
32 +end