correios-frete 1.2.1 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,6 @@
1
+ == Versão 1.3.0
2
+ - Atualização: Refatoração das classes Correios::Frete::Calculador e Correios::Frete::WebService.
3
+
1
4
  == Versão 1.2.1
2
5
  - Atualização: Documentação
3
6
 
@@ -13,7 +16,7 @@
13
16
  - Melhoria: Remoção dos cabeçalhos HTTP no log da resposta do Web Service dos Correios.
14
17
 
15
18
  == Versão 1.0.1
16
- - Atualização: Documentação
19
+ - Atualização: Documentação.
17
20
 
18
21
  == Versão 1.0.0
19
22
  - Aviso: Quebra de compatibilidade com a versão 0.3.0.
@@ -23,17 +26,17 @@
23
26
  - Novo: Métodos diretos para cálculo de um serviço de frete por vez. Exemplo: Correios::Frete#calcular_sedex.
24
27
 
25
28
  == Versão 0.2.1
26
- - Melhoria: Alias Correios::Frete::Servico#sucesso? para Correios::Frete::Servico#success?
27
- - Melhoria: Alias Correios::Frete::Servico#erro? para Correios::Frete::Servico#error?
28
- - Atualização: Documentação
29
+ - Melhoria: Alias Correios::Frete::Servico#sucesso? para Correios::Frete::Servico#success?.
30
+ - Melhoria: Alias Correios::Frete::Servico#erro? para Correios::Frete::Servico#error?.
31
+ - Atualização: Documentação.
29
32
 
30
33
  == Versão 0.2.0
