conekticut 0.0.2

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 696b1f1c94c9cbe238d7905b8086d2ca34f4a225
4
+ data.tar.gz: 3741322ac6c34522bfb2499efc30072644734f7e
5
+ SHA512:
6
+ metadata.gz: d5166ccbbdcad3e427b9ecb2d5d8b9176dea9982e5bed5d623e00b9cb5779f3388e2f392873954ac785066bb6a7b175e04e99b78f7e53f0a6d60779eca7b75c2
7
+ data.tar.gz: 273b93b8b914a7254034b491e3948c9c5dc2a46eb370b2c80d7fad8c00d796076501c5dd0547c77405a39b940d4712c5288dfb76567d6fae18522006efa55dd1
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ *.swp
4
+ .bundle
5
+ .config
6
+ .yardoc
7
+ Gemfile.lock
8
+ InstalledFiles
9
+ _yardoc
10
+ coverage
11
+ doc/
12
+ lib/bundler/man
13
+ pkg
14
+ rdoc
15
+ spec/reports
16
+ test/tmp
17
+ test/version_tmp
18
+ tmp
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format progress
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in conekticut.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Ian Rodriguez
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,112 @@
1
+ # Conekticut
2
+
3
+ This gem provides a simple yet extremely flexible way to interact with the [Conekta API](https://www.conekta.io/docs/api)
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'conekticut'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install conekticut
18
+
19
+ ## Configuring Conekticut
20
+
21
+ Conekticut can be configured in a rails initializer like so:
22
+
23
+ ```ruby
24
+ Conekticut.configure do |c|
25
+ c.public_key = "<your_conekta_public_api_key>"
26
+ c.private_key = "<your_conekta_public_api_key>"
27
+ c.use_ssl = true
28
+ c.ssl_cert_path = "<your_ssl_cert_path>"
29
+ end
30
+ ```
31
+
32
+ > If using rails you can dump this in a `conekticut.rb` initializer.
33
+
34
+ ## Creating payments
35
+
36
+ The `create` method takes a hash with one of the following structures:
37
+
38
+ ```ruby
39
+ payment_info_cc = {
40
+ "currency"=>"MXN",
41
+ "amount"=> 20000, #the amount should be specified in cents
42
+ "description"=>"Some Description",
43
+ "reference_id"=>"A transaction reference",
44
+ "card"=> {
45
+ "number"=> 4111111111111111,
46
+ "name"=>"Card owner",
47
+ "exp_month"=> 12,
48
+ "exp_year"=> 2015,
49
+ "cvc"=> 666, #Security code
50
+ "address"=> {
51
+ "street1"=>"Some street",
52
+ "city"=>"Some City",
53
+ "state"=>"Some State",
54
+ "country"=>"Some Country",
55
+ "zip"=>"Some ZIP :P"
56
+ }
57
+ }
58
+ }
59
+
60
+ payment_info_oxxo = {
61
+ "currency"=>"MXN",
62
+ "amount"=> 20000, #the amount should be specified in cents
63
+ "description"=>"Some Description",
64
+ "reference_id"=>"A transaction reference",
65
+ "cash"=> {
66
+ "type"=>"oxxo"
67
+ },
68
+ "details"=> {
69
+ "name"=>"Some name",
70
+ "email"=>"Some email",
71
+ "phone"=>"Some phone number"
72
+ }
73
+ }
74
+
75
+ payment_info_banc = {
76
+ "currency"=>"MXN",
77
+ "amount"=>20000,
78
+ "description"=>"Some description",
79
+ "reference_id"=>"A transaction reference",
80
+ "bank"=> {
81
+ "type"=>"banorte"
82
+ },
83
+ "details"=> {
84
+ "name"=>"Some name",
85
+ "email"=>"Some email",
86
+ "phone"=>"Some phone number"
87
+ }
88
+ }
89
+ ```
90
+
91
+ After you have your payment info you can call:
92
+
93
+ ```ruby
94
+ Conekticut::Payment.create("/charges", payment_info_cc)
95
+ ```
96
+
97
+ This method will return a hash which is the representation of the JSON the API returns, use the info as you see fit.
98
+
99
+ ## TODO
100
+
101
+ 1. Support for returning payments
102
+ 2. Support for canceling payments
103
+ 3. Support for consulting your history
104
+ 4. Better error handling
105
+
106
+ ## Contributing
107
+
108
+ 1. Fork it
109
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
110
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
111
+ 4. Push to the branch (`git push origin my-new-feature`)
112
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,29 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'conekticut/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "conekticut"
8
+ spec.version = Conekticut::VERSION
9
+ spec.authors = ["Ian Rodriguez", "Carlos Ortega"]
10
+ spec.email = ["ian.rgz@gmail.com", "roh.race@gmail.com"]
11
+ spec.description = %q{Ruby wrapper for the Conekta API}
12
+ spec.summary = %q{Lighting fast client for the Conekta API, more info at: https://www.conekta.io/}
13
+ spec.homepage = "https://github.com/ianrgz/conekticut"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency("activesupport", ">= 3.2.0")
22
+ spec.add_dependency('rest-client', '~> 1.6.0')
23
+ spec.add_dependency('multi_json', '~> 1.8.0')
24
+
25
+ spec.add_development_dependency "bundler"
26
+ spec.add_development_dependency "rake"
27
+ spec.add_development_dependency("rspec", "~> 2.14.1")
28
+ spec.add_development_dependency('shoulda', '~> 3.5.0')
29
+ end
@@ -0,0 +1,53 @@
1
+ module Conekticut
2
+ module Client
3
+ module Configuration
4
+ extend ::ActiveSupport::Concern
5
+
6
+ included do
7
+ add_config_option :public_key
8
+ add_config_option :private_key
9
+ add_config_option :conekta_version, "'0.2.0'"
10
+ add_config_option :api_base_path, "'https://api.conekta.io'"
11
+ add_config_option :api_version
12
+ add_config_option :use_ssl
13
+ add_config_option :ssl_cert_path
14
+ end
15
+
16
+ module ClassMethods
17
+ def add_config_option(name, default_value = "nil")
18
+ class_eval <<-RUBY
19
+ def self.#{name}(value=#{default_value})
20
+ @#{name} = value if value
21
+ return @#{name} if self.object_id == #{self.object_id} || defined?(@#{name})
22
+ name = superclass.#{name}
23
+ return nil if name.nil? && !instance_variable_defined?("@#{name}")
24
+ @#{name} = name && !name.is_a?(Module) && !name.is_a?(Symbol) && !name.is_a?(Numeric) && !name.is_a?(TrueClass) && !name.is_a?(FalseClass) ? name.dup : name
25
+ end
26
+
27
+ def self.#{name}=(value)
28
+ @#{name} = value
29
+ end
30
+
31
+ def #{name}=(value)
32
+ @#{name} = value
33
+ end
34
+
35
+ def #{name}
36
+ value = @#{name} if instance_variable_defined?(:@#{name})
37
+ value = self.class.#{name} unless instance_variable_defined?(:@#{name})
38
+ if value.instance_of?(Proc)
39
+ value.arity >= 1 ? value.call(self) : value.call
40
+ else
41
+ value
42
+ end
43
+ end
44
+ RUBY
45
+ end
46
+
47
+ def configure
48
+ yield self
49
+ end
50
+ end # end ClassMethods
51
+ end # end Configuration
52
+ end # end Client
53
+ end # end Conekticut
@@ -0,0 +1,45 @@
1
+ require "base64"
2
+ require "rest_client"
3
+ require "multi_json"
4
+ require "conekticut/client/configuration"
5
+
6
+ module Conekticut
7
+ module Client
8
+ class Payment
9
+ def self.create(url = nil, payment_info = {})
10
+ unless RequestHandler.has_valid_api_key?
11
+ raise StandardError, "Please, verify your api key."
12
+ end
13
+
14
+ request_options = {
15
+ :headers => {
16
+ :user_agent => "Conekta RubyBindings/#{Base.conekta_version}",
17
+ :authorization => "Basic #{::Base64.encode64("#{Base.public_key}:")}",
18
+ :accept=>"application/vnd.conekta-v#{ Base.api_version }+json"
19
+ }, :method => :post, :open_timeout => 30,
20
+ :payload => payment_info, :url => RequestHandler.format_api_path(url),
21
+ :timeout => 80
22
+ }
23
+
24
+ if RequestHandler.require_ssl?
25
+ request_options.update(:verify_ssl => OpenSSL::SSL::VERIFY_PEER,
26
+ :ssl_ca_file => Base.ssl_cert_path)
27
+ end
28
+
29
+ unless payment_info.respond_to? :to_hash
30
+ raise StandardError, "Expected: Hash, got: #{params.class}"
31
+ end
32
+
33
+ full_request_url = RequestHandler.format_api_path(url)
34
+
35
+ begin
36
+ response = ::RestClient::Request.execute(request_options)
37
+ rescue RestClient::UnprocessableEntity => e
38
+ return { "status" => 422, "message" => e.message }
39
+ end
40
+
41
+ ::MultiJson.load response
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,28 @@
1
+ module Conekticut
2
+ module Client
3
+ class RequestHandler
4
+ def self.has_valid_api_key?
5
+ public_key = Conekticut::Client::Base.public_key
6
+ not public_key.empty? and not public_key =~ /\s/
7
+ end
8
+
9
+ def self.require_ssl?
10
+ if Conekticut::Client::Base.use_ssl == true
11
+ ssl_cert = OpenSSL::PKey::RSA.new File.read(
12
+ Conekticut::SSLCert.new(Conekticut::Client::Base.ssl_cert_path)
13
+ )
14
+ else
15
+ puts "You are not using SSL Certs. We recommend to use it to avoid risks."
16
+ end
17
+ end
18
+
19
+ def self.format_api_path(request)
20
+ if request.end_with? ".json"
21
+ "#{Base.api_base_path}/#{request}"
22
+ else
23
+ "#{Base.api_base_path}/#{request}.json"
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,12 @@
1
+ require "conekticut/client/configuration"
2
+ require "conekticut/client/request_handler"
3
+
4
+ module Conekticut
5
+ module Client
6
+ class Base
7
+ attr_reader :file
8
+
9
+ include Conekticut::Client::Configuration
10
+ end # end Base
11
+ end # end Client
12
+ end # end Conekticut
@@ -0,0 +1,14 @@
1
+ require "conekticut"
2
+ require "conekticut/client"
3
+
4
+ module Conekticut
5
+ class SSLCert
6
+ def initialize(path = nil)
7
+ @ssl_path = path || Conekticut::Client::Base.ssl_cert_path
8
+ end
9
+
10
+ def to_path
11
+ @ssl_path.to_s
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,3 @@
1
+ module Conekticut
2
+ VERSION = "0.0.2"
3
+ end
data/lib/conekticut.rb ADDED
@@ -0,0 +1,21 @@
1
+ # encoding: utf-8
2
+ require 'active_support/concern'
3
+
4
+ module Conekticut
5
+ class << self
6
+ def configure(&block)
7
+ Conekticut::Client::Base.configure(&block)
8
+ end
9
+ end
10
+
11
+ class Payment
12
+ def self.create(url = nil, payment_info = {})
13
+ Conekticut::Client::Payment.create(url, api_key, api_version, payment_info)
14
+ end
15
+ end
16
+ end
17
+
18
+ require "conekticut/version"
19
+ require "conekticut/client"
20
+ require "conekticut/sslcert"
21
+ require "conekticut/client/payment"
@@ -0,0 +1,52 @@
1
+ require "spec_helper"
2
+
3
+ describe Conekticut do
4
+ before(:each) { @client_class = Class.new(Conekticut::Client::Base) }
5
+
6
+ describe ".configure" do
7
+ it "proxies to Client configuration" do
8
+ Conekticut::Client::Base.add_config_option(:test_config)
9
+
10
+ Conekticut.configure do |c|
11
+ c.test_config = "foo"
12
+ end
13
+
14
+ Conekticut::Client::Base.test_config.should == "foo"
15
+ end
16
+ end
17
+ end
18
+
19
+ describe Conekticut::Client::Base do
20
+ before(:each) { @client_class = Class.new(Conekticut::Client::Base) }
21
+
22
+ describe ".add_config_option" do
23
+ it "creates a class level accessor" do
24
+ @client_class.add_config_option :some_class_level_accessor
25
+ @client_class.some_class_level_accessor = "bar"
26
+ @client_class.some_class_level_accessor.should == "bar"
27
+ end
28
+
29
+ context "assigning a proc to a accessor" do
30
+ before(:each) do
31
+ @client_class.add_config_option :foo_bar
32
+ @client_class.foo_bar = the_proc
33
+ end
34
+
35
+ context "when the proc does not accept args" do
36
+ let(:the_proc) { proc { "return arg" } }
37
+
38
+ it "calls the proc with no arguments" do
39
+ @client_class.new.foo_bar.should == "return arg"
40
+ end
41
+ end
42
+
43
+ context "when the proc accepts args" do
44
+ let(:the_proc) { proc {|arg| arg.should be_an_instance_of(@client_class) } }
45
+
46
+ it "calls the proc with arguments" do
47
+ @client_class.foo_bar
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,96 @@
1
+ require "spec_helper"
2
+ require "json"
3
+
4
+ describe Conekticut::Client::Payment do
5
+ before :each do
6
+ Conekticut.configure do |c|
7
+ c.public_key = "1tv5yJp3xnVZ7eK67m4h"
8
+ c.ssl_cert_path = "spec/factories/ssl_cert.crt"
9
+ @payments_status_list = ["paid", "pending_payment"]
10
+ end
11
+ end
12
+
13
+ describe ".create" do
14
+ context "when incorrect data was submited" do
15
+ it "send request to conekta servers" do
16
+ payment_info = { "card"=> {} }
17
+ response = Conekticut::Client::Payment.create("/charges", payment_info)
18
+ response["status"].should eq 422
19
+ end
20
+ end
21
+
22
+ context "when correct data was submited" do
23
+ context "with credit card payment" do
24
+ it "returns a json with status equal paid" do
25
+ payment_info = {
26
+ "currency"=>"MXN",
27
+ "amount"=> 20000,
28
+ "description"=>"Stogies",
29
+ "reference_id"=>"9839-wolf_pack",
30
+ "card"=> {
31
+ "number"=> 4111111111111111,
32
+ "name"=>"Thomas Logan",
33
+ "exp_month"=> 12,
34
+ "exp_year"=> 2015,
35
+ "cvc"=> 666,
36
+ "address"=> {
37
+ "street1"=>"250 Alexis St",
38
+ "city"=>"Red Deer",
39
+ "state"=>"Alberta",
40
+ "country"=>"Canada",
41
+ "zip"=>"T4N 0B8"
42
+ }
43
+ }
44
+ }
45
+
46
+ response = Conekticut::Client::Payment.create("/charges", payment_info)
47
+ @payments_status_list.should include(response["status"])
48
+ end
49
+ end
50
+
51
+ context "with bank payment" do
52
+ it "returns a json with status equal pending_payment" do
53
+ payment_info = {
54
+ "currency"=>"MXN",
55
+ "amount"=>20000,
56
+ "description"=>"Stogies",
57
+ "reference_id"=>"9839-wolf_pack",
58
+ "bank"=> {
59
+ "type"=>"bank"
60
+ },
61
+ "details"=> {
62
+ "name"=>"Wolverine",
63
+ "email"=>"logan@x-men.org",
64
+ "phone"=>"403-342-0642"
65
+ }
66
+ }
67
+
68
+ response = Conekticut::Client::Payment.create("/charges", payment_info)
69
+ @payments_status_list.should include(response["status"])
70
+ end
71
+ end
72
+
73
+ context "with oxxo payment" do
74
+ it "returns a json with status equal pending_payment" do
75
+ payment_info = {
76
+ "currency"=>"MXN",
77
+ "amount"=>20000,
78
+ "description"=>"Stogies",
79
+ "reference_id"=>"9839-wolf_pack",
80
+ "bank"=> {
81
+ "type"=>"oxxo"
82
+ },
83
+ "details"=> {
84
+ "name"=>"Wolverine",
85
+ "email"=>"logan@x-men.org",
86
+ "phone"=>"403-342-0642"
87
+ }
88
+ }
89
+
90
+ response = Conekticut::Client::Payment.create("/charges", payment_info)
91
+ @payments_status_list.should include(response["status"])
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,76 @@
1
+ require "spec_helper"
2
+
3
+ describe Conekticut::Client::RequestHandler do
4
+ describe ".has_valid_api_key?" do
5
+ context "with valid api_key" do
6
+ it "returns true when it was initialized" do
7
+ Conekticut::Client::Base.public_key = "initialized"
8
+ Conekticut::Client::RequestHandler.has_valid_api_key?.should eq true
9
+ end
10
+ end
11
+
12
+ context "with invalid api_key" do
13
+ it "returns false when it has not spaces" do
14
+ Conekticut::Client::Base.public_key = "initial ized"
15
+ Conekticut::Client::RequestHandler.has_valid_api_key?.should eq false
16
+ end
17
+
18
+ it "returns false when it was not initialized" do
19
+ Conekticut::Client::Base.public_key = ""
20
+ Conekticut::Client::RequestHandler.has_valid_api_key?.should eq false
21
+ end
22
+ end
23
+ end
24
+
25
+ describe ".require_ssl?" do
26
+ context "when SSL Cert is used and it is available" do
27
+ before :each do
28
+ Conekticut::Client::Base.use_ssl = true
29
+ Conekticut::Client::Base.ssl_cert_path = "spec/factories/ssl_cert.crt"
30
+ end
31
+
32
+ it "returns load the cert" do
33
+ Conekticut::Client::RequestHandler.require_ssl?.should_not be_nil
34
+ end
35
+ end
36
+
37
+ context "when ssl_cert is not being used" do
38
+ before :each do
39
+ Conekticut::Client::Base.use_ssl = false
40
+ Conekticut::Client::Base.ssl_cert_path = "spec/factories/ssl_cert.crt"
41
+ end
42
+
43
+ it "returns nil" do
44
+ Conekticut::Client::RequestHandler.require_ssl?.should eq nil
45
+ end
46
+ end
47
+ end
48
+
49
+ describe ".format_api_path" do
50
+ before :each do
51
+ Conekticut::Client::Base.api_base_path = "https://api.conekta.io"
52
+ end
53
+
54
+ context "when .json request was not specified" do
55
+ before :each do
56
+ @full_request_url = Conekticut::Client::RequestHandler.format_api_path("my_request")
57
+ @expected_request_url = "https://api.conekta.io/my_request.json"
58
+ end
59
+
60
+ it "returns the full request's url" do
61
+ @full_request_url.should eq @expected_request_url
62
+ end
63
+
64
+ it "automatically adds .json extension" do
65
+ @expected_request_url.should end_with ".json"
66
+ end
67
+ end
68
+
69
+ context "when .json request was specified" do
70
+ it "returns the full request's url" do
71
+ request_url = Conekticut::Client::RequestHandler.format_api_path("my_request.json")
72
+ request_url.should eq "https://api.conekta.io/my_request.json"
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,4 @@
1
+ require "spec_helper"
2
+
3
+ describe Conekticut::Client::Base do
4
+ end
@@ -0,0 +1,25 @@
1
+ require "spec_helper"
2
+
3
+ describe Conekticut::SSLCert do
4
+ describe "instance methods" do
5
+ describe "#to_path" do
6
+ context "when path was not specified" do
7
+ before :each do
8
+ Conekticut::Client::Base.ssl_cert_path = "my_ssl_cert_path"
9
+ end
10
+
11
+ it " returns Base.ssl_cert_path" do
12
+ ssl_cert_path = Conekticut::Client::Base.ssl_cert_path = "my_ssl_cert_path"
13
+ Conekticut::SSLCert.new.to_path.should eq ssl_cert_path
14
+ end
15
+ end
16
+
17
+ context "when path was specified" do
18
+ it "should load the expected cert" do
19
+ ssl_cert_path = Conekticut::Client::Base.ssl_cert_path = "my_ssl_cert_path"
20
+ Conekticut::SSLCert.new("expected_cert").to_path.should eq "expected_cert"
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,27 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIIEpAIBAAKCAQEAwiDhkmqNLH8Q5QOGNtAyTRN3NFT3UKqhOPdfxfhuZAR+6by+
3
+ 9sqlDE543DLvX8k/VSvLpZmH8SNFhdQC2Npz5a8wslUVVytNeYy/LLzzpN6Gq4MR
4
+ S3+i7zpumiEr/gUSbgTnXeEEWvhxlxP3+M7YVoipix9Q9qX1Ssf0KNh9MzYq73nb
5
+ +a51ONZJxCVpGHGGB7Oo24okQ6lpZPUtSXWltqkRlYyb0JjYIR8IRfzExyE5eJFf
6
+ zhal8rh/oKEzajd9jD7iFuvJ9eVVfkbjtKAHL2N1V2J4K2ey77xQ92478ii56VEV
7
+ LAszuEW/ui9MVS7LYf4NGoZrHguWDZK+5mPOoQIDAQABAoIBAQCslb71BHVt0amb
8
+ cH6pzH5rt5qKk98rgAbFNmeXAT5i/Pw3oO3FSnNhdYJNgZr+dVQwzDbIiq4o20q7
9
+ p7jAQbY3xIBuiuXmEUFXhqGPjIyvToY7hNKjZF3egPxDWqpZsvinhwSKmbndhnK1
10
+ 9bLHKF180RKp9LVuEiz4xrtydMUZ+MmajoXYI+g1WkGwsK2ZTkmGsdEul4ZAW4aq
11
+ qX6Q3JJ0OiHbwu/FmzccKCnb/2CnMcBgnEPJQPUQLbQOa7ZUpsIGRvFe/Du+2iqq
12
+ nJ4/XzWJiOTzBJSeUckJfO5u1YGHzGZqD23vfs93dmnqZ2QgqbUGouKgH5h51xYM
13
+ khKzOkCBAoGBAOdkclljJYp+A6AlkbQjw3fXLkWlVGtblLZvYCS08xEuV5gPFn/b
14
+ LbeMR5OYRqHF/arRB42BSp/sCzax/wRWTS2YgxR8L8nJW0rv+m54dIWlsXfzkMDi
15
+ FKeuTSnqfV3eu875O6hafC7IHfzXE2bw5Pd2SfQLsTpGpvrtm6Vj42PtAoGBANbF
16
+ 8NYcczFFX++gQPhvjGdzFMQwlStbS7+xEsvLeLA6OquorT6dUY1f34yQAQWOAsyL
17
+ ONDVps6EyMD81dWDWsybtn86btVq57XSkFRaGBTZh1LtvhGKLw2Gp3a4SBLrL/mR
18
+ L+2vOye1mqlmSModZk9MBA8z3xm9xTMZUj9p6OcFAoGBAOH7uqXL680O9vF/34Xj
19
+ 67HtyHYiWoki/uERcv9GbaEY9lk+WwXxg/ufmAPwkwLJf81EqjCr1brL58O6IMoW
20
+ kvd13Ia0JmPXMD7GknkzUPF5ehIhIP0Pj4aX9yp5pYh40Ej6JiZsgJ2buZXGY1+E
21
+ 4sk/kEg05xh4CfpE9l6XaGudAoGAThIwBLTczslIIWQgme56nFRB9Tsvzk3mkCz/
22
+ ByPUoELadvHe4Abx0TFLot3p8Sn5LH9jTM6NTz8Hdtexp2aTSBNGWKNWDLBKwFZl
23
+ brQ9Ur7sKSIQ2HFhv0n2b/p3AKGLk+3J/V2YZEvoh7GNviLHwQWB6EDT1ZidKYEH
24
+ 29NU/T0CgYB9nP08v/rfVT674ZYxYrQ9didRB5mOTpO5qojjyzc5/SQV3wEEFs8a
25
+ DLLsz7ua53djKvQUkpy5tj24wVesnQ+wigaglw8KosCZ5R0gGJBVaaPtZlRDkF7r
26
+ e1NGQ2y80f1A2xxYQRQlrpRncQ5n7+NeIC/RUKUYBX4pfi6mQLychQ==
27
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,21 @@
1
+ # This file was generated by the `rspec --init` command. Conventionally, all
2
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
+ # Require this file using `require "spec_helper"` to ensure that it is only
4
+ # loaded once.
5
+ require "conekticut"
6
+
7
+ # Load files from support directory
8
+ Dir["./spec/support/**/*.rb"].sort.each {|f| require f}
9
+
10
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
11
+ RSpec.configure do |config|
12
+ config.treat_symbols_as_metadata_keys_with_true_values = true
13
+ config.run_all_when_everything_filtered = true
14
+ config.filter_run :focus
15
+
16
+ # Run specs in random order to surface order dependencies. If you find an
17
+ # order dependency and want to debug it, you can fix the order by providing
18
+ # the seed, which is printed after each run.
19
+ # --seed 1234
20
+ config.order = 'random'
21
+ end
metadata ADDED
@@ -0,0 +1,172 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: conekticut
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Ian Rodriguez
8
+ - Carlos Ortega
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-11-20 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: activesupport
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - '>='
19
+ - !ruby/object:Gem::Version
20
+ version: 3.2.0
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - '>='
26
+ - !ruby/object:Gem::Version
27
+ version: 3.2.0
28
+ - !ruby/object:Gem::Dependency
29
+ name: rest-client
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ~>
33
+ - !ruby/object:Gem::Version
34
+ version: 1.6.0
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ~>
40
+ - !ruby/object:Gem::Version
41
+ version: 1.6.0
42
+ - !ruby/object:Gem::Dependency
43
+ name: multi_json
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ~>
47
+ - !ruby/object:Gem::Version
48
+ version: 1.8.0
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ~>
54
+ - !ruby/object:Gem::Version
55
+ version: 1.8.0
56
+ - !ruby/object:Gem::Dependency
57
+ name: bundler
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: rake
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - '>='
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: rspec
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ~>
89
+ - !ruby/object:Gem::Version
90
+ version: 2.14.1
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ~>
96
+ - !ruby/object:Gem::Version
97
+ version: 2.14.1
98
+ - !ruby/object:Gem::Dependency
99
+ name: shoulda
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ~>
103
+ - !ruby/object:Gem::Version
104
+ version: 3.5.0
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ~>
110
+ - !ruby/object:Gem::Version
111
+ version: 3.5.0
112
+ description: Ruby wrapper for the Conekta API
113
+ email:
114
+ - ian.rgz@gmail.com
115
+ - roh.race@gmail.com
116
+ executables: []
117
+ extensions: []
118
+ extra_rdoc_files: []
119
+ files:
120
+ - .gitignore
121
+ - .rspec
122
+ - Gemfile
123
+ - LICENSE.txt
124
+ - README.md
125
+ - Rakefile
126
+ - conekticut.gemspec
127
+ - lib/conekticut.rb
128
+ - lib/conekticut/client.rb
129
+ - lib/conekticut/client/configuration.rb
130
+ - lib/conekticut/client/payment.rb
131
+ - lib/conekticut/client/request_handler.rb
132
+ - lib/conekticut/sslcert.rb
133
+ - lib/conekticut/version.rb
134
+ - spec/client/configuration_spec.rb
135
+ - spec/client/payment_spec.rb
136
+ - spec/client/request_handler_spec.rb
137
+ - spec/client/request_spec.rb
138
+ - spec/client/sslcert_spec.rb
139
+ - spec/factories/ssl_cert.crt
140
+ - spec/spec_helper.rb
141
+ homepage: https://github.com/ianrgz/conekticut
142
+ licenses:
143
+ - MIT
144
+ metadata: {}
145
+ post_install_message:
146
+ rdoc_options: []
147
+ require_paths:
148
+ - lib
149
+ required_ruby_version: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - '>='
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ required_rubygems_version: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - '>='
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ requirements: []
160
+ rubyforge_project:
161
+ rubygems_version: 2.1.11
162
+ signing_key:
163
+ specification_version: 4
164
+ summary: 'Lighting fast client for the Conekta API, more info at: https://www.conekta.io/'
165
+ test_files:
166
+ - spec/client/configuration_spec.rb
167
+ - spec/client/payment_spec.rb
168
+ - spec/client/request_handler_spec.rb
169
+ - spec/client/request_spec.rb
170
+ - spec/client/sslcert_spec.rb
171
+ - spec/factories/ssl_cert.crt
172
+ - spec/spec_helper.rb