correios 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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