31
- - Novo: Suporte para cálculo de e-SEDEX
32
- - Melhoria: Alias Correios::Frete#calculate para Correios::Frete#calcular
33
- - Melhoria: Atributo "nome" em Correios::Frete::Servico
34
- - Correção: {Issue #2: undefined method `key' for #<Hash:0xb5e8eea4>}[https://github.com/prodis/correios-frete/issues/2]
34
+ - Novo: Suporte para cálculo de e-SEDEX.
35
+ - Melhoria: Alias Correios::Frete#calculate para Correios::Frete#calcular.
36
+ - Melhoria: Atributo "nome" em Correios::Frete::Servico.
37
+ - Correção: {Issue #2: undefined method `key' for #<Hash:0xb5e8eea4>}[https://github.com/prodis/correios-frete/issues/2].
35
38
 
36
39
  == Versão 0.1.0
37
- - Cálculo de frete para os serviços PAC, SEDEX, SEDEX 10 e SEDEX Hoje
38
- - Cálculo de um serviço de frete por vez
39
- - Cálculo de vários serviços de frete ao mesmo tempo
40
+ - Cálculo de frete para os serviços PAC, SEDEX, SEDEX 10 e SEDEX Hoje.
41
+ - Cálculo de um serviço de frete por vez.
42
+ - Cálculo de vários serviços de frete ao mesmo tempo.
data/Gemfile CHANGED
@@ -1,11 +1,12 @@
1
1
  source "http://rubygems.org"
2
2
 
3
3
  gem "log-me", "~> 0.0.2"
4
- gem "nokogiri", "~> 1.4.6"
5
- gem "sax-machine", "~> 0.0.16"
4
+ gem "nokogiri", "~> 1.4.7"
5
+ gem "sax-machine", "~> 0.0.20"
6
6
 
7
7
  group :development do
8
- gem "rspec", "~> 2.6.0"
9
8
  gem "bundler", "~> 1.0.0"
10
- gem "jeweler", "~> 1.6.2"
9
+ gem "fakeweb", "~> 1.3.0"
10
+ gem "jeweler", "~> 1.6.4"
11
+ gem "rspec", "~> 2.6.0"
11
12
  end
@@ -1,14 +1,15 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- diff-lcs (1.1.2)
4
+ diff-lcs (1.1.3)
5
+ fakeweb (1.3.0)
5
6
  git (1.2.5)
6
- jeweler (1.6.2)
7
+ jeweler (1.6.4)
7
8
  bundler (~> 1.0)
8
9
  git (>= 1.2.5)
9
10
  rake
10
11
  log-me (0.0.2)
11
- nokogiri (1.4.6)
12
+ nokogiri (1.4.7)
12
13
  rake (0.9.2)
13
14
  rspec (2.6.0)
14
15
  rspec-core (~> 2.6.0)
@@ -18,7 +19,7 @@ GEM
18
19
  rspec-expectations (2.6.0)
19
20
  diff-lcs (~> 1.1.2)
20
21
  rspec-mocks (2.6.0)
21
- sax-machine (0.0.16)
22
+ sax-machine (0.0.20)
22
23
  nokogiri (> 0.0.0)
23
24
 
24
25
  PLATFORMS
@@ -26,8 +27,9 @@ PLATFORMS
26
27
 
27
28
  DEPENDENCIES
28
29
  bundler (~> 1.0.0)
29
- jeweler (~> 1.6.2)
30
+ fakeweb (~> 1.3.0)
31
+ jeweler (~> 1.6.4)
30
32
  log-me (~> 0.0.2)
31
- nokogiri (~> 1.4.6)
33
+ nokogiri (~> 1.4.7)
32
34
  rspec (~> 2.6.0)
33
- sax-machine (~> 0.0.16)
35
+ sax-machine (~> 0.0.20)
@@ -203,6 +203,7 @@ Para desabilitar o log, mudar o nível do log ou configurar um outro mecanismo d
203
203
  == Colaboradores
204
204
  - {Denis Tierno (detierno)}[https://github.com/detierno]
205
205
  - {Rafael Barbolo (barbolo)}[https://github.com/barbolo]
206
+ - {Ricardo Bernardelli (bernardelli)}[https://github.com/bernardelli]
206
207
 
207
208
  == Copyright
208
209
 
data/Rakefile CHANGED
@@ -18,7 +18,7 @@ Jeweler::Tasks.new do |gem|
18
18
  gem.homepage = "http://prodis.blog.br/2011/07/03/gem-para-calculo-de-frete-dos-correios"
19
19
  gem.license = "MIT"
20
20
  gem.summary = %Q{Cálculo de frete dos Correios.}
21
- gem.description = %Q{Cálculo de frete utilizando o Web Service dos Correios (http://www.correios.com.br/webservices). Os serviços de frete suportados são PAC, SEDEX, SEDEX a Cobrar (necessário informar o valor declarado), SEDEX 10, SEDEX Hoje e e-SEDEX. Para os serviços com contrato é necessário informar código de empresa e senha.}
21
+ gem.description = %Q{Cálculo de frete utilizando o Web Service dos Correios (http://www.correios.com.br/webservices). Os serviços de frete suportados são PAC, SEDEX, SEDEX a Cobrar, SEDEX 10, SEDEX Hoje e e-SEDEX.}
22
22
  gem.email = "prodis@gmail.com"
23
23
  gem.authors = ["Prodis a.k.a. Fernando Hamasaki"]
24
24
  gem.version = Correios::Frete::Version::VERSION
@@ -5,12 +5,12 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{correios-frete}
8
- s.version = "1.2.1"
8
+ s.version = "1.3.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Prodis a.k.a. Fernando Hamasaki"]
12
- s.date = %q{2011-10-03}
13
- s.description = %q{Cálculo de frete utilizando o Web Service dos Correios (http://www.correios.com.br/webservices). Os serviços de frete suportados são PAC, SEDEX, SEDEX a Cobrar (necessário informar o valor declarado), SEDEX 10, SEDEX Hoje e e-SEDEX. Para os serviços com contrato é necessário informar código de empresa e senha.}
12
+ s.date = %q{2011-10-18}
13
+ s.description = %q{Cálculo de frete utilizando o Web Service dos Correios (http://www.correios.com.br/webservices). Os serviços de frete suportados são PAC, SEDEX, SEDEX a Cobrar, SEDEX 10, SEDEX Hoje e e-SEDEX.}
14
14
  s.email = %q{prodis@gmail.com}
15
15
  s.extra_rdoc_files = [
16
16
  "README.rdoc",
@@ -38,7 +38,10 @@ Gem::Specification.new do |s|
38
38
  "spec/correios/frete/servico_spec.rb",
39
39
  "spec/correios/frete/web_service_spec.rb",
40
40
  "spec/correios/frete_spec.rb",
41
- "spec/spec_helper.rb"
41
+ "spec/spec_helper.rb",
42
+ "spec/support/fake_request.rb",
43
+ "spec/support/responses/success-response-many-services.xml",
44
+ "spec/support/responses/success-response-one-service.xml"
42
45
  ]
43
46
  s.homepage = %q{http://prodis.blog.br/2011/07/03/gem-para-calculo-de-frete-dos-correios}
44
47
  s.licenses = ["MIT"]
@@ -52,26 +55,29 @@ Gem::Specification.new do |s|
52
55
 
53
56
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
54
57
  s.add_runtime_dependency(%q<log-me>, ["~> 0.0.2"])
55
- s.add_runtime_dependency(%q<nokogiri>, ["~> 1.4.6"])
56
- s.add_runtime_dependency(%q<sax-machine>, ["~> 0.0.16"])
57
- s.add_development_dependency(%q<rspec>, ["~> 2.6.0"])
58
+ s.add_runtime_dependency(%q<nokogiri>, ["~> 1.4.7"])
59
+ s.add_runtime_dependency(%q<sax-machine>, ["~> 0.0.20"])
58
60
  s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
59
- s.add_development_dependency(%q<jeweler>, ["~> 1.6.2"])
61
+ s.add_development_dependency(%q<fakeweb>, ["~> 1.3.0"])
62
+ s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
63
+ s.add_development_dependency(%q<rspec>, ["~> 2.6.0"])
60
64
  else
61
65
  s.add_dependency(%q<log-me>, ["~> 0.0.2"])
62
- s.add_dependency(%q<nokogiri>, ["~> 1.4.6"])
63
- s.add_dependency(%q<sax-machine>, ["~> 0.0.16"])
64
- s.add_dependency(%q<rspec>, ["~> 2.6.0"])
66
+ s.add_dependency(%q<nokogiri>, ["~> 1.4.7"])
67
+ s.add_dependency(%q<sax-machine>, ["~> 0.0.20"])
65
68
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
66
- s.add_dependency(%q<jeweler>, ["~> 1.6.2"])
69
+ s.add_dependency(%q<fakeweb>, ["~> 1.3.0"])
70
+ s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
71
+ s.add_dependency(%q<rspec>, ["~> 2.6.0"])
67
72
  end
68
73
  else
69
74
  s.add_dependency(%q<log-me>, ["~> 0.0.2"])
70
- s.add_dependency(%q<nokogiri>, ["~> 1.4.6"])
71
- s.add_dependency(%q<sax-machine>, ["~> 0.0.16"])
72
- s.add_dependency(%q<rspec>, ["~> 2.6.0"])
75
+ s.add_dependency(%q<nokogiri>, ["~> 1.4.7"])
76
+ s.add_dependency(%q<sax-machine>, ["~> 0.0.20"])
73
77
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
74
- s.add_dependency(%q<jeweler>, ["~> 1.6.2"])
78
+ s.add_dependency(%q<fakeweb>, ["~> 1.3.0"])
79
+ s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
80
+ s.add_dependency(%q<rspec>, ["~> 2.6.0"])
75
81
  end
76
82
  end
77
83
 
@@ -6,7 +6,6 @@ module Correios
6
6
  attr_accessor :peso, :comprimento, :altura, :largura, :diametro
7
7
  attr_accessor :formato, :mao_propria, :aviso_recebimento, :valor_declarado
8
8
  attr_accessor :codigo_empresa, :senha
9
- attr_writer :web_service, :parser
10
9
 
11
10
  DEFAULT_OPTIONS = {
12
11
  :peso => 0.0,
@@ -14,9 +13,9 @@ module Correios
14
13
  :altura => 0.0,
15
14
  :largura => 0.0,
16
15
  :diametro => 0.0,
17
- :formato => :caixa_pacote,
18
- :mao_propria => false,
19
- :aviso_recebimento => false,
16
+ :formato => :caixa_pacote,
17
+ :mao_propria => false,
18
+ :aviso_recebimento => false,
20
19
  :valor_declarado => 0.0
21
20
  }
22
21
 
@@ -28,16 +27,8 @@ module Correios
28
27
  yield self if block_given?
29
28
  end
30
29
 
31
- def web_service
32
- @web_service ||= Correios::Frete::WebService.new
33
- end
34
-
35
- def parser
36
- @parser ||= Correios::Frete::Parser.new
37
- end
38
-
39
30
  def calcular(*service_types)
40
- response = web_service.request(self, service_types)
31
+ response = web_service(service_types).request!
41
32
  services = parser.servicos(response)
42
33
 
43
34
  if service_types.size == 1
@@ -46,15 +37,27 @@ module Correios
46
37
  services
47
38
  end
48
39
  end
49
-
50
40
  alias calculate calcular
51
41
 
52
- private
53
-
54
42
  def method_missing(method_name, *args)
55
43
  return calcular($2.to_sym) if method_name.to_s =~ /^(calcular|calculate)_(.*)/ && Correios::Frete::Servico.code_from_type($2.to_sym)
56
44
  super
57
45
  end
46
+
47
+ def respond_to?(method_name)
48
+ return true if method_name.to_s =~ /^(calcular|calculate)_(.*)/ && Correios::Frete::Servico.code_from_type($2.to_sym)
49
+ super
50
+ end
51
+
52
+ private
53
+
54
+ def web_service(*service_types)
55
+ Correios::Frete::WebService.new(self, service_types)
56
+ end
57
+
58
+ def parser
59
+ @parser ||= Correios::Frete::Parser.new
60
+ end
58
61
  end
59
62
  end
60
63
  end
@@ -7,22 +7,22 @@ module Correios
7
7
  include SAXMachine
8
8
 
9
9
  AVAILABLE_SERVICES = {
10
- "41106" => { :type => :pac , :name => "PAC", :description => "PAC sem contrato" },
11
- "41068" => { :type => :pac_com_contrato , :name => "PAC", :description => "PAC com contrato" },
12
- "40010" => { :type => :sedex , :name => "SEDEX", :description => "SEDEX sem contrato" },
13
- "40045" => { :type => :sedex_a_cobrar , :name => "SEDEX a Cobrar", :description => "SEDEX a Cobrar, sem contrato" },
14
- "40126" => { :type => :sedex_a_cobrar_com_contrato , :name => "SEDEX a Cobrar", :description => "SEDEX a Cobrar, com contrato" },
15
- "40215" => { :type => :sedex_10 , :name => "SEDEX 10", :description => "SEDEX 10, sem contrato" },
16
- "40290" => { :type => :sedex_hoje , :name => "SEDEX Hoje", :description => "SEDEX Hoje, sem contrato" },
17
- "40096" => { :type => :sedex_com_contrato_1 , :name => "SEDEX", :description => "SEDEX com contrato" },
18
- "40436" => { :type => :sedex_com_contrato_2 , :name => "SEDEX", :description => "SEDEX com contrato" },
19
- "40444" => { :type => :sedex_com_contrato_3 , :name => "SEDEX", :description => "SEDEX com contrato" },
20
- "40568" => { :type => :sedex_com_contrato_4 , :name => "SEDEX", :description => "SEDEX com contrato" },
21
- "40606" => { :type => :sedex_com_contrato_5 , :name => "SEDEX", :description => "SEDEX com contrato" },
22
- "81019" => { :type => :e_sedex , :name => "e-SEDEX", :description => "e-SEDEX, com contrato" },
23
- "81868" => { :type => :e_sedex_grupo_1 , :name => "e-SEDEX", :description => "(Grupo 1) e-SEDEX, com contrato" },
24
- "81833" => { :type => :e_sedex_grupo_2 , :name => "e-SEDEX", :description => "(Grupo 2) e-SEDEX, com contrato" },
25
- "81850" => { :type => :e_sedex_grupo_3 , :name => "e-SEDEX", :description => "(Grupo 3) e-SEDEX, com contrato" }
10
+ "41106" => { :type => :pac, :name => "PAC", :description => "PAC sem contrato" },
11
+ "41068" => { :type => :pac_com_contrato, :name => "PAC", :description => "PAC com contrato" },
12
+ "40010" => { :type => :sedex, :name => "SEDEX", :description => "SEDEX sem contrato" },
13
+ "40045" => { :type => :sedex_a_cobrar, :name => "SEDEX a Cobrar", :description => "SEDEX a Cobrar, sem contrato" },
14
+ "40126" => { :type => :sedex_a_cobrar_com_contrato, :name => "SEDEX a Cobrar", :description => "SEDEX a Cobrar, com contrato" },
15
+ "40215" => { :type => :sedex_10, :name => "SEDEX 10", :description => "SEDEX 10, sem contrato" },
16
+ "40290" => { :type => :sedex_hoje, :name => "SEDEX Hoje", :description => "SEDEX Hoje, sem contrato" },
17
+ "40096" => { :type => :sedex_com_contrato_1, :name => "SEDEX", :description => "SEDEX com contrato" },
18
+ "40436" => { :type => :sedex_com_contrato_2, :name => "SEDEX", :description => "SEDEX com contrato" },
19
+ "40444" => { :type => :sedex_com_contrato_3, :name => "SEDEX", :description => "SEDEX com contrato" },
20
+ "40568" => { :type => :sedex_com_contrato_4, :name => "SEDEX", :description => "SEDEX com contrato" },
21
+ "40606" => { :type => :sedex_com_contrato_5, :name => "SEDEX", :description => "SEDEX com contrato" },
22
+ "81019" => { :type => :e_sedex, :name => "e-SEDEX", :description => "e-SEDEX, com contrato" },
23
+ "81868" => { :type => :e_sedex_grupo_1, :name => "e-SEDEX", :description => "(Grupo 1) e-SEDEX, com contrato" },
24
+ "81833" => { :type => :e_sedex_grupo_2, :name => "e-SEDEX", :description => "(Grupo 2) e-SEDEX, com contrato" },
25
+ "81850" => { :type => :e_sedex_grupo_3, :name => "e-SEDEX", :description => "(Grupo 3) e-SEDEX, com contrato" }
26
26
  }
27
27
 
28
28
  element :Codigo, :as => :codigo
@@ -3,8 +3,8 @@ module Correios
3
3
  module Frete
4
4
  module Version
5
5
  MAJOR = 1
6
- MINOR = 2
7
- PATCH = 1
6
+ MINOR = 3
7
+ PATCH = 0
8
8
  VERSION = [MAJOR, MINOR, PATCH].join(".")
9
9
  end
10
10
  end
@@ -9,9 +9,13 @@ module Correios
9
9
  FORMATS = { :caixa_pacote => 1, :rolo_prisma => 2 }
10
10
  CONDITIONS = { true => "S", false => "N" }
11
11
 
12
- def request(frete, service_types)
12
+ def initialize(frete, service_types)
13
13
  @url = "#{URL}?#{params_for(frete, service_types)}"
14
- with_log { Net::HTTP.get_response URI.parse(@url) }
14
+ end
15
+
16
+ def request!
17
+ response = with_log { Net::HTTP.get_response URI.parse(@url) }
18
+ response.body
15
19
  end
16
20
 
17
21
  private
@@ -42,7 +46,7 @@ module Correios
42
46
  Correios::Frete.log format_request_message
43
47
  response = yield
44
48
  Correios::Frete.log format_response_message(response)
45
- response.body
49
+ response
46
50
  end
47
51
 
48
52
  def format_request_message
@@ -35,8 +35,6 @@ describe Correios::Frete::Calculador do
35
35
  :valor_declarado => 1.99,
36
36
  :codigo_empresa => "1234567890",
37
37
  :senha => "senha",
38
- :web_service => Correios::Frete::WebService.new,
39
- :parser => Correios::Frete::Parser.new
40
38
  }.each do |attr, value|
41
39
  context "when #{attr} is supplied" do
42
40
  it "sets #{attr}" do
@@ -55,37 +53,27 @@ describe Correios::Frete::Calculador do
55
53
  end
56
54
 
57
55
  describe "#calcular" do
58
- before :each do
59
- @web_service = Correios::Frete::WebService.new
60
- @parser = Correios::Frete::Parser.new
61
- @frete = Correios::Frete::Calculador.new(:web_service => @web_service, :parser => @parser)
56
+ around do |example|
57
+ Correios::Frete.configure { |config| config.log_enabled = false }
58
+ example.run
59
+ Correios::Frete.configure { |config| config.log_enabled = true }
62
60
  end
63
61
 
64
- context "to many services" do
65
- before :each do
66
- @xml = '<?xml version="1.0" encoding="ISO-8859-1" ?><Servicos><cServico><Codigo>41106</Codigo><Valor>15,70</Valor><PrazoEntrega>3</PrazoEntrega><ValorMaoPropria>3,70</ValorMaoPropria><ValorAvisoRecebimento>0,00</ValorAvisoRecebimento><ValorValorDeclarado>1,50</ValorValorDeclarado><EntregaDomiciliar>S</EntregaDomiciliar><EntregaSabado>N</EntregaSabado><Erro>0</Erro><MsgErro></MsgErro></cServico><cServico><Codigo>40010</Codigo><Valor>17,80</Valor><PrazoEntrega>1</PrazoEntrega><ValorMaoPropria>3,70</ValorMaoPropria><ValorAvisoRecebimento>0,00</ValorAvisoRecebimento><ValorValorDeclarado>1,50</ValorValorDeclarado><EntregaDomiciliar>S</EntregaDomiciliar><EntregaSabado>S</EntregaSabado><Erro>0</Erro><MsgErro></MsgErro></cServico></Servicos>'
67
- @servicos = { :pac => Correios::Frete::Servico.new, :sedex => Correios::Frete::Servico.new }
62
+ before(:each) { @frete = Correios::Frete::Calculador.new }
68
63
 
69
- @parser.stub(:servicos).and_return(@servicos)
70
- @web_service.stub(:request).with(@frete, [:pac, :sedex]).and_return(@xml)
71
- end
64
+ context "to many services" do
65
+ before(:each) { fake_request_for(:success_response_many_services) }
72
66
 
73
67
  it "returns all services" do
74
- @frete.calcular(:pac, :sedex).should == @servicos
68
+ @frete.calcular(:pac, :sedex).keys.should == [:pac, :sedex]
75
69
  end
76
70
  end
77
71
 
78
72
  context "to one service" do
79
- before :each do
80
- @xml = '<?xml version="1.0" encoding="ISO-8859-1" ?><cServico><Codigo>40010</Codigo><Valor>17,80</Valor><PrazoEntrega>1</PrazoEntrega><ValorMaoPropria>3,70</ValorMaoPropria><ValorAvisoRecebimento>0,00</ValorAvisoRecebimento><ValorValorDeclarado>1,50</ValorValorDeclarado><EntregaDomiciliar>S</EntregaDomiciliar><EntregaSabado>S</EntregaSabado><Erro>0</Erro><MsgErro></MsgErro></cServico></Servicos>'
81
- @servico = Correios::Frete::Servico.new
82
-
83
- @parser.stub(:servicos).and_return(:sedex => @servico)
84
- @web_service.stub(:request).with(@frete, [:sedex]).and_return(@xml)
85
- end
73
+ before(:each) { fake_request_for(:success_response_one_service) }
86
74
 
87
75
  it "returns only one service" do
88
- @frete.calcular(:sedex).should == @servico
76
+ @frete.calcular(:sedex).tipo.should == :sedex
89
77
  end
90
78
  end
91
79
  end
@@ -94,18 +82,23 @@ describe Correios::Frete::Calculador do
94
82
  Correios::Frete::Servico::AVAILABLE_SERVICES.each do |key, service|
95
83
  describe "##{method_name}_#{service[:type]}" do
96
84
  before :each do
97
- web_service = Correios::Frete::WebService.new
98
- parser = Correios::Frete::Parser.new
99
- @frete = Correios::Frete::Calculador.new(:web_service => web_service, :parser => parser)
85
+ @frete = Correios::Frete::Calculador.new
100
86
  @servico = Correios::Frete::Servico.new
101
87
 
102
- parser.stub(:servicos).and_return(service[:type] => @servico)
103
- web_service.stub(:request).with(@frete, [service[:type]]).and_return("XML")
88
+ web_service = mock(Correios::Frete::WebService, :request! => "XML")
89
+ Correios::Frete::WebService.stub(:new).and_return(web_service)
90
+
91
+ parser = mock(Correios::Frete::Parser, :servicos => { service[:type] => @servico })
92
+ Correios::Frete::Parser.stub(:new).and_return(parser)
104
93
  end
105
94
 
106
95
  it "calculates #{service[:name]}" do
107
96
  @frete.send("#{method_name}_#{service[:type]}").should == @servico
108
97
  end
98
+
99
+ it "returns true in respond_to?" do
100
+ subject.respond_to?("#{method_name}_#{service[:type]}").should be_true
101
+ end
109
102
  end
110
103
  end
111
104
 
@@ -115,6 +108,10 @@ describe Correios::Frete::Calculador do
115
108
  it "raises NoMethodError" do
116
109
  expect { @frete.send("#{method_name}_servico_que_nao_existe") }.to raise_error(NoMethodError)
117
110
  end
111
+
112
+ it "returns false in respond_to?" do
113
+ subject.respond_to?("#{method_name}_servico_que_nao_existe").should be_false
114
+ end
118
115
  end
119
116
  end
120
117
  end
@@ -78,7 +78,7 @@ describe Correios::Frete::Servico do
78
78
  end
79
79
  end
80
80
 
81
- context "when there is an unexpect error" do
81
+ context "when there is an unexpected error" do
82
82
  before :each do
83
83
  @xml = """<cServico>
84
84
  <Codigo></Codigo>
@@ -3,53 +3,18 @@ require 'spec_helper'
3
3
 
4
4
  describe Correios::Frete::WebService do
5
5
  describe "#request" do
6
- before :each do
7
- @frete = Correios::Frete::Calculador.new :cep_origem => "01000-000",
8
- :cep_destino => "021222-222",
9
- :peso => 0.321,
10
- :comprimento => 12.5,
11
- :altura => 1.4,
12
- :largura => 4.6,
13
- :diametro => 5.0,
14
- :formato => :rolo_prisma,
15
- :mao_propria => true,
16
- :aviso_recebimento => false,
17
- :valor_declarado => 10.0,
18
- :codigo_empresa => "1234567890",
19
- :senha => "senha"
20
-
21
- url = "http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx?" +
22
- "sCepOrigem=01000-000&" +
23
- "sCepDestino=021222-222&" +
24
- "nVlPeso=0.321&" +
25
- "nVlComprimento=12.5&" +
26
- "nVlAltura=1.4&" +
27
- "nVlLargura=4.6&" +
28
- "nVlDiametro=5.0&" +
29
- "nCdFormato=2&" +
30
- "sCdMaoPropria=S&" +
31
- "sCdAvisoRecebimento=N&" +
32
- "nVlValorDeclarado=10.00&" +
33
- "nCdServico=41106,40010&" +
34
- "nCdEmpresa=1234567890&" +
35
- "sDsSenha=senha&" +
36
- "StrRetorno=xml"
37
-
38
- response = Net::HTTPOK.new nil, 200, "OK"
39
- response.stub(:body).and_return("<xml><fake></fake>")
40
- Net::HTTP.stub(:get_response).with(URI.parse(url)).and_return(response)
41
-
42
- @web_service = Correios::Frete::WebService.new
43
- end
44
-
45
6
  around do |example|
46
7
  Correios::Frete.configure { |config| config.log_enabled = false }
47
8
  example.run
48
9
  Correios::Frete.configure { |config| config.log_enabled = true }
49
10
  end
50
11
 
12
+ let(:frete) { Correios::Frete::Calculador.new }
13
+ let(:webservice) { Correios::Frete::WebService.new(frete, [:pac, :sedex]) }
14
+
51
15
  it "returns XML response" do
52
- @web_service.request(@frete, [:pac, :sedex]).should == "<xml><fake></fake>"
16
+ fake_request_for("<xml><fake></fake>")
17
+ webservice.request!.should == "<xml><fake></fake>"
53
18
  end
54
19
  end
55
20
  end
@@ -2,11 +2,13 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
2
  $LOAD_PATH.unshift(File.dirname(__FILE__))
3
3
  require 'rspec'
4
4
  require 'correios-frete'
5
+ require 'fakeweb'
5
6
 
6
7
  # Requires supporting files with custom matchers and macros, etc,
7
8
  # in ./support/ and its subdirectories.
8
9
  Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
9
10
 
10
11
  RSpec.configure do |config|
11
-
12
12
  end
13
+
14
+ FakeWeb.allow_net_connect = false
@@ -0,0 +1,17 @@
1
+ def fake_request_for(response)
2
+ FakeWeb.register_uri(:get,
3
+ Regexp.new("http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx"),
4
+ :status => 200,
5
+ :body => body_for(response))
6
+ end
7
+
8
+ def body_for(response)
9
+ case response
10
+ when :success_response_one_service
11
+ File.open(File.dirname(__FILE__) + "/responses/success-response-one-service.xml").read
12
+ when :success_response_many_services
13
+ File.open(File.dirname(__FILE__) + "/responses/success-response-many-services.xml").read
14
+ else
15
+ response
16
+ end
17
+ end
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="ISO-8859-1" ?><Servicos><cServico><Codigo>41106</Codigo><Valor>15,70</Valor><PrazoEntrega>3</PrazoEntrega><ValorMaoPropria>3,70</ValorMaoPropria><ValorAvisoRecebimento>0,00</ValorAvisoRecebimento><ValorValorDeclarado>1,50</ValorValorDeclarado><EntregaDomiciliar>S</EntregaDomiciliar><EntregaSabado>N</EntregaSabado><Erro>0</Erro><MsgErro></MsgErro></cServico><cServico><Codigo>40010</Codigo><Valor>17,80</Valor><PrazoEntrega>1</PrazoEntrega><ValorMaoPropria>3,70</ValorMaoPropria><ValorAvisoRecebimento>0,00</ValorAvisoRecebimento><ValorValorDeclarado>1,50</ValorValorDeclarado><EntregaDomiciliar>S</EntregaDomiciliar><EntregaSabado>S</EntregaSabado><Erro>0</Erro><MsgErro></MsgErro></cServico></Servicos>
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="ISO-8859-1" ?><cServico><Codigo>40010</Codigo><Valor>17,80</Valor><PrazoEntrega>1</PrazoEntrega><ValorMaoPropria>3,70</ValorMaoPropria><ValorAvisoRecebimento>0,00</ValorAvisoRecebimento><ValorValorDeclarado>1,50</ValorValorDeclarado><EntregaDomiciliar>S</EntregaDomiciliar><EntregaSabado>S</EntregaSabado><Erro>0</Erro><MsgErro></MsgErro></cServico></Servicos>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: correios-frete
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,12 +9,12 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-10-03 00:00:00.000000000 %:z
12
+ date: 2011-10-18 00:00:00.000000000 %:z
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: log-me
17
- requirement: &3902370 !ruby/object:Gem::Requirement
17
+ requirement: &812990 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ~>
@@ -22,66 +22,76 @@ dependencies:
22
22
  version: 0.0.2
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *3902370
25
+ version_requirements: *812990
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: nokogiri
28
- requirement: &3902100 !ruby/object:Gem::Requirement
28
+ requirement: &812300 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ~>
32
32
  - !ruby/object:Gem::Version
33
- version: 1.4.6
33
+ version: 1.4.7
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *3902100
36
+ version_requirements: *812300
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: sax-machine
39
- requirement: &3901620 !ruby/object:Gem::Requirement
39
+ requirement: &811480 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ~>
43
43
  - !ruby/object:Gem::Version
44
- version: 0.0.16
44
+ version: 0.0.20
45
45
  type: :runtime
46
46
  prerelease: false
47
- version_requirements: *3901620
47
+ version_requirements: *811480
48
48
  - !ruby/object:Gem::Dependency
49
- name: rspec
50
- requirement: &3900450 !ruby/object:Gem::Requirement
49
+ name: bundler
50
+ requirement: &810950 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ~>
54
54
  - !ruby/object:Gem::Version
55
- version: 2.6.0
55
+ version: 1.0.0
56
56
  type: :development
57
57
  prerelease: false
58
- version_requirements: *3900450
58
+ version_requirements: *810950
59
59
  - !ruby/object:Gem::Dependency
60
- name: bundler
61
- requirement: &3899980 !ruby/object:Gem::Requirement
60
+ name: fakeweb
61
+ requirement: &810220 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ~>
65
65
  - !ruby/object:Gem::Version
66
- version: 1.0.0
66
+ version: 1.3.0
67
67
  type: :development
68
68
  prerelease: false
69
- version_requirements: *3899980
69
+ version_requirements: *810220
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: jeweler
72
- requirement: &3899350 !ruby/object:Gem::Requirement
72
+ requirement: &809550 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ~>
76
76
  - !ruby/object:Gem::Version
77
- version: 1.6.2
77
+ version: 1.6.4
78
+ type: :development
79
+ prerelease: false
80
+ version_requirements: *809550
81
+ - !ruby/object:Gem::Dependency
82
+ name: rspec
83
+ requirement: &809070 !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ~>
87
+ - !ruby/object:Gem::Version
88
+ version: 2.6.0
78
89
  type: :development
79
90
  prerelease: false
80
- version_requirements: *3899350
91
+ version_requirements: *809070
81
92
  description: Cálculo de frete utilizando o Web Service dos Correios (http://www.correios.com.br/webservices).
82
- Os serviços de frete suportados são PAC, SEDEX, SEDEX a Cobrar (necessário informar
83
- o valor declarado), SEDEX 10, SEDEX Hoje e e-SEDEX. Para os serviços com contrato
84
- é necessário informar código de empresa e senha.
93
+ Os serviços de frete suportados são PAC, SEDEX, SEDEX a Cobrar, SEDEX 10, SEDEX
94
+ Hoje e e-SEDEX.
85
95
  email: prodis@gmail.com
86
96
  executables: []
87
97
  extensions: []
@@ -111,6 +121,9 @@ files:
111
121
  - spec/correios/frete/web_service_spec.rb
112
122
  - spec/correios/frete_spec.rb
113
123
  - spec/spec_helper.rb
124
+ - spec/support/fake_request.rb
125
+ - spec/support/responses/success-response-many-services.xml
126
+ - spec/support/responses/success-response-one-service.xml
114
127
  has_rdoc: true
115
128
  homepage: http://prodis.blog.br/2011/07/03/gem-para-calculo-de-frete-dos-correios
116
129
  licenses: