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 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
+