moip 1.0.4 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
File without changes
@@ -28,8 +28,5 @@ PLATFORMS
28
28
  ruby
29
29
 
30
30
  DEPENDENCIES
31
- activesupport (>= 2.3.2)
32
- httparty (~> 0.6.1)
33
31
  moip!
34
- nokogiri (~> 1.4.3)
35
32
  rspec (~> 2.1.0)
data/LICENSE CHANGED
File without changes
@@ -65,19 +65,13 @@ Após realizar os testes na SandBox, você poderá fazer a mudança para o ambie
65
65
  ###Checkout
66
66
 
67
67
  def checkout
68
- response = MoIP::Client.checkout(boleto)
68
+ response = MoIP.checkout(boleto)
69
69
 
70
70
  # exibe o boleto para impressão
71
- redirect_to MoIP::Client.moip_page(response["Token"])
71
+ redirect_to MoIP.moip_page(response["Token"])
72
72
  end
73
73
 
74
- ###Erros
75
-
76
- - MoIP::MissingPaymentTypeError - Quando falta a razão do pagamento na requisição.
77
- - MoIP::MissingPayerError - Quando falta as informações do pagador na requisição.
78
- - MoIP::WebServerResponseError - Quando há algum erro ao se enviar a solicitação ao servidor. Normalmente a razão do erro vem como resposta da mensagem.
79
-
80
- ## Futuras implementações
74
+ ### Futuras implementações
81
75
 
82
76
  * Pagamento Simples
83
77
  * Pagamento Recorrente
data/Rakefile CHANGED
@@ -2,8 +2,6 @@
2
2
  require 'rubygems'
3
3
  require 'rake'
4
4
 
5
- require 'rspec/core/rake_task'
6
-
7
5
  begin
8
6
  require 'jeweler'
9
7
  Jeweler::Tasks.new do |gem|
@@ -15,7 +13,7 @@ begin
15
13
  gem.authors = ["Guilherme Nascimento"]
16
14
  gem.add_development_dependency "rspec", "~> 2.1.0"
17
15
  gem.add_dependency "nokogiri", "~> 1.4.3"
18
- gem.add_dependency "httparty", "~> 0.8.1"
16
+ gem.add_dependency "httparty", "~> 0.6.1"
19
17
  gem.add_dependency "activesupport", '>= 2.3.2'
20
18
  end
21
19
  Jeweler::GemcutterTasks.new
@@ -23,9 +21,15 @@ rescue LoadError
23
21
  puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
24
22
  end
25
23
 
26
- task :default => :spec
24
+ require 'rspec/core/rake_task'
25
+
26
+ desc "Run all examples"
27
27
  RSpec::Core::RakeTask.new
28
28
 
29
+ task :spec => :check_dependencies
30
+
31
+ task :default => :spec
32
+
29
33
  require 'rake/rdoctask'
30
34
  Rake::RDocTask.new do |rdoc|
31
35
  version = File.exist?('VERSION') ? File.read('VERSION') : ""
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.4
1
+ 2.0.0
@@ -1,29 +1,20 @@
1
1
  # encoding: utf-8
2
- require "nokogiri"
3
-
4
2
  module MoIP
5
3
 
6
- class MissingPaymentTypeError < StandardError ; end
7
- class MissingPayerError < StandardError ; end
8
-
9
4
  class DirectPayment
10
5
 
11
6
  class << self
12
7
 
13
8
  # Cria uma instrução de pagamento direto
14
9
  def body(attributes = {})
15
- raise(MissinPaymentTypeError, "É necessário informar a razão do pagamento") if attributes[:razao].nil?
16
- raise(MissingPayerError, "É obrigatório passar as informações do pagador") if attributes[:pagador].nil?
17
-
18
10
  builder = Nokogiri::XML::Builder.new(:encoding => "UTF-8") do |xml|
19
11
 
20
12
  # Identificador do tipo de instrução
