correios-frete 0.1.0 → 0.2.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.
@@ -60,6 +60,7 @@ Cálculo de frete utilizando o Web Service dos Correios (http://www.correios.com
60
60
  :sedex
61
61
  :sedex_10
62
62
  :sedex_hoje
63
+ :e_sedex
63
64
 
64
65
 
65
66
  === Maneiras de configurar atributos no construtor de Correios::Frete
@@ -86,7 +87,7 @@ Cálculo de frete utilizando o Web Service dos Correios (http://www.correios.com
86
87
  === Atributos de Correios::Frete
87
88
 
88
89
  ==== String
89
- cep_origem, cep_destino
90
+ cep_origem, cep_destino, codigo_empresa, senha
90
91
  ==== Float
91
92
  peso, valor_declarado
92
93
  ==== Fixnum
@@ -100,7 +101,7 @@ Cálculo de frete utilizando o Web Service dos Correios (http://www.correios.com
100
101
  === Atributos de Correios::Frete::Servico
101
102
 
102
103
  ==== String
103
- codigo, erro, msg_erro
104
+ codigo, erro, msg_erro, nome
104
105
  ==== Float
105
106
  valor, valor_mao_propria, valor_aviso_recebimento, valor_valor_declarado
106
107
  ==== Fixnum
@@ -108,7 +109,7 @@ Cálculo de frete utilizando o Web Service dos Correios (http://www.correios.com
108
109
  ==== Boolean
109
110
  entrega_domiciliar, entrega_sabado
110
111
  ==== Symbol
111
- tipo (:pac, :sedex, :sedex_10, :sedex_hoje)
112
+ tipo (:pac, :sedex, :sedex_10, :sedex_hoje, :e_sedex)
112
113
 
113
114
  == Copyright
114
115
 
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{correios-frete}
8
- s.version = "0.1.0"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Prodis a.k.a. Fernando Hamasaki de Amorim"]
12
- s.date = %q{2011-07-02}
12
+ s.date = %q{2011-07-19}
13
13
  s.description = %q{Cálculo de frete dos Correios.}
14
14
  s.email = %q{prodis@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -4,6 +4,7 @@ module Correios
4
4
  attr_accessor :cep_origem, :cep_destino
5
5
  attr_accessor :peso, :comprimento, :altura, :largura, :diametro
6
6
  attr_accessor :formato, :mao_propria, :aviso_recebimento, :valor_declarado
7
+ attr_accessor :codigo_empresa, :senha
7
8
  attr_writer :web_service, :parser
8
9
 
9
10
  DEFAULT_OPTIONS = {
@@ -44,5 +45,7 @@ module Correios
44
45
  services
45
46
  end
46
47
  end
48
+
49
+ alias calculate calcular
47
50
  end
48
51
  end
@@ -4,11 +4,12 @@ require 'sax-machine'
4
4
  class Correios::Frete::Servico
5
5
  include SAXMachine
6
6
 
7
- TYPES = {
8
- :pac => "41106",
9
- :sedex => "40010",
10
- :sedex_10 => "40215",
11
- :sedex_hoje => "40290"
7
+ AVAILABLE_SERVICES = {
8
+ "41106" => { :type => :pac , :name => "PAC" },
9
+ "40010" => { :type => :sedex , :name => "Sedex" },
10
+ "40215" => { :type => :sedex_10 , :name => "Sedex 10" },
11
+ "40290" => { :type => :sedex_hoje, :name => "Sedex Hoje" },
12
+ "81019" => { :type => :e_sedex , :name => "e-Sedex" }
12
13
  }
13
14
 
14
15
  element :Codigo, :as => :codigo
@@ -21,13 +22,18 @@ class Correios::Frete::Servico
21
22
  element :EntregaSabado, :as => :entrega_sabado
22
23
  element :Erro, :as => :erro
23
24
  element :MsgErro, :as => :msg_erro
24
- attr_reader :tipo
25
+ attr_reader :tipo, :nome
25
26
 
26
27
  alias_method :original_parse, :parse
27
28
 
28
29
  def parse(xml_text)
29
30
  original_parse xml_text
30
- @tipo = TYPES.key(codigo)
31
+
32
+ if AVAILABLE_SERVICES[codigo]
33
+ @tipo = AVAILABLE_SERVICES[codigo][:type]
34
+ @nome = AVAILABLE_SERVICES[codigo][:name]
35
+ end
36
+
31
37
  cast_to_float! :valor, :valor_mao_propria, :valor_aviso_recebimento, :valor_valor_declarado
32
38
  cast_to_int! :prazo_entrega
33
39
  cast_to_boolean! :entrega_domiciliar, :entrega_sabado
@@ -42,6 +48,11 @@ class Correios::Frete::Servico
42
48
  !success?
43
49
  end
44
50
 
51
+ def self.code_from_type(type)
52
+ # I don't use select method for Ruby 1.8.7 compatibility.
53
+ AVAILABLE_SERVICES.map { |key, value| key if value[:type] == type }.compact.first
54
+ end
55
+
45
56
  private
46
57
 
47
58
  def cast_to_float!(*attributes)
@@ -3,7 +3,7 @@ module Correios
3
3
  module Frete
4
4
  module Version
5
5
  MAJOR = 0
6
- MINOR = 1
6
+ MINOR = 2
7
7
  PATCH = 0
8
8
  STRING = [MAJOR, MINOR, PATCH].join(".")
9
9
  end
@@ -26,12 +26,12 @@ class Correios::Frete::WebService
26
26
  "sCdAvisoRecebimento=#{CONDITIONS[frete.aviso_recebimento]}&" +
27
27
  "nVlValorDeclarado=#{frete.valor_declarado}&" +
28
28
  "nCdServico=#{service_codes_for(service_types)}&" +
29
- "nCdEmpresa=&" +
30
- "sDsSenha=&" +
29
+ "nCdEmpresa=#{frete.codigo_empresa}&" +
30
+ "sDsSenha=#{frete.senha}&" +
31
31
  "StrRetorno=xml"
32
32
  end
33
33
 
34
34
  def service_codes_for(service_types)
35
- service_types.map { |type| Correios::Frete::Servico::TYPES[type] }.join(",")
35
+ service_types.map { |type| Correios::Frete::Servico.code_from_type(type) }.join(",")
36
36
  end
37
37
  end
@@ -22,6 +22,7 @@ describe Correios::Frete::Servico do
22
22
  end
23
23
 
24
24
  { :tipo => :pac,
25
+ :nome => "PAC",
25
26
  :codigo => "41106",
26
27
  :valor => 15.70,
27
28
  :prazo_entrega => 3,
@@ -57,6 +58,7 @@ describe Correios::Frete::Servico do
57
58
  end
58
59
 
59
60
  { :tipo => nil,
61
+ :nome => nil,
60
62
  :codigo => "99999",
61
63
  :valor => 0.0,
62
64
  :prazo_entrega => 0,
@@ -92,6 +94,7 @@ describe Correios::Frete::Servico do
92
94
  end
93
95
 
94
96
  { :tipo => nil,
97
+ :nome => nil,
95
98
  :codigo => nil,
96
99
  :valor => 0.0,
97
100
  :prazo_entrega => 0,
@@ -142,4 +145,20 @@ describe Correios::Frete::Servico do
142
145
  end
143
146
  end
144
147
  end
148
+
149
+ describe ".code_from_type" do
150
+ Correios::Frete::Servico::AVAILABLE_SERVICES.each do |code, value|
151
+ context "to #{value[:type]} type" do
152
+ it "returns #{code} code" do
153
+ Correios::Frete::Servico.code_from_type(value[:type]).should == code
154
+ end
155
+ end
156
+ end
157
+
158
+ context "when type does not exist" do
159
+ it "returns nil" do
160
+ Correios::Frete::Servico.code_from_type(:nao_existe).should be_nil
161
+ end
162
+ end
163
+ end
145
164
  end
@@ -4,20 +4,22 @@ require 'spec_helper'
4
4
  describe Correios::Frete::WebService do
5
5
  describe "#request" do
6
6
  before :each do
7
- @frete = Correios::Frete.new :cep_origem => "01000-000",
7
+ @frete = Correios::Frete.new :cep_origem => "01000-000",
8
8
  :cep_destino => "021222-222",
9
- :peso => 0.321,
10
- :comprimento => 12.5,
11
- :altura => 1.4,
12
- :largura => 4.6,
9
+ :peso => 0.321,
10
+ :comprimento => 12.5,
11
+ :altura => 1.4,
12
+ :largura => 4.6,
13
13
  :diametro => 5.0,
14
- :formato => :rolo_prisma,
15
- :mao_propria => true,
16
- :aviso_recebimento => false,
17
- :valor_declarado => 1.99
18
- url = "http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx?" +
19
- "sCepOrigem=01000-000&" +
20
- "sCepDestino=021222-222&" +
14
+ :formato => :rolo_prisma,
15
+ :mao_propria => true,
16
+ :aviso_recebimento => false,
17
+ :valor_declarado => 1.99,
18
+ :codigo_empresa => "1234567890",
19
+ :senha => "senha"
20
+ url = "http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx?" +
21
+ "sCepOrigem=01000-000&" +
22
+ "sCepDestino=021222-222&" +
21
23
  "nVlPeso=0.321&" +
22
24
  "nVlComprimento=12.5&" +
23
25
  "nVlAltura=1.4&" +
@@ -28,8 +30,8 @@ describe Correios::Frete::WebService do
28
30
  "sCdAvisoRecebimento=N&" +
29
31
  "nVlValorDeclarado=1.99&" +
30
32
  "nCdServico=41106,40010&" +
31
- "nCdEmpresa=&" +
32
- "sDsSenha=&" +
33
+ "nCdEmpresa=1234567890&" +
34
+ "sDsSenha=senha&" +
33
35
  "StrRetorno=xml"
34
36
  Net::HTTP.stub(:get).with(URI.parse(url)).and_return("<xml><fake></fake>")
35
37
  @web_service = Correios::Frete::WebService.new
@@ -33,6 +33,8 @@ describe Correios::Frete do
33
33
  :mao_propria => true,
34
34
  :aviso_recebimento => true,
35
35
  :valor_declarado => 1.99,
36
+ :codigo_empresa => "1234567890",
37
+ :senha => "senha",
36
38
  :web_service => Correios::Frete::WebService.new,
37
39
  :parser => Correios::Frete::Parser.new
38
40
  }.each do |attr, value|
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: correios-frete
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.0
5
+ version: 0.2.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Prodis a.k.a. Fernando Hamasaki de Amorim
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-07-02 00:00:00 -03:00
13
+ date: 2011-07-19 00:00:00 -03:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -109,7 +109,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
109
109
  requirements:
110
110
  - - ">="
111
111
  - !ruby/object:Gem::Version
112
- hash: -633678989
112
+ hash: -383480031
113
113
  segments:
114
114
  - 0
115
115
  version: "0"