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.
- data/CHANGELOG.rdoc +14 -11
- data/Gemfile +5 -4
- data/Gemfile.lock +9 -7
- data/README.rdoc +1 -0
- data/Rakefile +1 -1
- data/correios-frete.gemspec +22 -16
- data/lib/correios/frete/calculador.rb +19 -16
- data/lib/correios/frete/servico.rb +16 -16
- data/lib/correios/frete/version.rb +2 -2
- data/lib/correios/frete/web_service.rb +7 -3
- data/spec/correios/frete/calculador_spec.rb +24 -27
- data/spec/correios/frete/servico_spec.rb +1 -1
- data/spec/correios/frete/web_service_spec.rb +5 -40
- data/spec/spec_helper.rb +3 -1
- data/spec/support/fake_request.rb +17 -0
- data/spec/support/responses/success-response-many-services.xml +1 -0
- data/spec/support/responses/success-response-one-service.xml +1 -0
- metadata +37 -24
data/CHANGELOG.rdoc
CHANGED
@@ -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.
|
5
|
-
gem "sax-machine", "~> 0.0.
|
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 "
|
9
|
+
gem "fakeweb", "~> 1.3.0"
|
10
|
+
gem "jeweler", "~> 1.6.4"
|
11
|
+
gem "rspec", "~> 2.6.0"
|
11
12
|
end
|
data/Gemfile.lock
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
-
diff-lcs (1.1.
|
4
|
+
diff-lcs (1.1.3)
|
5
|
+
fakeweb (1.3.0)
|
5
6
|
git (1.2.5)
|
6
|
-
jeweler (1.6.
|
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.
|
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.
|
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
|
-
|
30
|
+
fakeweb (~> 1.3.0)
|
31
|
+
jeweler (~> 1.6.4)
|
30
32
|
log-me (~> 0.0.2)
|
31
|
-
nokogiri (~> 1.4.
|
33
|
+
nokogiri (~> 1.4.7)
|
32
34
|
rspec (~> 2.6.0)
|
33
|
-
sax-machine (~> 0.0.
|
35
|
+
sax-machine (~> 0.0.20)
|
data/README.rdoc
CHANGED
@@ -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
|
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
|
data/correios-frete.gemspec
CHANGED
@@ -5,12 +5,12 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{correios-frete}
|
8
|
-
s.version = "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-
|
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
|
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.
|
56
|
-
s.add_runtime_dependency(%q<sax-machine>, ["~> 0.0.
|
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<
|
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.
|
63
|
-
s.add_dependency(%q<sax-machine>, ["~> 0.0.
|
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<
|
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.
|
71
|
-
s.add_dependency(%q<sax-machine>, ["~> 0.0.
|
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<
|
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
|
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
|
11
|
-
"41068" => { :type => :pac_com_contrato
|
12
|
-
"40010" => { :type => :sedex
|
13
|
-
"40045" => { :type => :sedex_a_cobrar
|
14
|
-
"40126" => { :type => :sedex_a_cobrar_com_contrato
|
15
|
-
"40215" => { :type => :sedex_10
|
16
|
-
"40290" => { :type => :sedex_hoje
|
17
|
-
"40096" => { :type => :sedex_com_contrato_1
|
18
|
-
"40436" => { :type => :sedex_com_contrato_2
|
19
|
-
"40444" => { :type => :sedex_com_contrato_3
|
20
|
-
"40568" => { :type => :sedex_com_contrato_4
|
21
|
-
"40606" => { :type => :sedex_com_contrato_5
|
22
|
-
"81019" => { :type => :e_sedex
|
23
|
-
"81868" => { :type => :e_sedex_grupo_1
|
24
|
-
"81833" => { :type => :e_sedex_grupo_2
|
25
|
-
"81850" => { :type => :e_sedex_grupo_3
|
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
|
@@ -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
|
12
|
+
def initialize(frete, service_types)
|
13
13
|
@url = "#{URL}?#{params_for(frete, service_types)}"
|
14
|
-
|
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
|
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
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
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
|
-
|
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
|
-
|
70
|
-
|
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 ==
|
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
|
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 ==
|
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
|
-
|
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
|
-
|
103
|
-
|
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
|
@@ -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
|
-
|
16
|
+
fake_request_for("<xml><fake></fake>")
|
17
|
+
webservice.request!.should == "<xml><fake></fake>"
|
53
18
|
end
|
54
19
|
end
|
55
20
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -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.
|
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-
|
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: &
|
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: *
|
25
|
+
version_requirements: *812990
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: nokogiri
|
28
|
-
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.
|
33
|
+
version: 1.4.7
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *812300
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: sax-machine
|
39
|
-
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.
|
44
|
+
version: 0.0.20
|
45
45
|
type: :runtime
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *811480
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
|
-
name:
|
50
|
-
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:
|
55
|
+
version: 1.0.0
|
56
56
|
type: :development
|
57
57
|
prerelease: false
|
58
|
-
version_requirements: *
|
58
|
+
version_requirements: *810950
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
|
-
name:
|
61
|
-
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.
|
66
|
+
version: 1.3.0
|
67
67
|
type: :development
|
68
68
|
prerelease: false
|
69
|
-
version_requirements: *
|
69
|
+
version_requirements: *810220
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: jeweler
|
72
|
-
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.
|
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: *
|
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
|
83
|
-
|
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:
|