21
13
  xml.EnviarInstrucao {
22
14
  xml.InstrucaoUnica {
23
-
24
15
  # Dados da transação
25
16
  xml.Razao {
26
- xml.text attributes[:razao]
17
+ xml.text "Pagamento"
27
18
  }
28
19
  xml.Valores {
29
20
  xml.Valor(:moeda => "BRL") {
@@ -52,6 +43,7 @@ module MoIP
52
43
  xml.Instituicao {
53
44
  xml.text attributes[:instituicao]
54
45
  }
46
+
55
47
  xml.CartaoCredito {
56
48
  xml.Numero {
57
49
  xml.text attributes[:numero]
@@ -89,6 +81,7 @@ module MoIP
89
81
  }
90
82
 
91
83
  # Dados do pagador
84
+ raise(StandardError, "É obrigatório passar as informações do pagador") if attributes[:pagador].nil?
92
85
  xml.Pagador {
93
86
  xml.Nome { xml.text attributes[:pagador][:nome] }
94
87
  xml.LoginMoIP { xml.text attributes[:pagador][:login_moip] }
@@ -124,23 +117,15 @@ module MoIP
124
117
  }
125
118
  }
126
119
  end
127
-
128
- if attributes[:url_retorno]
129
- # URL de retorno
130
- xml.URLRetorno {
131
- xml.text attributes[:url_retorno]
132
- }
133
- end
134
-
120
+
135
121
  }
136
122
  }
137
123
  end
138
-
139
124
  builder.to_xml
140
125
  end
141
126
 
142
127
  end
143
128
 
144
129
  end
145
-
130
+
146
131
  end
@@ -1,47 +1,77 @@
1
1
  # encoding: utf-8
2
2
  require "rubygems"
3
3
  require 'active_support/core_ext/module/attribute_accessors'
4
- require 'active_support/deprecation'
4
+ require 'httparty'
5
+ require "nokogiri"
6
+
7
+ require "direct_payment"
5
8
 
6
9
  module MoIP
7
- autoload :DirectPayment, 'moip/direct_payment'
8
- autoload :Client, 'moip/client'
10
+ include HTTParty
9
11
 
10
- # URI para acessar o serviço
11
- mattr_accessor :uri
12
- @@uri = 'https://www.moip.com.br'
12
+ # URI para acessar o serviço
13
+ mattr_accessor :uri
14
+ @@uri = 'https://www.moip.com.br'
13
15
 
14
- # Token de autenticação
15
- mattr_accessor :token
16
+ # Token de autenticação
17
+ mattr_accessor :token
16
18
 
17
- # Chave de acesso ao serviço
18
- mattr_accessor :key
19
+ # Chave de acesso ao serviço
20
+ mattr_accessor :key
19
21
 
20
- def self.setup
21
- yield self
22
- end
22
+ def self.setup
23
+ yield self
24
+ end
23
25
 
24
- STATUS = {1 => "authorized", 2 => "started", 3 => "printed", 4 => "completed", 5 => "canceled", 6 => "analysing"}
26
+ STATUS = { 1 => "authorized", 2 => "started", 3 => "printed", 4 => "completed", 5 => "canceled", 6 => "analysing" }
25
27
 
26
- class << self
27
- def checkout(attributes = {})
28
- ActiveSupport::Deprecation.warn("MoIP.checkout has been deprecated. Use MoIP::Client.checkout instead", caller)
29
- MoIP::Client.checkout(attributes)
30
- end
28
+ base_uri "#{self.uri}/ws/alpha"
29
+ basic_auth self.token, self.key
31
30
 
32
- def query(token)
33
- ActiveSupport::Deprecation.warn("MoIP.query has been deprecated. Use MoIP::Client.query instead", caller)
34
- MoIP::Client.query(token)
35
- end
31
+ class << self
32
+ # Envia uma instrução para pagamento único
33
+ def checkout(attributes = {})
34
+ full_data = peform_action!(:post, 'EnviarInstrucao/Unica', :body => DirectPayment.body(attributes))
36
35
 
37
- def moip_page(token)
38
- ActiveSupport::Deprecation.warn("MoIP.moip_page has been deprecated. use MoIP::Client.moip_page instead", caller)
39
- MoIP::Client.moip_page(token)
40
- end
36
+ get_response!(full_data["EnviarInstrucaoUnicaResponse"]["Resposta"])
37
+ end
38
+
39
+ # Consulta dos dados das autorizações e pagamentos associados à Instrução
40
+ def query(token)
41
+ full_data = peform_action!(:get, "ConsultarInstrucao/#{token}")
42
+
43
+ get_response!(full_data["ConsultarTokenResponse"]["RespostaConsultar"])
44
+ end
45
+
46
+ # Retorna a URL de acesso ao MoIP
47
+ def moip_page(token)
48
+ raise(StandardError, "É necessário informar um token para retornar os dados da transação") if token.nil?
49
+ "#{self.uri}/Instrucao.do?token=#{token}"
50
+ end
51
+
52
+ # Monta o NASP
53
+ def notification(params)
54
+ notification = {}
55
+ notification[:transaction_id] = params["id_transacao"]
56
+ notification[:amount] = params["valor"]
57
+ notification[:status] = STATUS[params["status_pagamento"].to_i]
58
+ notification[:code] = params["cod_moip"]
59
+ notification[:payment_type] = params["tipo_pagamento"]
60
+ notification[:email] = params["email_consumidor"]
61
+ notification
62
+ end
63
+
64
+ private
65
+
66
+ def peform_action!(action_name, url, options = {})
67
+ response = self.send(action_name, url, options)
68
+ raise(StandardError, "Ocorreu um erro ao chamar o webservice") if response.nil?
69
+ response
70
+ end
41
71
 
42
- def notification(params)
43
- ActiveSupport::Deprecation.warn("MoIP.notification has been deprecated. use MoIP::Client.notification instead", caller)
44
- MoIP::Client.moip_page(token)
72
+ def get_response!(data)
73
+ raise(StandardError, data["Erro"]) if data["Status"] == "Falha"
74
+ data
75
+ end
45
76
  end
46
- end
47
77
  end
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{moip}
8
- s.version = "1.0.4"
8
+ s.version = "2.0.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Guilherme Nascimento"]
@@ -24,9 +24,8 @@ Gem::Specification.new do |s|
24
24
  "README.markdown",
25
25
  "Rakefile",
26
26
  "VERSION",
27
+ "lib/direct_payment.rb",
27
28
  "lib/moip.rb",
28
- "lib/moip/client.rb",
29
- "lib/moip/direct_payment.rb",
30
29
  "moip.gemspec",
31
30
  "spec/moip_spec.rb"
32
31
  ]
@@ -45,8 +44,10 @@ Gem::Specification.new do |s|
45
44
  s.add_development_dependency(%q<rspec>, ["~> 2.1.0"])
46
45
  s.add_development_dependency(%q<rspec>, ["~> 2.1.0"])
47
46
  s.add_development_dependency(%q<rspec>, ["~> 2.1.0"])
47
+ s.add_development_dependency(%q<rspec>, ["~> 2.1.0"])
48
+ s.add_development_dependency(%q<rspec>, ["~> 2.1.0"])
48
49
  s.add_runtime_dependency(%q<nokogiri>, ["~> 1.4.3"])
49
- s.add_runtime_dependency(%q<httparty>, ["~> 0.8.1"])
50
+ s.add_runtime_dependency(%q<httparty>, ["~> 0.6.1"])
50
51
  s.add_runtime_dependency(%q<activesupport>, [">= 2.3.2"])
51
52
  else
52
53
  s.add_dependency(%q<moip>, [">= 0"])
@@ -54,8 +55,10 @@ Gem::Specification.new do |s|
54
55
  s.add_dependency(%q<rspec>, ["~> 2.1.0"])
55
56
  s.add_dependency(%q<rspec>, ["~> 2.1.0"])
56
57
  s.add_dependency(%q<rspec>, ["~> 2.1.0"])
58
+ s.add_dependency(%q<rspec>, ["~> 2.1.0"])
59
+ s.add_dependency(%q<rspec>, ["~> 2.1.0"])
57
60
  s.add_dependency(%q<nokogiri>, ["~> 1.4.3"])
58
- s.add_dependency(%q<httparty>, ["~> 0.8.1"])
61
+ s.add_dependency(%q<httparty>, ["~> 0.6.1"])
59
62
  s.add_dependency(%q<activesupport>, [">= 2.3.2"])
60
63
  end
61
64
  else
@@ -64,8 +67,10 @@ Gem::Specification.new do |s|
64
67
  s.add_dependency(%q<rspec>, ["~> 2.1.0"])
65
68
  s.add_dependency(%q<rspec>, ["~> 2.1.0"])
66
69
  s.add_dependency(%q<rspec>, ["~> 2.1.0"])
70
+ s.add_dependency(%q<rspec>, ["~> 2.1.0"])
71
+ s.add_dependency(%q<rspec>, ["~> 2.1.0"])
67
72
  s.add_dependency(%q<nokogiri>, ["~> 1.4.3"])
68
- s.add_dependency(%q<httparty>, ["~> 0.8.1"])
73
+ s.add_dependency(%q<httparty>, ["~> 0.6.1"])
69
74
  s.add_dependency(%q<activesupport>, [">= 2.3.2"])
70
75
  end
71
76
  end
@@ -1,8 +1,6 @@
1
1
  # encoding: utf-8
2
2
  require "moip"
3
3
 
4
- require "digest/sha1"
5
-
6
4
  describe "Make payments with the MoIP API" do
7
5
 
8
6
  before :all do
@@ -28,233 +26,107 @@ describe "Make payments with the MoIP API" do
28
26
  :cep => "70100-000",
29
27
  :tel_fixo => "(61)3211-1221" }
30
28
 
31
- @billet_without_razao = { :value => "8.90", :id_proprio => id,
32
- :forma => "BoletoBancario", :pagador => @pagador}
33
- @billet = { :value => "8.90", :id_proprio => id,
34
- :forma => "BoletoBancario", :pagador => @pagador ,
35
- :razao=> "Pagamento" }
36
-
37
- @debit = { :value => "8.90", :id_proprio => id, :forma => "DebitoBancario",
38
- :instituicao => "BancoDoBrasil", :pagador => @pagador,
39
- :razao => "Pagamento"}
40
-
41
- @credit = { :value => "8.90", :id_proprio => id, :forma => "CartaoCredito",
42
- :instituicao => "AmericanExpress",:numero => "345678901234564",
43
- :expiracao => "08/11", :codigo_seguranca => "1234",
44
- :nome => "João Silva", :identidade => "134.277.017.00",
45
- :telefone => "(21)9208-0547", :data_nascimento => "25/10/1980",
46
- :parcelas => "2", :recebimento => "AVista",
47
- :pagador => @pagador, :razao => "Pagamento"}
29
+ @billet = { :value => "8.90", :id_proprio => id, :forma => "BoletoBancario", :pagador => @pagador }
30
+ @debit = { :value => "8.90", :id_proprio => id, :forma => "DebitoBancario", :instituicao => "BancoDoBrasil", :pagador => @pagador }
31
+ @credit = { :value => "8.90", :id_proprio => id, :forma => "CartaoCredito", :instituicao => "AmericanExpress", :numero => "345678901234564", :expiracao => "08/11", :codigo_seguranca => "1234", :nome => "João Silva", :identidade => "134.277.017.00", :telefone => "(21)9208-0547", :data_nascimento => "25/10/1980", :parcelas => "2", :recebimento => "AVista", :pagador => @pagador }
48
32
  end
49
33
 
50
- context "checkout" do
51
- before(:each) do
52
- MoIP::Client.stub!(:post).
53
- and_return("ns1:EnviarInstrucaoUnicaResponse"=>
54
- { "Resposta"=>
55
- { "ID"=>Time.now.strftime("%y%m%d%H%M%S"),
56
- "Status"=>"Sucesso",
57
- "Token" => "T2N0L0X8E0S71217U2H3W1T4F4S4G4K731D010V0S0V0S080M010E0Q082X2"
58
- }
59
- })
34
+ context "make a billet checkout" do
35
+ it "should have status Sucesso" do
36
+ MoIP.stub!(:post).and_return("ns1:EnviarInstrucaoUnicaResponse"=>{ "Resposta"=>{ "ID"=>Time.now.strftime("%y%m%d%H%M%S"), "Status"=>"Sucesso", "Token" => "T2N0L0X8E0S71217U2H3W1T4F4S4G4K731D010V0S0V0S080M010E0Q082X2" }})
37
+ response = MoIP.checkout(@billet)
38
+ response["Status"].should == "Sucesso"
60
39
  end
40
+ end
61
41
 
62
- it "with old api should be deprecated" do
63
- deprecations = collect_deprecations{ MoIP.checkout(@billet) }
64
-
65
- deprecations.should_not be_empty
66
- deprecations.any? {|w| w =~ /MoIP.checkout has been deprecated/ }.should be_true
42
+ context "make a debit checkout" do
43
+ it "should have status Sucesso" do
44
+ MoIP.stub!(:post).and_return("ns1:EnviarInstrucaoUnicaResponse"=>{ "Resposta"=>{ "ID"=>Time.now.strftime("%y%m%d%H%M%S"), "Status"=>"Sucesso", "Token" => "T2N0L0X8E0S71217U2H3W1T4F4S4G4K731D010V0S0V0S080M010E0Q082X2" }})
45
+ response = MoIP.checkout(@debit)
46
+ response["Status"].should == "Sucesso"
67
47
  end
48
+ end
68
49
 
69
- context "when it is a billet checkout" do
70
- it "should raise an exception when razao parameter is not passed" do
71
- error = "É necessário informar a razão do pagamento"
72
-
73
- lambda { MoIP::Client.checkout(@billet_without_razao) }.should
74
- raise_error(MoIP::MissingPaymentTypeError,error)
75
- end
76
-
77
- it "should have status 'Sucesso'" do
78
- response = MoIP::Client.checkout(@billet)
79
- response["Status"].should == "Sucesso"
80
- end
50
+ context "make a debit checkout without pass a institution" do
51
+ it "should have status Falha" do
52
+ @incorrect_debit = { :value => "37.90", :id_proprio => id, :forma => "DebitoBancario", :pagador => @pagador }
53
+ MoIP.stub!(:post).and_return("ns1:EnviarInstrucaoUnicaResponse"=>{ "Resposta"=>{"Status"=>"Falha", "Erro"=>"Pagamento direto não é possível com a instituição de pagamento enviada" }})
54
+ lambda { MoIP.checkout(@incorrect_debit) }.should raise_error(StandardError, "Pagamento direto não é possível com a instituição de pagamento enviada")
81
55
  end
