correios-frete 0.1.0 → 0.2.0
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.
- data/README.rdoc +4 -3
- data/correios-frete.gemspec +2 -2
- data/lib/correios/frete.rb +3 -0
- data/lib/correios/frete/servico.rb +18 -7
- data/lib/correios/frete/version.rb +1 -1
- data/lib/correios/frete/web_service.rb +3 -3
- data/spec/correios/frete/servico_spec.rb +19 -0
- data/spec/correios/frete/web_service_spec.rb +16 -14
- data/spec/correios/frete_spec.rb +2 -0
- metadata +3 -3
data/README.rdoc
CHANGED
@@ -60,6 +60,7 @@ Cálculo de frete utilizando o Web Service dos Correios (http://www.correios.com
|
|
60
60
|
:sedex
|
61
61
|
:sedex_10
|
62
62
|
:sedex_hoje
|
63
|
+
:e_sedex
|
63
64
|
|
64
65
|
|
65
66
|
=== Maneiras de configurar atributos no construtor de Correios::Frete
|
@@ -86,7 +87,7 @@ Cálculo de frete utilizando o Web Service dos Correios (http://www.correios.com
|
|
86
87
|
=== Atributos de Correios::Frete
|
87
88
|
|
88
89
|
==== String
|
89
|
-
cep_origem, cep_destino
|
90
|
+
cep_origem, cep_destino, codigo_empresa, senha
|
90
91
|
==== Float
|
91
92
|
peso, valor_declarado
|
92
93
|
==== Fixnum
|
@@ -100,7 +101,7 @@ Cálculo de frete utilizando o Web Service dos Correios (http://www.correios.com
|
|
100
101
|
=== Atributos de Correios::Frete::Servico
|
101
102
|
|
102
103
|
==== String
|
103
|
-
codigo, erro, msg_erro
|
104
|
+
codigo, erro, msg_erro, nome
|
104
105
|
==== Float
|
105
106
|
valor, valor_mao_propria, valor_aviso_recebimento, valor_valor_declarado
|
106
107
|
==== Fixnum
|
@@ -108,7 +109,7 @@ Cálculo de frete utilizando o Web Service dos Correios (http://www.correios.com
|
|
108
109
|
==== Boolean
|
109
110
|
entrega_domiciliar, entrega_sabado
|
110
111
|
==== Symbol
|
111
|
-
tipo (:pac, :sedex, :sedex_10, :sedex_hoje)
|
112
|
+
tipo (:pac, :sedex, :sedex_10, :sedex_hoje, :e_sedex)
|
112
113
|
|
113
114
|
== Copyright
|
114
115
|
|
data/correios-frete.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{correios-frete}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.2.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 de Amorim"]
|
12
|
-
s.date = %q{2011-07-
|
12
|
+
s.date = %q{2011-07-19}
|
13
13
|
s.description = %q{Cálculo de frete dos Correios.}
|
14
14
|
s.email = %q{prodis@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
data/lib/correios/frete.rb
CHANGED
@@ -4,6 +4,7 @@ module Correios
|
|
4
4
|
attr_accessor :cep_origem, :cep_destino
|
5
5
|
attr_accessor :peso, :comprimento, :altura, :largura, :diametro
|
6
6
|
attr_accessor :formato, :mao_propria, :aviso_recebimento, :valor_declarado
|
7
|
+
attr_accessor :codigo_empresa, :senha
|
7
8
|
attr_writer :web_service, :parser
|
8
9
|
|
9
10
|
DEFAULT_OPTIONS = {
|
@@ -44,5 +45,7 @@ module Correios
|
|
44
45
|
services
|
45
46
|
end
|
46
47
|
end
|
48
|
+
|
49
|
+
alias calculate calcular
|
47
50
|
end
|
48
51
|
end
|
@@ -4,11 +4,12 @@ require 'sax-machine'
|
|
4
4
|
class Correios::Frete::Servico
|
5
5
|
include SAXMachine
|
6
6
|
|
7
|
-
|
8
|
-
:pac => "
|
9
|
-
:sedex => "
|
10
|
-
:sedex_10 => "
|
11
|
-
:sedex_hoje => "
|
7
|
+
AVAILABLE_SERVICES = {
|
8
|
+
"41106" => { :type => :pac , :name => "PAC" },
|
9
|
+
"40010" => { :type => :sedex , :name => "Sedex" },
|
10
|
+
"40215" => { :type => :sedex_10 , :name => "Sedex 10" },
|
11
|
+
"40290" => { :type => :sedex_hoje, :name => "Sedex Hoje" },
|
12
|
+
"81019" => { :type => :e_sedex , :name => "e-Sedex" }
|
12
13
|
}
|
13
14
|
|
14
15
|
element :Codigo, :as => :codigo
|
@@ -21,13 +22,18 @@ class Correios::Frete::Servico
|
|
21
22
|
element :EntregaSabado, :as => :entrega_sabado
|
22
23
|
element :Erro, :as => :erro
|
23
24
|
element :MsgErro, :as => :msg_erro
|
24
|
-
attr_reader :tipo
|
25
|
+
attr_reader :tipo, :nome
|
25
26
|
|
26
27
|
alias_method :original_parse, :parse
|
27
28
|
|
28
29
|
def parse(xml_text)
|
29
30
|
original_parse xml_text
|
30
|
-
|
31
|
+
|
32
|
+
if AVAILABLE_SERVICES[codigo]
|
33
|
+
@tipo = AVAILABLE_SERVICES[codigo][:type]
|
34
|
+
@nome = AVAILABLE_SERVICES[codigo][:name]
|
35
|
+
end
|
36
|
+
|
31
37
|
cast_to_float! :valor, :valor_mao_propria, :valor_aviso_recebimento, :valor_valor_declarado
|
32
38
|
cast_to_int! :prazo_entrega
|
33
39
|
cast_to_boolean! :entrega_domiciliar, :entrega_sabado
|
@@ -42,6 +48,11 @@ class Correios::Frete::Servico
|
|
42
48
|
!success?
|
43
49
|
end
|
44
50
|
|
51
|
+
def self.code_from_type(type)
|
52
|
+
# I don't use select method for Ruby 1.8.7 compatibility.
|
53
|
+
AVAILABLE_SERVICES.map { |key, value| key if value[:type] == type }.compact.first
|
54
|
+
end
|
55
|
+
|
45
56
|
private
|
46
57
|
|
47
58
|
def cast_to_float!(*attributes)
|
@@ -26,12 +26,12 @@ class Correios::Frete::WebService
|
|
26
26
|
"sCdAvisoRecebimento=#{CONDITIONS[frete.aviso_recebimento]}&" +
|
27
27
|
"nVlValorDeclarado=#{frete.valor_declarado}&" +
|
28
28
|
"nCdServico=#{service_codes_for(service_types)}&" +
|
29
|
-
"nCdEmpresa
|
30
|
-
"sDsSenha
|
29
|
+
"nCdEmpresa=#{frete.codigo_empresa}&" +
|
30
|
+
"sDsSenha=#{frete.senha}&" +
|
31
31
|
"StrRetorno=xml"
|
32
32
|
end
|
33
33
|
|
34
34
|
def service_codes_for(service_types)
|
35
|
-
service_types.map { |type| Correios::Frete::Servico
|
35
|
+
service_types.map { |type| Correios::Frete::Servico.code_from_type(type) }.join(",")
|
36
36
|
end
|
37
37
|
end
|
@@ -22,6 +22,7 @@ describe Correios::Frete::Servico do
|
|
22
22
|
end
|
23
23
|
|
24
24
|
{ :tipo => :pac,
|
25
|
+
:nome => "PAC",
|
25
26
|
:codigo => "41106",
|
26
27
|
:valor => 15.70,
|
27
28
|
:prazo_entrega => 3,
|
@@ -57,6 +58,7 @@ describe Correios::Frete::Servico do
|
|
57
58
|
end
|
58
59
|
|
59
60
|
{ :tipo => nil,
|
61
|
+
:nome => nil,
|
60
62
|
:codigo => "99999",
|
61
63
|
:valor => 0.0,
|
62
64
|
:prazo_entrega => 0,
|
@@ -92,6 +94,7 @@ describe Correios::Frete::Servico do
|
|
92
94
|
end
|
93
95
|
|
94
96
|
{ :tipo => nil,
|
97
|
+
:nome => nil,
|
95
98
|
:codigo => nil,
|
96
99
|
:valor => 0.0,
|
97
100
|
:prazo_entrega => 0,
|
@@ -142,4 +145,20 @@ describe Correios::Frete::Servico do
|
|
142
145
|
end
|
143
146
|
end
|
144
147
|
end
|
148
|
+
|
149
|
+
describe ".code_from_type" do
|
150
|
+
Correios::Frete::Servico::AVAILABLE_SERVICES.each do |code, value|
|
151
|
+
context "to #{value[:type]} type" do
|
152
|
+
it "returns #{code} code" do
|
153
|
+
Correios::Frete::Servico.code_from_type(value[:type]).should == code
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
context "when type does not exist" do
|
159
|
+
it "returns nil" do
|
160
|
+
Correios::Frete::Servico.code_from_type(:nao_existe).should be_nil
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
145
164
|
end
|
@@ -4,20 +4,22 @@ require 'spec_helper'
|
|
4
4
|
describe Correios::Frete::WebService do
|
5
5
|
describe "#request" do
|
6
6
|
before :each do
|
7
|
-
@frete = Correios::Frete.new :cep_origem => "01000-000",
|
7
|
+
@frete = Correios::Frete.new :cep_origem => "01000-000",
|
8
8
|
:cep_destino => "021222-222",
|
9
|
-
:peso => 0.321,
|
10
|
-
:comprimento => 12.5,
|
11
|
-
:altura => 1.4,
|
12
|
-
:largura => 4.6,
|
9
|
+
:peso => 0.321,
|
10
|
+
:comprimento => 12.5,
|
11
|
+
:altura => 1.4,
|
12
|
+
:largura => 4.6,
|
13
13
|
:diametro => 5.0,
|
14
|
-
:formato => :rolo_prisma,
|
15
|
-
:mao_propria => true,
|
16
|
-
:aviso_recebimento => false,
|
17
|
-
:valor_declarado => 1.99
|
18
|
-
|
19
|
-
|
20
|
-
|
14
|
+
:formato => :rolo_prisma,
|
15
|
+
:mao_propria => true,
|
16
|
+
:aviso_recebimento => false,
|
17
|
+
:valor_declarado => 1.99,
|
18
|
+
:codigo_empresa => "1234567890",
|
19
|
+
:senha => "senha"
|
20
|
+
url = "http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx?" +
|
21
|
+
"sCepOrigem=01000-000&" +
|
22
|
+
"sCepDestino=021222-222&" +
|
21
23
|
"nVlPeso=0.321&" +
|
22
24
|
"nVlComprimento=12.5&" +
|
23
25
|
"nVlAltura=1.4&" +
|
@@ -28,8 +30,8 @@ describe Correios::Frete::WebService do
|
|
28
30
|
"sCdAvisoRecebimento=N&" +
|
29
31
|
"nVlValorDeclarado=1.99&" +
|
30
32
|
"nCdServico=41106,40010&" +
|
31
|
-
"nCdEmpresa
|
32
|
-
"sDsSenha
|
33
|
+
"nCdEmpresa=1234567890&" +
|
34
|
+
"sDsSenha=senha&" +
|
33
35
|
"StrRetorno=xml"
|
34
36
|
Net::HTTP.stub(:get).with(URI.parse(url)).and_return("<xml><fake></fake>")
|
35
37
|
@web_service = Correios::Frete::WebService.new
|
data/spec/correios/frete_spec.rb
CHANGED
@@ -33,6 +33,8 @@ describe Correios::Frete do
|
|
33
33
|
:mao_propria => true,
|
34
34
|
:aviso_recebimento => true,
|
35
35
|
:valor_declarado => 1.99,
|
36
|
+
:codigo_empresa => "1234567890",
|
37
|
+
:senha => "senha",
|
36
38
|
:web_service => Correios::Frete::WebService.new,
|
37
39
|
:parser => Correios::Frete::Parser.new
|
38
40
|
}.each do |attr, value|
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: correios-frete
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.
|
5
|
+
version: 0.2.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Prodis a.k.a. Fernando Hamasaki de Amorim
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-07-
|
13
|
+
date: 2011-07-19 00:00:00 -03:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -109,7 +109,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
109
109
|
requirements:
|
110
110
|
- - ">="
|
111
111
|
- !ruby/object:Gem::Version
|
112
|
-
hash: -
|
112
|
+
hash: -383480031
|
113
113
|
segments:
|
114
114
|
- 0
|
115
115
|
version: "0"
|