correios 0.2.0 → 0.3.0

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.
Files changed (5) hide show
  1. data/README.rdoc +10 -11
  2. data/Rakefile +1 -1
  3. data/correios.gemspec +1 -1
  4. data/lib/correios.rb +34 -19
  5. metadata +3 -3
data/README.rdoc CHANGED
@@ -9,23 +9,23 @@ Gem para cálculo de frete usando o e rastreamento dos correios usando webservic
9
9
  == Como Usar
10
10
 
11
11
  require 'correios'
12
-
13
- begin
14
- correios = Correios.new(76410000, 74932180)
15
- correios.calcula_frete(Correios::Servico::PAC, 0.4, 17, 16,16,16)
16
- rescue Correios::InvalidCalcException => e
17
- puts e.message
18
- end
19
12
 
20
- Em caso de algum dado inválido será levantada a exception:
13
+ # Para calcular apenas um serviço
14
+ correios = Correios.new(76410000, 74932180)
15
+ correios.calcular_frete(Correios::Servico::PAC, 0.4, 17, 16,16,16)
16
+
21
17
 
22
- Correios::InvalidCalcException
18
+ # Para calcular mais de um serviço
19
+ #Neste caso o retorno será um array.
20
+ correios = Correios.new(76410000, 74932180)
21
+ correios.calcular_frete([Correios::Servico::PAC, Correios::Servico::SEDEX], 0.4, 17, 16,16,16)
23
22
 
23
+
24
24
  == Outras informações
25
25
 
26
26
  Definição do método calcula frete:
27
27
 
28
- calcula_frete(tipo, peso, comprimento,
28
+ calcular_frete(tipo, peso, comprimento,
29
29
  altura, largura, diametro, mao_propria = NAO,
30
30
  valor_declarado = 0, aviso_recebimento = NAO)
31
31
 
@@ -37,7 +37,6 @@ Gem para cálculo de frete usando o e rastreamento dos correios usando webservic
37
37
  Correios::Servico::SEDEX10
38
38
  Correios::Servico::SEDEX_HOJE
39
39
  Correios::Servico::ESEDEX
40
- Correios::Servico::MALOTE
41
40
 
42
41
  == Contato
43
42
 
data/Rakefile CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
  require 'rake'
3
3
  require 'echoe'
4
4
 
5
- Echoe.new('correios', '0.2.0') do |p|
5
+ Echoe.new('correios', '0.3.0') do |p|
6
6
  p.description = "Gem para calculo de valor e restreamento dos correios"
7
7
  p.url = "https://github.com/brunofrank/correios"
8
8
  p.author = "Bruno Frank"
data/correios.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{correios}
5
- s.version = "0.2.0"
5
+ s.version = "0.3.0"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Bruno Frank"]
data/lib/correios.rb CHANGED
@@ -3,21 +3,34 @@ require 'xmlsimple'
3
3
 
4
4
  class Correios
5
5
 
6
- class InvalidCalcException < Exception
7
- attr_reader :message
8
-
9
- def initialize(message)
10
- @message = message
11
- end
12
- end
13
-
14
- class Servico
6
+ class Servico
15
7
  PAC = 41106
16
8
  SEDEX = 40010
17
9
  SEDEX10 = 40215
18
10
  SEDEX_HOJE = 40290
19
11
  ESEDEX = 81019
20
- MALOTE = 44105
12
+
13
+ SERVICOS = {
14
+ 41106 => :pac,
15
+ 40010 => :sedex,
16
+ 40215 => :sedex10,
17
+ 40290 => :sedex_hoje,
18
+ 81019 => :esedex
19
+ }
20
+
21
+ attr_reader :servico, :valor, :prazo, :erro, :message
22
+
23
+ def initialize(servico)
24
+ @servico = SERVICOS[servico["Codigo"].to_s.to_i]
25
+ @valor = servico["Valor"].to_s.gsub(',', '.').to_f
26
+ @prazo = servico["PrazoEntrega"].to_s.to_i
27
+ @erro = servico["Erro"].to_s
28
+ @message = servico["MsgErro"].to_s
29
+ end
30
+
31
+ def valid?
32
+ @erro == '0'
33
+ end
21
34
  end
22
35
 
23
36
  SIM = 'S'
@@ -28,7 +41,7 @@ class Correios
28
41
  @cep_destino = cep_destino
29
42
  end
30
43
 
31
- def calcula_frete(tipo, peso, comprimento, altura, largura, diametro, mao_propria = NAO,
44
+ def calcular_frete(servicos, peso, comprimento, altura, largura, diametro, mao_propria = NAO,
32
45
  valor_declarado = 0, aviso_recebimento = NAO)
33
46
  host = 'http://ws.correios.com.br'
34
47
  path = '/calculador/CalcPrecoPrazo.aspx'
@@ -37,7 +50,7 @@ class Correios
37
50
  :nCdEmpresa => '',
38
51
  :sDsSenha => '',
39
52
  :StrRetorno => "xml",
40
- :nCdServico => tipo,
53
+ :nCdServico => servicos.to_a.join(','),
41
54
  :sCepOrigem => @cep_origem,
42
55
  :sCepDestino => @cep_destino,
43
56
  :nVlPeso => peso,
@@ -48,20 +61,22 @@ class Correios
48
61
  :nVlDiametro => diametro,
49
62
  :sCdMaoPropria => mao_propria,
50
63
  :nVlValorDeclarado => valor_declarado,
51
- :resposta => "Xml",
52
64
  :sCdAvisoRecebimento => aviso_recebimento
53
65
  }
54
66
 
55
67
  params = params.to_a.map {|item| item.to_a.join('=')} .join('&')
56
68
 
57
69
  xml = XmlSimple.xml_in(open("#{host}#{path}?#{params}").read)
58
- if xml["cServico"].first["Erro"].first == '0'
59
- {
60
- :valor => xml['cServico'].first["Valor"].to_s.gsub(',', '.').to_f,
61
- :prazo => xml['cServico'].first["PrazoEntrega"].to_s.to_i
62
- }
70
+
71
+ if xml["cServico"].size > 1
72
+ servicos = []
73
+ xml["cServico"].each do |servico|
74
+ servicos << Servico.new(servico)
75
+ end
63
76
  else
64
- raise InvalidCalcException, xml["cServico"].first["MsgErro"].first
77
+ servicos = Servico.new(xml["cServico"].first)
65
78
  end
79
+
80
+ return servicos
66
81
  end
67
82
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: correios
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 19
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 2
8
+ - 3
9
9
  - 0
10
- version: 0.2.0
10
+ version: 0.3.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Bruno Frank