56
+ end
82
57
 
83
- context "when it is a debit checkout" do
84
- it "should have status 'Sucesso' with valid arguments" do
85
- response = MoIP::Client.checkout(@debit)
86
- response["Status"].should == "Sucesso"
87
- end
88
-
89
- it "should have status 'Falha' when a instituition is not passed as argument" do
90
- @incorrect_debit = { :value => "37.90", :id_proprio => id,
91
- :forma => "DebitoBancario", :pagador => @pagador,
92
- :razao => "Pagamento"}
93
-
94
- error = "Pagamento direto não é possível com a instituição de pagamento enviada"
95
-
96
- MoIP::Client.stub!(:post)
97
- .and_return("ns1:EnviarInstrucaoUnicaResponse"=>
98
- { "Resposta"=>
99
- {
100
- "Status"=>"Falha",
101
- "Erro"=>error
102
- }
103
- })
104
- error = "Pagamento direto não é possível com a instituição de pagamento enviada"
105
- lambda { MoIP::Client.checkout(@incorrect_debit) }.should
106
- raise_error(MoIP::WebServerResponseError, error)
107
- end
108
-
109
- it "should raise an exception if payer informations were not passed" do
110
- @incorrect_debit = { :value => "37.90", :id_proprio => id,
111
- :forma => "DebitoBancario",
112
- :instituicao => "BancoDoBrasil",
113
- :razao => "Pagamento"
114
- }
115
-
116
- lambda { MoIP::Client.checkout(@incorrect_debit) }.should
117
- raise_error(MoIP::MissingPayerError, "É obrigatório passar as informações do pagador")
118
- end
58
+ context "make a debit checkout without pass the payer informations" do
59
+ it "should raise an exception" do
60
+ @incorrect_debit = { :value => "37.90", :id_proprio => id, :forma => "DebitoBancario", :instituicao => "BancoDoBrasil" }
61
+ lambda { MoIP.checkout(@incorrect_debit) }.should raise_error(StandardError, "É obrigatório passar as informações do pagador")
119
62
  end
63
+ end
120
64
 
121
- context "when it is a credit card checkout" do
122
- it "should have status 'Sucesso' with valid arguments" do
123
- response = MoIP::Client.checkout(@credit)
124
- response["Status"].should == "Sucesso"
125
- end
126
-
127
- it "should have status 'Falha' when the card informations were not passed as argument" do
128
- @incorrect_credit = { :value => "8.90", :id_proprio => id,
129
- :forma => "CartaoCredito", :pagador => @pagador,
130
- :razao => "Pagamento"
131
- }
132
-
133
- error = "Pagamento direto não é possível com a instituição de pagamento enviada"
134
- MoIP::Client.stub!(:post)
135
- .and_return("ns1:EnviarInstrucaoUnicaResponse"=>
136
- {
137
- "Resposta"=>
138
- {
139
- "Status"=>"Falha",
140
- "Erro"=>error
141
- }
142
- })
143
-
144
- error = "Pagamento direto não é possível com a instituição de pagamento enviada"
145
- lambda { MoIP::Client.checkout(@incorrect_credit) }.should
146
- raise_error(MoIP::WebServerResponseError, error)
147
- end
65
+ context "make a credit card checkout" do
66
+ it "should have status Sucesso" do
67
+ MoIP.stub!(:post).and_return("ns1:EnviarInstrucaoUnicaResponse"=>{ "Resposta"=>{ "ID"=>Time.now.strftime("%y%m%d%H%M%S"), "Status"=>"Sucesso", "Token" => "T2N0L0X8E0S71217U2H3W1T4F4S4G4K731D010V0S0V0S080M010E0Q082X2" }})
68
+ response = MoIP.checkout(@credit)
69
+ response["Status"].should == "Sucesso"
148
70
  end
71
+ end
149
72
 
