correios-frete 0.1.0 → 0.2.0

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