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.
@@ -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