150
- context "in error scenario" do
151
- it "should raise an exception if response is nil" do
152
- MoIP::Client.stub!(:post).and_return(nil)
153
- lambda { MoIP::Client.checkout(@billet) }.should
154
- raise_error(StandardError,"Ocorreu um erro ao chamar o webservice")
155
- end
156
-
157
- it "should raise an exception if status is fail" do
158
- MoIP::Client.stub!(:post)
159
- .and_return("ns1:EnviarInstrucaoUnicaResponse"=>
160
- { "Resposta"=>
161
- {"Status"=>"Falha",
162
- "Erro"=>"O status da resposta é Falha"
163
- }
164
- })
165
-
166
- lambda { MoIP::Client.checkout(@billet) }.should raise_error(StandardError, "O status da resposta é Falha")
167
- end
73
+ context "make a credit card checkout without pass card informations" do
74
+ it "should have status Falha" do
75
+ @incorrect_credit = { :value => "8.90", :id_proprio => id, :forma => "CartaoCredito", :pagador => @pagador }
76
+ MoIP.stub!(:post).and_return("ns1:EnviarInstrucaoUnicaResponse"=>{ "Resposta"=>{"Status"=>"Falha", "Erro"=>"Pagamento direto não é possível com a instituição de pagamento enviada" }})
77
+ lambda { MoIP.checkout(@incorrect_credit) }.should raise_error(StandardError, "Pagamento direto não é possível com a instituição de pagamento enviada")
168
78
  end
169
79
  end
170
80
 
171
- context "query a transaction token" do
172
- before(:each) do
173
- MoIP::Client.stub!(:get)
174
- .and_return("ns1:ConsultarTokenResponse"=>
175
- { "RespostaConsultar"=>
176
- {"Status"=>"Sucesso",
177
- "ID"=>"201010291031001210000000046760"
178
- }
179
- })
81
+ context "in error scenario" do
82
+ it "should raise an exception if response is nil" do
83
+ MoIP.stub!(:post).and_return(nil)
84
+ lambda { MoIP.checkout(@billet) }.should raise_error(StandardError, "Ocorreu um erro ao chamar o webservice")
180
85
  end
181
86
 
182
- it "with old api should be deprecated" do
183
- deprecations = collect_deprecations{ MoIP.query(token) }
184
-
185
- deprecations.should_not be_empty
186
- deprecations.any? {|w| w =~ /MoIP.query has been deprecated/ }.should be_true
87
+ it "should raise an exception if status is fail" do
88
+ MoIP.stub!(:post).and_return("ns1:EnviarInstrucaoUnicaResponse"=>{ "Resposta"=>{"Status"=>"Falha", "Erro"=>"O status da resposta é Falha" }})
89
+ lambda { MoIP.checkout(@billet) }.should raise_error(StandardError, "O status da resposta é Falha")
187
90
  end
91
+ end
188
92
 
93
+ context "query a transaction token" do
189
94
  it "should retrieve the transaction" do
190
- response = MoIP::Client.query(token)
95
+ MoIP.stub!(:get).and_return("ns1:ConsultarTokenResponse"=>{ "RespostaConsultar"=>{"Status"=>"Sucesso", "ID"=>"201010291031001210000000046760" }})
96
+ response = MoIP.query(token)
191
97
  response["Status"].should == "Sucesso"
192
98
  end
99
+ end
193
100
 
194
- context "in a error scenario" do
195
- it "should retrieve status 'Falha'" do
196
- MoIP::Client.stub!(:get)
197
- .and_return("ns1:ConsultarTokenResponse"=>
198
- { "RespostaConsultar"=>
199
- {"Status"=>"Falha",
200
- "Erro"=>"Instrução não encontrada",
201
- "ID"=>"201010291102522860000000046768"
202
- }
203
- })
204
- query = "000000000000000000000000000000000000000000000000000000000000"
205
- lambda { MoIP::Client.query(query) }.should raise_error(StandardError, "Instrução não encontrada")
206
- end
101
+ context "query a transaction token in a error scenario" do
102
+ it "should retrieve status Falha" do
103
+ MoIP.stub!(:get).and_return("ns1:ConsultarTokenResponse"=>{ "RespostaConsultar"=>{"Status"=>"Falha", "Erro"=>"Instrução não encontrada", "ID"=>"201010291102522860000000046768"}})
104
+ lambda { MoIP.query("000000000000000000000000000000000000000000000000000000000000") }.should raise_error(StandardError, "Instrução não encontrada")
207
105
  end
208
106
  end
209
107
 
210
108
  context "build the MoIP URL" do
211
- it "with old api should be deprecated" do
212
- deprecations = collect_deprecations{ MoIP.moip_page(token) }
213
-
214
- deprecations.should_not be_empty
215
- deprecations.any? {|w| w =~ /MoIP.moip_page has been deprecated/ }.should be_true
216
- end
217
-
218
109
  it "should build the correct URL" do
219
- page = "https://desenvolvedor.moip.com.br/sandbox/Instrucao.do?token=#{token}"
220
- MoIP::Client.moip_page(token).should == page
110
+ MoIP.moip_page(token).should == "https://desenvolvedor.moip.com.br/sandbox/Instrucao.do?token=#{token}"
221
111
  end
