frete_correios 0.2.7.1 → 0.2.7.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "frete_correios"
3
- s.version = "0.2.7.1"
3
+ s.version = "0.2.7.2"
4
4
  s.author = "Bruno Diniz"
5
5
  s.email = "contato@brdiniz.com"
6
6
  s.homepage = "https://github.com/Brdiniz/frete_correios"
@@ -1,204 +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
1
+ module Correios
2
+ class Frete
3
+ require "rexml/document"
4
+ require "open-uri"
5
+ require "servico"
6
+ include REXML
91
7
 
92
- def cep_destino=(co)
93
- @cep_destino = co
94
- end
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
- def cep_destino
97
- return @cep_destino
98
- end
25
+ def codigo_mao_de_obra
26
+ @codigo_mao_de_obra
27
+ end
99
28
 
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
29
+ def codigo_mao_de_obra=(cmo)
30
+ @codigo_mao_de_obra=cmo
31
+ end
115
32
 
116
- def peso
117
- return @peso
118
- end
33
+ def diametro=(d)
34
+ @diametro=d
35
+ end
119
36
 
120
- def peso=(c)
121
- @peso = c
122
- end
37
+ def diametro
38
+ return @diametro
39
+ end
123
40
 
124
- def comprimento
125
- return @comprimento
126
- end
41
+ def valor_declarado=(v)
42
+ @valor_declarado=v
43
+ end
127
44
 
128
- def comprimento=(c)
129
- @comprimento = c
130
- end
45
+ def valor_declarado
46
+ return @valor_declarado
47
+ end
131
48
 
132
- def altura
133
- return @altura
134
- end
49
+ def codigo_aviso_recebimento=(cav)
50
+ @codigo_aviso_recebimento=cav
51
+ end
135
52
 
136
- def altura=(c)
137
- @altura = c
138
- end
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
- 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
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
@@ -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
@@ -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
@@ -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: 65
5
- prerelease: false
4
+ hash: 71
5
+ prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
9
  - 7
10
- - 1
11
- version: 0.2.7.1
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-08 00:00:00 -02:00
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.3.7
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