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