frete_correios 0.2.7.1 → 0.2.7.2
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/frete_correios.gemspec +1 -1
- data/lib/frete.rb +192 -192
- data/lib/servico.rb +7 -0
- data/spec/frete_spec.rb +40 -2
- data/spec/servico_spec.rb +4 -0
- metadata +6 -6
data/frete_correios.gemspec
CHANGED
data/lib/frete.rb
CHANGED
@@ -1,204 +1,204 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
def initialize(options = {})
|
8
|
-
# 41106 PAC sem contrato
|
9
|
-
# 40010 SEDEX sem contrato
|
10
|
-
# 40215 SEDEX 10, sem contrato
|
11
|
-
# 40290 SEDEX Hoje, sem contrato
|
12
|
-
self.codigo_empresa = options[:codigo_empresa]
|
13
|
-
self.senha_empresa = options[:senha_empresa]
|
14
|
-
self.codigo_servico = options[:codigo_servico]
|
15
|
-
self.cep_origem = options[:cep_origem]
|
16
|
-
self.cep_destino = options[:cep_destino]
|
17
|
-
self.peso = options[:peso]
|
18
|
-
self.codigo_formato = options[:codigo_formato]
|
19
|
-
self.comprimento = options[:comprimento]
|
20
|
-
self.altura = options[:altura]
|
21
|
-
self.largura = options[:largura]
|
22
|
-
self.codigo_mao_de_obra = options[:codigo_mao_de_obra]
|
23
|
-
self.diametro = options[:diametro]
|
24
|
-
self.valor_declarado = options[:valor_declarado]
|
25
|
-
self.codigo_aviso_recebimento = options[:codigo_aviso_recebimento]
|
26
|
-
end
|
27
|
-
|
28
|
-
def codigo_mao_de_obra
|
29
|
-
@codigo_mao_de_obra
|
30
|
-
end
|
31
|
-
|
32
|
-
def codigo_mao_de_obra=(cmo)
|
33
|
-
@codigo_mao_de_obra=cmo
|
34
|
-
end
|
35
|
-
|
36
|
-
def diametro=(d)
|
37
|
-
@diametro=d
|
38
|
-
end
|
39
|
-
|
40
|
-
def diametro
|
41
|
-
return @diametro
|
42
|
-
end
|
43
|
-
|
44
|
-
def valor_declarado=(v)
|
45
|
-
@valor_declarado=v
|
46
|
-
end
|
47
|
-
|
48
|
-
def valor_declarado
|
49
|
-
return @valor_declarado
|
50
|
-
end
|
51
|
-
|
52
|
-
def codigo_aviso_recebimento=(cav)
|
53
|
-
@codigo_aviso_recebimento=cav
|
54
|
-
end
|
55
|
-
|
56
|
-
def codigo_aviso_recebimento
|
57
|
-
return @codigo_aviso_recebimento
|
58
|
-
end
|
59
|
-
|
60
|
-
def codigo_empresa=(c)
|
61
|
-
@codigo_empresa=c
|
62
|
-
end
|
63
|
-
|
64
|
-
def codigo_empresa
|
65
|
-
return @codigo_empresa
|
66
|
-
end
|
67
|
-
|
68
|
-
def senha_empresa=(c)
|
69
|
-
@senha_empresa=c
|
70
|
-
end
|
71
|
-
|
72
|
-
def senha_empresa
|
73
|
-
return @senha_empresa
|
74
|
-
end
|
75
|
-
|
76
|
-
def codigo_servico=(c)
|
77
|
-
@codigo_servico=c
|
78
|
-
end
|
79
|
-
|
80
|
-
def codigo_servico
|
81
|
-
return @codigo_servico
|
82
|
-
end
|
83
|
-
|
84
|
-
def cep_origem=(co)
|
85
|
-
@cep_origem = co
|
86
|
-
end
|
87
|
-
|
88
|
-
def cep_origem
|
89
|
-
return @cep_origem
|
90
|
-
end
|
1
|
+
module Correios
|
2
|
+
class Frete
|
3
|
+
require "rexml/document"
|
4
|
+
require "open-uri"
|
5
|
+
require "servico"
|
6
|
+
include REXML
|
91
7
|
|
92
|
-
|
93
|
-
|
94
|
-
|
8
|
+
def initialize(options = {})
|
9
|
+
self.codigo_empresa = options[:codigo_empresa]
|
10
|
+
self.senha_empresa = options[:senha_empresa]
|
11
|
+
self.codigo_servico = options[:codigo_servico]
|
12
|
+
self.cep_origem = options[:cep_origem]
|
13
|
+
self.cep_destino = options[:cep_destino]
|
14
|
+
self.peso = options[:peso]
|
15
|
+
self.codigo_formato = options[:codigo_formato]
|
16
|
+
self.comprimento = options[:comprimento]
|
17
|
+
self.altura = options[:altura]
|
18
|
+
self.largura = options[:largura]
|
19
|
+
self.codigo_mao_de_obra = options[:codigo_mao_de_obra]
|
20
|
+
self.diametro = options[:diametro]
|
21
|
+
self.valor_declarado = options[:valor_declarado]
|
22
|
+
self.codigo_aviso_recebimento = options[:codigo_aviso_recebimento]
|
23
|
+
end
|
95
24
|
|
96
|
-
|
97
|
-
|
98
|
-
|
25
|
+
def codigo_mao_de_obra
|
26
|
+
@codigo_mao_de_obra
|
27
|
+
end
|
99
28
|
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
def codigo_formato
|
105
|
-
return @codigo_formato
|
106
|
-
end
|
107
|
-
|
108
|
-
def cep=(c)
|
109
|
-
@cep = c
|
110
|
-
end
|
111
|
-
|
112
|
-
def cep
|
113
|
-
return @cep
|
114
|
-
end
|
29
|
+
def codigo_mao_de_obra=(cmo)
|
30
|
+
@codigo_mao_de_obra=cmo
|
31
|
+
end
|
115
32
|
|
116
|
-
|
117
|
-
|
118
|
-
|
33
|
+
def diametro=(d)
|
34
|
+
@diametro=d
|
35
|
+
end
|
119
36
|
|
120
|
-
|
121
|
-
|
122
|
-
|
37
|
+
def diametro
|
38
|
+
return @diametro
|
39
|
+
end
|
123
40
|
|
124
|
-
|
125
|
-
|
126
|
-
|
41
|
+
def valor_declarado=(v)
|
42
|
+
@valor_declarado=v
|
43
|
+
end
|
127
44
|
|
128
|
-
|
129
|
-
|
130
|
-
|
45
|
+
def valor_declarado
|
46
|
+
return @valor_declarado
|
47
|
+
end
|
131
48
|
|
132
|
-
|
133
|
-
|
134
|
-
|
49
|
+
def codigo_aviso_recebimento=(cav)
|
50
|
+
@codigo_aviso_recebimento=cav
|
51
|
+
end
|
135
52
|
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
def largura=(l)
|
141
|
-
@largura = l
|
142
|
-
end
|
53
|
+
def codigo_aviso_recebimento
|
54
|
+
return @codigo_aviso_recebimento
|
55
|
+
end
|
143
56
|
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
57
|
+
def codigo_empresa=(c)
|
58
|
+
@codigo_empresa=c
|
59
|
+
end
|
60
|
+
|
61
|
+
def codigo_empresa
|
62
|
+
return @codigo_empresa
|
63
|
+
end
|
64
|
+
|
65
|
+
def senha_empresa=(c)
|
66
|
+
@senha_empresa=c
|
67
|
+
end
|
68
|
+
|
69
|
+
def senha_empresa
|
70
|
+
return @senha_empresa
|
71
|
+
end
|
72
|
+
|
73
|
+
def codigo_servico=(c)
|
74
|
+
@codigo_servico=c
|
75
|
+
end
|
76
|
+
|
77
|
+
def codigo_servico
|
78
|
+
return @codigo_servico
|
79
|
+
end
|
80
|
+
|
81
|
+
def cep_origem=(co)
|
82
|
+
@cep_origem = co
|
83
|
+
end
|
84
|
+
|
85
|
+
def cep_origem
|
86
|
+
return @cep_origem
|
87
|
+
end
|
88
|
+
|
89
|
+
def cep_destino=(co)
|
90
|
+
@cep_destino = co
|
91
|
+
end
|
92
|
+
|
93
|
+
def cep_destino
|
94
|
+
return @cep_destino
|
95
|
+
end
|
96
|
+
|
97
|
+
def codigo_formato=(c)
|
98
|
+
@codigo_formato=c
|
99
|
+
end
|
100
|
+
|
101
|
+
def codigo_formato
|
102
|
+
return @codigo_formato
|
103
|
+
end
|
104
|
+
|
105
|
+
def cep=(c)
|
106
|
+
@cep = c
|
107
|
+
end
|
108
|
+
|
109
|
+
def cep
|
110
|
+
return @cep
|
111
|
+
end
|
112
|
+
|
113
|
+
def peso
|
114
|
+
return @peso
|
115
|
+
end
|
116
|
+
|
117
|
+
def peso=(c)
|
118
|
+
@peso = c
|
119
|
+
end
|
120
|
+
|
121
|
+
def comprimento
|
122
|
+
return @comprimento
|
123
|
+
end
|
124
|
+
|
125
|
+
def comprimento=(c)
|
126
|
+
@comprimento = c
|
127
|
+
end
|
128
|
+
|
129
|
+
def altura
|
130
|
+
return @altura
|
131
|
+
end
|
132
|
+
|
133
|
+
def altura=(c)
|
134
|
+
@altura = c
|
135
|
+
end
|
136
|
+
|
137
|
+
def largura=(l)
|
138
|
+
@largura = l
|
139
|
+
end
|
140
|
+
|
141
|
+
def largura
|
142
|
+
return @largura
|
143
|
+
end
|
144
|
+
|
145
|
+
def servicos
|
146
|
+
@servicos = find
|
147
|
+
end
|
148
|
+
|
149
|
+
def servicos_to_json
|
150
|
+
json = "["
|
151
|
+
self.servicos.each do |servico|
|
152
|
+
json += servico.to_json
|
153
|
+
json += "," if @servicos.last != servico
|
154
|
+
end
|
155
|
+
json += "]"
|
156
|
+
end
|
157
|
+
|
158
|
+
def find
|
159
|
+
uri = "http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx?"
|
160
|
+
uri += "nCdEmpresa=" + @codigo_empresa
|
161
|
+
uri += "&sDsSenha=" + @senha_empresa
|
162
|
+
uri += "&sCepOrigem=" + @cep_origem
|
163
|
+
uri += "&sCepDestino=" + @cep_destino
|
164
|
+
uri += "&nVlPeso=" + @peso
|
165
|
+
uri += "&nCdFormato=" + @codigo_formato
|
166
|
+
uri += "&nVlComprimento=" + @comprimento
|
167
|
+
uri += "&nVlAltura=" + @altura
|
168
|
+
uri += "&nVlLargura=" + @largura
|
169
|
+
uri += "&sCdMaoPropria=s"
|
170
|
+
uri += "&nVlValorDeclarado=" + @valor_declarado
|
171
|
+
uri += "&sCdAvisoRecebimento=" + @codigo_aviso_recebimento
|
172
|
+
uri += "&nCdServico=" + @codigo_servico
|
173
|
+
uri += "&nVlDiametro=" + @diametro
|
174
|
+
uri += "&StrRetorno=xml"
|
175
|
+
|
176
|
+
source = open(uri).read
|
177
|
+
xml = Document.new(source).root
|
178
|
+
|
179
|
+
list = []
|
180
|
+
|
181
|
+
xml.elements.each("//Servicos/cServico") do |frete|
|
182
|
+
|
183
|
+
if frete.elements["Erro"].text == "0"
|
184
|
+
|
185
|
+
s = Servico.new(
|
186
|
+
:codigo => frete.elements["Codigo"].text,
|
187
|
+
:valor => frete.elements["Valor"].text,
|
188
|
+
:prazo_entrega => frete.elements["PrazoEntrega"].text,
|
189
|
+
:valor_mao_de_obra => frete.elements["ValorMaoPropria"].text,
|
190
|
+
:valor_aviso_recebimento => frete.elements["ValorAvisoRecebimento"].text,
|
191
|
+
:valor_declarado => frete.elements["ValorValorDeclarado"].text,
|
192
|
+
:entrega_domiciliar => frete.elements["EntregaDomiciliar"].text,
|
193
|
+
:entrega_sabado => frete.elements["EntregaSabado"].text,
|
194
|
+
:erro => frete.elements["Erro"].text,
|
195
|
+
:messagem_erro => frete.elements["MsgErro"].text)
|
196
|
+
|
197
|
+
list << s
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
return list
|
202
|
+
end
|
203
203
|
end
|
204
204
|
end
|
data/lib/servico.rb
CHANGED
@@ -21,6 +21,13 @@ class Servico
|
|
21
21
|
@codigo
|
22
22
|
end
|
23
23
|
|
24
|
+
def nome
|
25
|
+
return "PAC sem contrato" if self.codigo == "41106"
|
26
|
+
return "Sedex" if self.codigo == "40010"
|
27
|
+
return "Sedex 10" if self.codigo == "40215"
|
28
|
+
return "Sedex Hoje" if self.codigo == "40290"
|
29
|
+
end
|
30
|
+
|
24
31
|
def valor=(v)
|
25
32
|
@valor=v
|
26
33
|
end
|
data/spec/frete_spec.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
require 'frete'
|
2
2
|
|
3
|
-
describe Frete do
|
3
|
+
describe Correios::Frete do
|
4
4
|
|
5
5
|
before(:each) do
|
6
|
-
@f = Frete.new(:codigo_empresa => "",
|
6
|
+
@f = Correios::Frete.new(:codigo_empresa => "",
|
7
7
|
:senha_empresa => "",
|
8
8
|
:codigo_servico => "41106,40010,40215,40290",
|
9
9
|
:cep_origem => "01123001",
|
@@ -95,4 +95,42 @@ describe Frete do
|
|
95
95
|
|
96
96
|
@f.servicos_to_json.should == json
|
97
97
|
end
|
98
|
+
|
99
|
+
it "quando um pedido tem varios codigo e só retorna 1" do
|
100
|
+
f = Correios::Frete.new(:codigo_empresa => "",
|
101
|
+
:senha_empresa => "",
|
102
|
+
:codigo_servico => "41106,40010,40215,40290",
|
103
|
+
:cep_origem => "01123001",
|
104
|
+
:cep_destino => "67145250",
|
105
|
+
:peso => "10,00",
|
106
|
+
:codigo_formato => "1",
|
107
|
+
:comprimento => "60",
|
108
|
+
:altura => "5",
|
109
|
+
:largura => "60",
|
110
|
+
:diametro => "0",
|
111
|
+
:codigo_mao_de_obra => "s",
|
112
|
+
:valor_declarado => "1500",
|
113
|
+
:codigo_aviso_recebimento => "S")
|
114
|
+
|
115
|
+
f.servicos.size.should == 2
|
116
|
+
end
|
117
|
+
|
118
|
+
it "prazo de entrega ter que ser igual a 7 de acordo com informações passadas" do
|
119
|
+
f = Correios::Frete.new(:codigo_empresa => "",
|
120
|
+
:senha_empresa => "",
|
121
|
+
:codigo_servico => "41106",
|
122
|
+
:cep_origem => "01123001",
|
123
|
+
:cep_destino => "67145250",
|
124
|
+
:peso => "10,00",
|
125
|
+
:codigo_formato => "1",
|
126
|
+
:comprimento => "60",
|
127
|
+
:altura => "5",
|
128
|
+
:largura => "60",
|
129
|
+
:diametro => "0",
|
130
|
+
:codigo_mao_de_obra => "s",
|
131
|
+
:valor_declarado => "1500",
|
132
|
+
:codigo_aviso_recebimento => "S")
|
133
|
+
|
134
|
+
f.servicos.first.prazo_entrega.should == "7"
|
135
|
+
end
|
98
136
|
end
|
data/spec/servico_spec.rb
CHANGED
@@ -18,6 +18,10 @@ describe Servico do
|
|
18
18
|
it "posso ler o retorno do codigo" do
|
19
19
|
@s.codigo.should == "41106"
|
20
20
|
end
|
21
|
+
|
22
|
+
it "posso ler o nome do codigo" do
|
23
|
+
@s.nome.should == "PAC sem contrato"
|
24
|
+
end
|
21
25
|
|
22
26
|
it "posso ler o retorno do valor" do
|
23
27
|
@s.valor.should == "10,00"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: frete_correios
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 71
|
5
|
+
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
9
|
- 7
|
10
|
-
-
|
11
|
-
version: 0.2.7.
|
10
|
+
- 2
|
11
|
+
version: 0.2.7.2
|
12
12
|
platform: ruby
|
13
13
|
authors:
|
14
14
|
- Bruno Diniz
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2011-02-
|
19
|
+
date: 2011-02-17 00:00:00 -02:00
|
20
20
|
default_executable:
|
21
21
|
dependencies: []
|
22
22
|
|
@@ -66,7 +66,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
66
66
|
requirements: []
|
67
67
|
|
68
68
|
rubyforge_project:
|
69
|
-
rubygems_version: 1.
|
69
|
+
rubygems_version: 1.5.2
|
70
70
|
signing_key:
|
71
71
|
specification_version: 3
|
72
72
|
summary: Simples gem que retorna os valores de um frete diretamente da base dos correios
|