frete_correios 0.1

Sign up to get free protection for your applications and to get access to all the features.
data/init.rb ADDED
@@ -0,0 +1,2 @@
1
+ require 'frete'
2
+ require 'servico'
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
@@ -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
+