aceitafacil 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,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MjM0NWYwMWFjZmZmMDZhOGVhNWExNzM1NjA2M2UxZTI2YWZkYjMxOQ==
5
+ data.tar.gz: !binary |-
6
+ OWYwYmU5NWM2MDRjNDczZWQ3NDBjMGZlZmQzYTdhMTUxOWJhNDE2YQ==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ YjYyNjVmMWQ0OWZmODA1ZjU3ZGZlYTU1ZmMxOTA0OTdmZWYwODkyNTU3Y2Q0
10
+ YmZmY2FiZTMwOWM3ZmUyZTgxNjM0NzE2Zjc2YzQwMDFhMjRhYjdjOTFkZGJh
11
+ OGQ5OTZkZDczZjlmNTFmMWFjNGIyOTRmNWQ5OTNkYTQ1Njc2ODY=
12
+ data.tar.gz: !binary |-
13
+ MGUwMGEzM2M4Zjg4MDY3YjJmMWUxYTVkYjFlNjNmZWRjZTFhNWQ3ZjAyYmNk
14
+ NGFiZDNmYzUyNWY1YTEzMThiMGIxZmQxNDc5ZWU2Nzg3ODU2NGI4NzlkMTI5
15
+ NTc2MTRlZDVkMWYyZWQzZmMzYWE3OTI2NDMxNjI0ZjA1ZDUzOGI=
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in aceitafacil.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2014 Wilbert Ribeiro
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,85 @@
1
+ # Aceita Fácil
2
+
3
+ Esta gem habilita as funcionalidades da API do serviço [Aceita Fácil][url] no Ruby on Rails.
4
+
5
+ ## Installation
6
+
7
+ Adicione esta linha ao seu Gemfile:
8
+
9
+ gem 'aceitafacil'
10
+
11
+ E execute:
12
+
13
+ $ bundle
14
+
15
+ Ou instale assim:
16
+
17
+ $ gem install aceitafacil
18
+
19
+ ## Usage
20
+
21
+ Cadastre os vendedores que receberão os pagamentos da loja em questão da seguinte forma:
22
+
23
+ @vendor = Aceitafacil::Vendor.new(id: "2", name: "Vendor name", email: "vendor@vendor.com",
24
+ bank: {
25
+ code: "001",
26
+ agency: "123-4",
27
+ account_type: 1, # 1 Corrent, 2 Poupança
28
+ account_number: "1234-5",
29
+ account_holder_name: "Fulano",
30
+ account_holder_document_type: 1, # 1 CPF, 2 CNPJ
31
+ account_holder_document_number: "12345678909"
32
+ })
33
+
34
+ @vendor.save
35
+
36
+ O id: refere-se ao ID do vendedor na base de dados da aplicação Host.
37
+
38
+ Implemente um formulário para capturar os dados do cartão de crédito. Segue um exemplo:
39
+
40
+ @card = Aceitafacil::Card.new(name: "Card Holder", number: "4012001038443335", cvv: "123", exp_date: "201807", customer_id: "1")
41
+ @card.save
42
+
43
+ O customer_id reference ao ID do cliente no banco de dados da aplicação Host.
44
+
45
+ O método __save__ sincroniza as informações enviadas com o servidor do [Aceita Fácil][url].
46
+
47
+ Com os dados do cartão de crédito enviados e os vendedores cadastrados você já pode efetuar um pagamento, segue um exemplo:
48
+
49
+ Recupere a instância de um vendedor na API, Ex:
50
+
51
+ @vendor = Aceitafacil::Vendor.find(2)
52
+
53
+ Instancie os items que estão sendo vendidos da seguinte forma:
54
+
55
+ @item = Aceitafacil::Item.new(amount: 10.0, vendor_id: @vendor.id, vendor_name: @vendor.name, fee_split: 1, description: "Test item", trigger_lock: false)
56
+
57
+ Recupere as informações do TOKEN do cartão de crédito, Ex:
58
+
59
+ @card = Aceitafacil::Card.find_by_customer_id(1)[0]
60
+
61
+ Faça uma requisição para efetuar o pagamento:
62
+
63
+ @payment = Payment.new(description: "Test payment", customer_id: 1, customer_name: "Fulano de Tal", customer_email: "fulano@fulanodetal.com.br", customer_email_language: "pt-BR", paymentmethod_id: 1, total_amount: 10, items: [@item], card: @card)
64
+
65
+ @payment.save
66
+
67
+ Após a chamada do método save todos os métodos abaixo deverão estar preenchidos:
68
+
69
+ @payment.id
70
+ @payment.organization_id
71
+ @payment.organization_name
72
+ @payment.paymentmethod
73
+ @payment.chargetype
74
+ @payment.payer
75
+ @payment.paid
76
+
77
+ ## Contributing
78
+
79
+ 1. Fork it ( http://github.com/wilbert/aceitafacil/fork )
80
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
81
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
82
+ 4. Push to the branch (`git push origin my-new-feature`)
83
+ 5. Create new Pull Request
84
+
85
+ [url]: http://www.aceitafacil.com "Aceita Fácil"
data/Rakefile ADDED
@@ -0,0 +1,16 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ require 'rake'
4
+ require "rspec/core/rake_task"
5
+
6
+ RSpec::Core::RakeTask.new
7
+
8
+ require 'rdoc/task'
9
+ Rake::RDocTask.new do |rdoc|
10
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
11
+
12
+ rdoc.rdoc_dir = 'rdoc'
13
+ rdoc.title = "Aceitafacil #{version}"
14
+ rdoc.rdoc_files.include('README*')
15
+ rdoc.rdoc_files.include('lib/**/*.rb')
16
+ end
@@ -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 'aceitafacil/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "aceitafacil"
8
+ spec.version = Aceitafacil::VERSION
9
+ spec.authors = ["Wilbert Ribeiro"]
10
+ spec.email = ["wkelyson@gmail.com"]
11
+ spec.summary = %q{ This gem enables Aceita Fácil API features on Ruby on Rails }
12
+ spec.description = %q{ It implements Cards and Payments from Aceita Fácil doc spec. }
13
+ spec.homepage = "http://www.github.com/wilbert/aceitafacil"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
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 "json", "1.8.1"
22
+
23
+ spec.add_development_dependency "bundler", "~> 1.5"
24
+ spec.add_development_dependency "rake", "10.3.1"
25
+ spec.add_development_dependency "rspec-rails", "2.14.2"
26
+ spec.add_development_dependency "fakeweb", "1.3.0"
27
+ spec.add_development_dependency "factory_girl_rails", "4.4.0"
28
+ spec.add_development_dependency "debugger", "1.6.6"
29
+ end
@@ -0,0 +1,36 @@
1
+ require 'active_support'
2
+ require "builder"
3
+ require "net/http"
4
+ require "net/https"
5
+ require "json"
6
+
7
+ module Aceitafacil
8
+ class Production
9
+ BASE_URL = "api.aceitafacil.com"
10
+ end
11
+
12
+ class Test
13
+ BASE_URL = "sandbox.api.aceitafacil.com"
14
+ # BASE_URL = "127.0.0.1:3000"
15
+ end
16
+
17
+ @@environment = :test
18
+ mattr_accessor :environment
19
+ @@api_key = "e3c23d27ca61ac2cc3b8a1e4ed5340247221757d"
20
+ mattr_accessor :api_key
21
+ @@api_password = "773aebdf0d1202cac6837751f354c0a70553b3cd"
22
+ mattr_accessor :api_password
23
+
24
+ def self.setup
25
+ yield self
26
+ end
27
+
28
+ def self.site
29
+ environment = eval(Aceitafacil.environment.to_s.capitalize)
30
+ return "https://#{environment::BASE_URL}"
31
+ end
32
+
33
+ class MissingArgumentError < StandardError; end
34
+ end
35
+
36
+ [:version, :card, :connection, :vendor, :bank, :payment, :item, :utils].each { |lib| require "aceitafacil/#{lib}" }
@@ -0,0 +1,18 @@
1
+ #encoding: utf-8
2
+
3
+ module Aceitafacil
4
+ class Bank
5
+ attr_accessor :code, :agency, :account_type, :account_number, :account_holder_name
6
+ attr_accessor :account_holder_document_type, :account_holder_document_number
7
+
8
+ def initialize(params = {})
9
+ self.code = params[:code]
10
+ self.agency = params[:agency]
11
+ self.account_type = params[:account_type]
12
+ self.account_number = params[:account_number]
13
+ self.account_holder_name = params[:account_holder_name]
14
+ self.account_holder_document_type = params[:account_holder_document_type]
15
+ self.account_holder_document_number = params[:account_holder_document_number]
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,86 @@
1
+ #encoding: utf-8
2
+
3
+ module Aceitafacil
4
+ class Card
5
+ attr_accessor :customer_id, :number, :name, :cvv, :exp_date
6
+ attr_accessor :token, :card_brand, :last_digits, :status
7
+
8
+ def self.find_by_customer_id(customer_id)
9
+ return nil if customer_id.nil?
10
+
11
+ @connection = Aceitafacil::Connection.new
12
+
13
+ cards = []
14
+
15
+ connection_params = {}
16
+ connection_params["customer[id]"] = customer_id
17
+ response = @connection.get("card", connection_params)
18
+
19
+ json = JSON.parse(response.body)
20
+
21
+ json["card"].each do |remote_card|
22
+ card = Card.new(token: remote_card["token"], card_brand: remote_card["card_brand"], last_digits: remote_card["last_digits"])
23
+ cards << card
24
+ end
25
+
26
+ return cards
27
+ end
28
+
29
+ def self.remove(card)
30
+ return nil if card.nil?
31
+
32
+ delete_params = {}
33
+
34
+ delete_params["customer[id]"] = card.customer_id
35
+ delete_params["card[token]"] = card.token
36
+
37
+ @connection = Aceitafacil::Connection.new
38
+
39
+ response = @connection.delete("card", delete_params)
40
+
41
+ json = JSON.parse(response.body)
42
+
43
+ card = Card.new(token: json["card"][0]["token"], status: json["card"][0]["status"])
44
+
45
+ return card
46
+ end
47
+
48
+ def initialize(params = {})
49
+ @connection = Aceitafacil::Connection.new
50
+
51
+ self.customer_id = params[:customer_id]
52
+ self.number = params[:number]
53
+ self.name = params[:name]
54
+ self.cvv = params[:cvv]
55
+ self.exp_date = params[:exp_date]
56
+ self.status = params[:status]
57
+ self.token = params[:token]
58
+ self.last_digits = params[:last_digits]
59
+ self.card_brand = params[:card_brand]
60
+ end
61
+
62
+ def params
63
+ params = {}
64
+
65
+ params["customer[id]"] = self.customer_id
66
+ params["card[name]"] = self.name
67
+ params["card[number]"] = self.number
68
+ params["card[cvv]"] = self.cvv
69
+ params["card[exp_date]"] = self.exp_date
70
+
71
+ return params
72
+ end
73
+
74
+ def save
75
+ response = @connection.post("card", params)
76
+
77
+ json = JSON.parse(response.body)
78
+
79
+ self.token = json["card"][0]["token"]
80
+ self.card_brand = json["card"][0]["card_brand"]
81
+ self.last_digits = json["card"][0]["last_digits"]
82
+
83
+ return response
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,58 @@
1
+ #encoding: utf-8
2
+
3
+ module Aceitafacil
4
+ class Connection
5
+ attr_reader :environment
6
+
7
+ def initialize
8
+ @environment = eval(Aceitafacil.environment.to_s.capitalize)
9
+ port = 443
10
+ @http = Net::HTTP.new(@environment::BASE_URL,port)
11
+
12
+ @http.ssl_version = :SSLv3 if @http.respond_to? :ssl_version
13
+ @http.use_ssl = true
14
+ @http.open_timeout = 10*1000
15
+ @http.read_timeout = 40*1000
16
+ end
17
+
18
+ def post(path, params={})
19
+ request = Net::HTTP::Post.new("/#{path}")
20
+ request.basic_auth(Aceitafacil.api_key, Aceitafacil.api_password)
21
+ request.set_form_data(params)
22
+ response = @http.request(request)
23
+ return response
24
+ end
25
+
26
+ def put(path, params={})
27
+ request = Net::HTTP::Put.new("/#{path}")
28
+ request.basic_auth(Aceitafacil.api_key, Aceitafacil.api_password)
29
+ request.set_form_data(params)
30
+ response = @http.request(request)
31
+ return response
32
+ end
33
+
34
+ def delete(path, params = {})
35
+ if not params.nil?
36
+ request = Net::HTTP::Delete.new("/#{path}?".concat(params.collect { |k,v| "#{k}=#{CGI::escape(v.to_s)}" }.join('&')))
37
+ else
38
+ request = Net::HTTP::Delete.new("/#{path}")
39
+ end
40
+ request.basic_auth(Aceitafacil.api_key, Aceitafacil.api_password)
41
+ response = @http.request(request)
42
+ return response
43
+ end
44
+
45
+
46
+
47
+ def get(path, params={})
48
+ if not params.nil?
49
+ request = Net::HTTP::Get.new("/#{path}?".concat(params.collect { |k,v| "#{k}=#{CGI::escape(v.to_s)}" }.join('&')))
50
+ else
51
+ request = Net::HTTP::Get.new("/#{path}")
52
+ end
53
+ request.basic_auth(Aceitafacil.api_key, Aceitafacil.api_password)
54
+ response = @http.request(request)
55
+ return response
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,16 @@
1
+ #encoding: utf-8
2
+
3
+ module Aceitafacil
4
+ class Item
5
+ attr_accessor :amount, :vendor_id, :vendor_name, :fee_split, :description, :trigger_lock
6
+
7
+ def initialize(params = {})
8
+ self.amount = params[:amount]
9
+ self.vendor_id = params[:vendor_id]
10
+ self.vendor_name = params[:vendor_name]
11
+ self.fee_split = params[:fee_split]
12
+ self.description = params[:description]
13
+ self.trigger_lock = params[:trigger_lock]
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,70 @@
1
+ #encoding: utf-8
2
+
3
+ module Aceitafacil
4
+ class Payment
5
+ attr_accessor :card, :customer_id, :customer_name, :customer_email, :customer_email_language
6
+ attr_accessor :organization_id, :organization_name, :paymentmethod, :charge_type, :payer, :total_amount
7
+ attr_accessor :paid, :closed, :attempted, :attempted_count, :next_payment_attempt, :period_start
8
+ attr_accessor :period_end, :items, :id, :description, :paymentmethod_id, :chargetype
9
+
10
+ def initialize(params = {})
11
+ @connection = Aceitafacil::Connection.new
12
+
13
+ self.card = params[:card]
14
+ self.customer_id = params[:customer_id]
15
+ self.customer_name = params[:customer_name]
16
+ self.customer_email = params[:customer_email]
17
+ self.customer_email_language = params[:customer_email_language]
18
+ self.description = params[:description]
19
+ self.paymentmethod_id = params[:paymentmethod_id]
20
+ self.total_amount = params[:total_amount]
21
+ self.items = params[:items]
22
+ end
23
+
24
+ def params
25
+ params = {}
26
+
27
+ params["card[token]"] = self.card.token
28
+ params["customer[id]"] = self.customer_id.to_i
29
+ params["customer[name]"] = self.customer_name
30
+ params["customer[email]"] = self.customer_email
31
+ params["customer[email_language]"] = self.customer_email_language
32
+ params["description"] = self.description
33
+ params["paymentmethod[id]"] = self.paymentmethod_id
34
+ params["total_amount"] = Aceitafacil::Utils.format_number(self.total_amount)
35
+
36
+ self.items.each_with_index do |item, index|
37
+ params["item[#{index}][amount]"] = Aceitafacil::Utils.format_number(item.amount)
38
+ params["item[#{index}][vendor_id]"] = item.vendor_id
39
+ params["item[#{index}][vendor_name]"] = item.vendor_name
40
+ params["item[#{index}][fee_split]"] = item.fee_split
41
+ params["item[#{index}][description]"] = item.description
42
+ params["item[#{index}][trigger_lock]"] = item.trigger_lock
43
+ end
44
+
45
+ return params
46
+ end
47
+
48
+ def save
49
+ response = @connection.post("payment", params)
50
+
51
+ json = JSON.parse(response.body)
52
+
53
+ self.id = json["id"]
54
+ self.organization_id = json["organization_id"]
55
+ self.organization_name = json["organization_name"]
56
+ self.paymentmethod = json["paymentmethod"]
57
+ self.chargetype = json["chargetype"]
58
+ self.payer = json["payer"]
59
+ self.paid = json["paid"]
60
+ self.closed = json["closed"]
61
+ self.attempted = json["attempted"]
62
+ self.attempted_count = json["attempted_count"]
63
+ self.next_payment_attempt = json["next_payment_attempt"]
64
+ self.period_start = json["period_start"]
65
+ self.period_end = json["period_end"]
66
+
67
+ return response
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,7 @@
1
+ module Aceitafacil
2
+ class Utils
3
+ def self.format_number(number)
4
+ return sprintf("%0.02f", number.to_f).gsub(".", "").to_i
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,78 @@
1
+ #encoding: utf-8
2
+
3
+ module Aceitafacil
4
+ class Vendor
5
+ attr_accessor :id, :name, :email, :bank
6
+
7
+ def initialize(params = {})
8
+ @connection = Aceitafacil::Connection.new
9
+
10
+ self.id = params[:id]
11
+ self.name = params[:name]
12
+ self.email = params[:email]
13
+ self.bank = Bank.new(params[:bank]) if params[:bank]
14
+ end
15
+
16
+ def params
17
+ params = {}
18
+
19
+ params["vendor[id]"] = self.id
20
+ params["vendor[name]"] = self.name
21
+ params["vendor[email]"] = self.email
22
+ params["vendor[bank][code]"] = self.bank.code
23
+ params["vendor[bank][agency]"] = self.bank.agency
24
+ params["vendor[bank][account_type]"] = self.bank.account_type
25
+ params["vendor[bank][account_number]"] = self.bank.account_number
26
+ params["vendor[bank][account_holder_name]"] = self.bank.account_holder_name
27
+ params["vendor[bank][account_holder_document_type]"] = self.bank.account_holder_document_type
28
+ params["vendor[bank][account_holder_document_number]"] = self.bank.account_holder_document_number
29
+
30
+ return params
31
+ end
32
+
33
+ def self.find(vendor_id)
34
+ return nil if vendor_id.nil?
35
+
36
+ @connection = Aceitafacil::Connection.new
37
+
38
+ find_params = {}
39
+
40
+ find_params["vendor[id]"] = vendor_id
41
+
42
+ response = @connection.get("vendor", find_params)
43
+
44
+ json = JSON.parse(response.body)
45
+
46
+ bank = {
47
+ code: json["vendor"]["bank"][0]["code"],
48
+ agency: json["vendor"]["bank"][0]["agency"],
49
+ account_type: json["vendor"]["bank"][0]["account_type"],
50
+ account_number: json["vendor"]["bank"][0]["account_number"],
51
+ account_holder_name: json["vendor"]["bank"][0]["account_holder_name"],
52
+ account_holder_document_type: json["vendor"]["bank"][0]["account_holder_document_type"],
53
+ account_holder_document_number: json["vendor"]["bank"][0]["account_holder_document_number"]
54
+ }
55
+
56
+ vendor = Aceitafacil::Vendor.new(
57
+ id: json["vendor"]["id"],
58
+ name: json["vendor"]["name"],
59
+ email: json["vendor"]["email"],
60
+ bank: bank
61
+ )
62
+
63
+ return vendor
64
+ end
65
+
66
+ def update
67
+ response = @connection.put("vendor", params)
68
+
69
+ return response
70
+ end
71
+
72
+ def save
73
+ response = @connection.post("vendor", params)
74
+
75
+ return response
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,3 @@
1
+ module Aceitafacil
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,12 @@
1
+ module Aceitafacil
2
+ module Generators
3
+ class InstallGenerator < Rails::Generators::Base
4
+ source_root File.expand_path("../../templates", __FILE__)
5
+
6
+ desc "Cria o initializer do Aceita Fácil na app rails"
7
+ def copy_initializer
8
+ template "aceitafacil.rb", "config/initializers/aceitafacil.rb"
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ # encoding: utf-8
2
+
3
+ # Use esse arquivo para configurar a integração com o Aceita Fácil.
4
+ Aceitafacil.setup do |config|
5
+ # Altere para production ao final dos seus testes
6
+ config.environment = :test
7
+
8
+ # Chave pública
9
+ config.api_key = ""
10
+
11
+ # Chave privada
12
+ config.api_password = ""
13
+ end
@@ -0,0 +1,56 @@
1
+ require 'spec_helper'
2
+
3
+ describe Aceitafacil::Card do
4
+ let(:card_params) { { name: "Card Holder", number: "4012001038443335", cvv: "123", exp_date: "201807", customer_id: "1" } }
5
+
6
+ before do
7
+ @card = Aceitafacil::Card.new(card_params)
8
+ end
9
+
10
+ describe "make a remove call" do
11
+ it "should return nil if card is nil" do
12
+ remote_card = Aceitafacil::Card.remove(nil)
13
+ remote_card.should be_nil
14
+ end
15
+
16
+ it "should remote a remote card" do
17
+ @card.save
18
+
19
+ token = @card.token
20
+
21
+ remote_card = Aceitafacil::Card.remove(@card)
22
+ remote_card.token.should eq(token)
23
+ remote_card.status.should eq("removed")
24
+ end
25
+ end
26
+
27
+ describe "fetching existent cards" do
28
+ it "should be nil if customer_id is not passed" do
29
+ @card.save
30
+ @cards = Aceitafacil::Card.find_by_customer_id(nil)
31
+ @cards.should be_nil
32
+ end
33
+
34
+ it "should return a list cards" do
35
+ @card.save
36
+ @cards = Aceitafacil::Card.find_by_customer_id("1")
37
+ @cards.count.should == 1
38
+ end
39
+ end
40
+
41
+ describe "making a save call" do
42
+ it "should return an http success" do
43
+ response = @card.save
44
+
45
+ response.should be_kind_of Net::HTTPSuccess
46
+ end
47
+
48
+ it "should create a new remote card" do
49
+ @card.save
50
+
51
+ @card.token.should_not be_nil
52
+ @card.card_brand.should_not be_nil
53
+ @card.last_digits.should_not be_nil
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ describe Aceitafacil::Connection do
4
+ before do
5
+ # FakeWeb.allow_net_connect = true
6
+ @connection = Aceitafacil::Connection.new
7
+ end
8
+
9
+ after do
10
+ # FakeWeb.allow_net_connect = false
11
+ end
12
+
13
+ it "should estabilish connection when was created" do
14
+ @connection.environment.should_not be_nil
15
+ end
16
+
17
+ describe "making a request" do
18
+ it "should make a request" do
19
+ @card = Aceitafacil::Card.new(name: "Card Holder", number: "4012001038443335", cvv: "123", exp_date: "201807", customer_id: "1")
20
+ response = @connection.post(:card, @card.params)
21
+ response.body.should_not be_nil
22
+ response.should be_kind_of Net::HTTPOK
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,59 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Aceitafacil::Payment do
6
+
7
+ before :each do
8
+ @vendor = Aceitafacil::Vendor.find(2)
9
+ @card = Aceitafacil::Card.find_by_customer_id(1)[0]
10
+ @item = Aceitafacil::Item.new(item_params)
11
+ @payment = Aceitafacil::Payment.new(payment_params)
12
+ end
13
+
14
+ context 'payments crud' do
15
+ describe "request to create an payment" do
16
+ let(:payment_params) {
17
+ {
18
+ description: "Test payment",
19
+ customer_id: 1,
20
+ customer_name: "Fulano de Tal",
21
+ customer_email: "fulano@fulanodetal.com.br",
22
+ customer_email_language: "pt-BR",
23
+ paymentmethod_id: 1, # 1 Credit Card, 2 billet
24
+ total_amount: 10,
25
+ items: [@item],
26
+ card: @card
27
+ }
28
+ }
29
+
30
+ let(:item_params) {
31
+ {
32
+ amount: 10.0,
33
+ vendor_id: @vendor.id,
34
+ vendor_name: @vendor.name,
35
+ fee_split: 1,
36
+ description: "Test item",
37
+ trigger_lock: false
38
+ }
39
+ }
40
+
41
+ it "should return a successfully response" do
42
+ response = @payment.save
43
+ response.should be_kind_of Net::HTTPSuccess
44
+ end
45
+
46
+ it "should return a correct params" do
47
+ response = @payment.save
48
+
49
+ @payment.id.should_not be_nil
50
+ @payment.organization_id.should_not be_nil
51
+ @payment.organization_name.should_not be_nil
52
+ @payment.paymentmethod.should eq("CREDITCARD")
53
+ @payment.chargetype = "AVISTA"
54
+ @payment.payer = "CUSTOMER"
55
+ @payment.paid = true
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,11 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Aceitafacil::Utils do
6
+ describe "testing a utils specs" do
7
+ it "should return correct formated number" do
8
+ Aceitafacil::Utils.format_number(10.5).should eq(1050)
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,60 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Aceitafacil::Vendor do
6
+ let(:vendor_params) {
7
+ {
8
+ id: "2", name: "Vendor name", email: "vendor@vendor.com",
9
+ bank: {
10
+ code: "001",
11
+ agency: "123-4",
12
+ account_type: 1, # 1 Corrent, 2 Poupança
13
+ account_number: "1234-5",
14
+ account_holder_name: "Fulano",
15
+ account_holder_document_type: 1, # 1 CPF, 2 CNPJ
16
+ account_holder_document_number: "12345678909"
17
+ }
18
+ }
19
+ }
20
+
21
+ before do
22
+ @vendor = Aceitafacil::Vendor.new(vendor_params)
23
+ end
24
+
25
+ describe "fetching existent vendors" do
26
+ it "should be nil if customer_id is not passed" do
27
+ @vendor = Aceitafacil::Vendor.find(nil)
28
+ @vendor.should be_nil
29
+ end
30
+
31
+ # it "should return a list vendors" do
32
+ # @vendor = Aceitafacil::Vendor.find(2)
33
+
34
+ # @vendor.id.should == vendor_params[:id]
35
+ # @vendor.name.should == vendor_params[:name]
36
+ # @vendor.email.should == vendor_params[:email]
37
+ # end
38
+ end
39
+
40
+ describe "making a update call" do
41
+ it do
42
+ response = @vendor.update
43
+ response.should be_kind_of Net::HTTPSuccess
44
+ end
45
+
46
+ it "should update a remote vendor" do
47
+ @vendor.name = "Chuck Norris"
48
+ @vendor.update
49
+ @vendor = Aceitafacil::Vendor.find(2)
50
+ @vendor.name.should eq("Chuck Norris")
51
+ end
52
+ end
53
+
54
+ # describe "making a save call" do
55
+ # it "should create a new remote vendor" do
56
+ # response = @vendor.save
57
+ # response.should be_kind_of Net::HTTPSuccess
58
+ # end
59
+ # end
60
+ end
@@ -0,0 +1,13 @@
1
+ require 'aceitafacil'
2
+ require 'fakeweb'
3
+
4
+ FakeWeb.allow_net_connect = true
5
+
6
+ Aceitafacil.setup do |config|
7
+ # Altere para production ao final dos seus testes
8
+ config.environment = :test
9
+ # Chave pública
10
+ config.api_key = "e3c23d27ca61ac2cc3b8a1e4ed5340247221757d"
11
+ # Chave privada
12
+ config.api_password = "773aebdf0d1202cac6837751f354c0a70553b3cd"
13
+ end
metadata ADDED
@@ -0,0 +1,171 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: aceitafacil
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Wilbert Ribeiro
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-05-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: json
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 1.8.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 1.8.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '1.5'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '1.5'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '='
46
+ - !ruby/object:Gem::Version
47
+ version: 10.3.1
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '='
53
+ - !ruby/object:Gem::Version
54
+ version: 10.3.1
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec-rails
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: 2.14.2
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '='
67
+ - !ruby/object:Gem::Version
68
+ version: 2.14.2
69
+ - !ruby/object:Gem::Dependency
70
+ name: fakeweb
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '='
74
+ - !ruby/object:Gem::Version
75
+ version: 1.3.0
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '='
81
+ - !ruby/object:Gem::Version
82
+ version: 1.3.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: factory_girl_rails
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '='
88
+ - !ruby/object:Gem::Version
89
+ version: 4.4.0
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '='
95
+ - !ruby/object:Gem::Version
96
+ version: 4.4.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: debugger
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '='
102
+ - !ruby/object:Gem::Version
103
+ version: 1.6.6
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '='
109
+ - !ruby/object:Gem::Version
110
+ version: 1.6.6
111
+ description: ! ' It implements Cards and Payments from Aceita Fácil doc spec. '
112
+ email:
113
+ - wkelyson@gmail.com
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - .gitignore
119
+ - Gemfile
120
+ - LICENSE
121
+ - README.md
122
+ - Rakefile
123
+ - aceitafacil.gemspec
124
+ - lib/aceitafacil.rb
125
+ - lib/aceitafacil/bank.rb
126
+ - lib/aceitafacil/card.rb
127
+ - lib/aceitafacil/connection.rb
128
+ - lib/aceitafacil/item.rb
129
+ - lib/aceitafacil/payment.rb
130
+ - lib/aceitafacil/utils.rb
131
+ - lib/aceitafacil/vendor.rb
132
+ - lib/aceitafacil/version.rb
133
+ - lib/templates/aceitafacil/install_generator.rb
134
+ - lib/templates/templates/aceitafacil.rb
135
+ - spec/aceitafacil/card_spec.rb
136
+ - spec/aceitafacil/connection_spec.rb
137
+ - spec/aceitafacil/payment_spec.rb
138
+ - spec/aceitafacil/utils_spec.rb
139
+ - spec/aceitafacil/vendor_spec.rb
140
+ - spec/spec_helper.rb
141
+ homepage: http://www.github.com/wilbert/aceitafacil
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.2.2
162
+ signing_key:
163
+ specification_version: 4
164
+ summary: This gem enables Aceita Fácil API features on Ruby on Rails
165
+ test_files:
166
+ - spec/aceitafacil/card_spec.rb
167
+ - spec/aceitafacil/connection_spec.rb
168
+ - spec/aceitafacil/payment_spec.rb
169
+ - spec/aceitafacil/utils_spec.rb
170
+ - spec/aceitafacil/vendor_spec.rb
171
+ - spec/spec_helper.rb