correios-frete 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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"
|