222
112
 
223
113
  it "should raise an error if the token is not informed" do
224
- error = "É necessário informar um token para retornar os dados da transação"
225
- lambda { MoIP::Client.moip_page("").should
226
- raise_error(ArgumentError, error) }
114
+ lambda { MoIP.moip_page("").should raise_error(ArgumentError, "É necessário informar um token para retornar os dados da transação") }
227
115
  end
228
116
 
229
117
  it "should raise an error if nil is passed as the token" do
230
- error = "É necessário informar um token para retornar os dados da transação"
231
- lambda { MoIP::Client.moip_page(nil).should
232
- raise_error(ArgumentError, error) }
118
+ lambda { MoIP.moip_page(nil).should raise_error(ArgumentError, "É necessário informar um token para retornar os dados da transação") }
233
119
  end
234
120
  end
235
121
 
236
122
  context "when receive notification" do
237
123
  before(:each) do
238
- @params = { "id_transacao" => "Pag62", "valor" => "8.90",
239
- "status_pagamento" => "3", "cod_moip" => "001",
240
- "forma_pagamento" => "73", "tipo_pagamento" => "BoletoBancario",
241
- "email_consumidor" => "presidente@planalto.gov.br" }
242
- end
243
-
244
- it "with old api should be deprecated" do
245
- deprecations = collect_deprecations{ MoIP.notification(@param) }
246
-
247
- deprecations.should_not be_empty
248
- deprecations.any? {|w| w =~ /MoIP.notification has been deprecated/ }.should be_true
124
+ @params = { "id_transacao" => "Pag62", "valor" => "8.90", "status_pagamento" => "3", "cod_moip" => "001", "forma_pagamento" => "73", "tipo_pagamento" => "BoletoBancario", "email_consumidor" => "presidente@planalto.gov.br" }
249
125
  end
250
126
 
251
127
  it "should return a hash with the params extracted from NASP" do
252
- response = { :transaction_id => "Pag62", :amount => "8.90",
253
- :status => "printed", :code => "001",
254
- :payment_type => "BoletoBancario",
255
- :email => "presidente@planalto.gov.br" }
256
-
257
- MoIP::Client.notification(@params).should == response
128
+ response = { :transaction_id => "Pag62", :amount => "8.90", :status => "printed", :code => "001", :payment_type => "BoletoBancario", :email => "presidente@planalto.gov.br" }
129
+ MoIP.notification(@params).should == response
258
130
  end
259
131
 
260
132
  it "should return valid status based on status code" do
@@ -275,15 +147,4 @@ describe "Make payments with the MoIP API" do
275
147
  "T2X0Q1N021E0B2S9U1P0V3Y0G1F570Y2P4M0P000M0Z0F0J0G0U4N6C7W5T9"
276
148
  end
277
149
 
278
- def collect_deprecations
279
- old_behavior = ActiveSupport::Deprecation.behavior
280
- deprecations = []
281
- ActiveSupport::Deprecation.behavior = Proc.new do |message, callstack|
282
- deprecations << message
283
- end
284
- result = yield
285
- deprecations
286
- ensure
287
- ActiveSupport::Deprecation.behavior = old_behavior
288
- end
289
150
  end
metadata CHANGED
@@ -3,11 +3,11 @@ name: moip
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
- - 1
6
+ - 2
7
+ - 0
7
8
  - 0
8
- - 4
9
9
  segments_generated: true
10
- version: 1.0.4
10
+ version: 2.0.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Guilherme Nascimento
@@ -91,11 +91,41 @@ dependencies:
91
91
  segments_generated: true
92
92
  version: 2.1.0
93
93
  requirement: *id005
94
+ - !ruby/object:Gem::Dependency
95
+ prerelease: false
96
+ type: :development
97
+ name: rspec
98
+ version_requirements: &id006 !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ~>
101
+ - !ruby/object:Gem::Version
102
+ segments:
103
+ - 2
104
+ - 1
105
+ - 0
106
+ segments_generated: true
107
+ version: 2.1.0
108
+ requirement: *id006
109
+ - !ruby/object:Gem::Dependency
110
+ prerelease: false
111
+ type: :development
112
+ name: rspec
113
+ version_requirements: &id007 !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ~>
116
+ - !ruby/object:Gem::Version
117
+ segments:
118
+ - 2
119
+ - 1
120
+ - 0
121
+ segments_generated: true
122
+ version: 2.1.0
123
+ requirement: *id007
94
124
  - !ruby/object:Gem::Dependency
95
125
  prerelease: false
96
126
  type: :runtime
97
127
  name: nokogiri
98
- version_requirements: &id006 !ruby/object:Gem::Requirement
128
+ version_requirements: &id008 !ruby/object:Gem::Requirement
99
129
  requirements:
100
130
  - - ~>
101
131
  - !ruby/object:Gem::Version
@@ -105,27 +135,27 @@ dependencies:
105
135
  - 3
106
136
  segments_generated: true
107
137
  version: 1.4.3
108
- requirement: *id006
138
+ requirement: *id008
109
139
  - !ruby/object:Gem::Dependency
110
140
  prerelease: false
111
141
  type: :runtime
112
142
  name: httparty
113
- version_requirements: &id007 !ruby/object:Gem::Requirement
143
+ version_requirements: &id009 !ruby/object:Gem::Requirement
114
144
  requirements:
115
145
  - - ~>
116
146
  - !ruby/object:Gem::Version
117
147
  segments:
118
148
  - 0
119
- - 8
149
+ - 6
120
150
  - 1
121
151
  segments_generated: true
122
- version: 0.8.1
123
- requirement: *id007
152
+ version: 0.6.1
153
+ requirement: *id009
124
154
  - !ruby/object:Gem::Dependency
125
155
  prerelease: false
126
156
  type: :runtime
127
157
  name: activesupport
128
- version_requirements: &id008 !ruby/object:Gem::Requirement
158
+ version_requirements: &id010 !ruby/object:Gem::Requirement
129
159
  requirements:
130
160
  - - ">="
131
161
  - !ruby/object:Gem::Version
@@ -135,7 +165,7 @@ dependencies:
135
165
  - 2
136
166
  segments_generated: true
137
167
  version: 2.3.2
138
- requirement: *id008
168
+ requirement: *id010
139
169
  description: "Gem para utiliza\xC3\xA7\xC3\xA3o da API MoIP"
140
170
  email: guilherme.ruby@gmail.com
141
171
  executables: []
@@ -153,9 +183,8 @@ files:
153
183
  - README.markdown
154
184
  - Rakefile
155
185
  - VERSION
186
+ - lib/direct_payment.rb
156
187
  - lib/moip.rb
157
- - lib/moip/client.rb
158
- - lib/moip/direct_payment.rb
159
188
  - moip.gemspec
160
189
  - spec/moip_spec.rb
161
190
  has_rdoc: true
@@ -1,62 +0,0 @@
1
- # encoding: utf-8
2
- require 'httparty'
3
-
4
- module MoIP
5
- class WebServerResponseError < StandardError ; end
6
- class MissingTokenError < StandardError ; end
7
-
8
- class Client
9
- include HTTParty
10
-
11
- base_uri "#{MoIP.uri}/ws/alpha"
12
- basic_auth MoIP.token, MoIP.key
13
-
14
- class << self
15
-
16
- # Envia uma instrução para pagamento único
17
- def checkout(attributes = {})
18
- full_data = peform_action!(:post, 'EnviarInstrucao/Unica', :body => DirectPayment.body(attributes))
19
-
20
- get_response!(full_data["ns1:EnviarInstrucaoUnicaResponse"]["Resposta"])
21
- end
22
-
23
- # Consulta dos dados das autorizações e pagamentos associados à Instrução
24
- def query(token)
25
- full_data = peform_action!(:get, "ConsultarInstrucao/#{token}")
26
-
27
- get_response!(full_data["ns1:ConsultarTokenResponse"]["RespostaConsultar"])
28
- end
29
-
30
- # Retorna a URL de acesso ao MoIP
31
- def moip_page(token)
32
- raise(MissingTokenError, "É necessário informar um token para retornar os dados da transação") if token.nil?
33
- "#{MoIP.uri}/Instrucao.do?token=#{token}"
34
- end
35
-
36
- # Monta o NASP
37
- def notification(params)
38
- notification = {}
39
- notification[:transaction_id] = params["id_transacao"]
40
- notification[:amount] = params["valor"]
41
- notification[:status] = MoIP::STATUS[params["status_pagamento"].to_i]
42
- notification[:code] = params["cod_moip"]
43
- notification[:payment_type] = params["tipo_pagamento"]
44
- notification[:email] = params["email_consumidor"]
45
- notification
46
- end
47
-
48
- private
49
-
50
- def peform_action!(action_name, url, options = {})
51
- response = self.send(action_name, url, options)
52
- raise(WebServerResponseError, "Ocorreu um erro ao chamar o webservice") if response.nil?
53
- response
54
- end
55
-
56
- def get_response!(data)
57
- raise(WebServerResponseError, data["Erro"]) if data["Status"] == "Falha"
58
- data
59
- end
60
- end
61
- end
62
- end