rastreioz 0.1.3 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 796879e6c97c04645bf89e9dd3b3d6e75214103c8d57dcbcb73cddc002467c5c
4
- data.tar.gz: fbded9f7d85184500404fd2ceb75c8e2573e519901b31f5de0c9edab9e9b40f4
3
+ metadata.gz: e09e701d07a19608cb5110b075adec290d5f40c28f0bd2ec34b66dbfe7a91ede
4
+ data.tar.gz: 18f030e906cef37369a89b4e073ec6da443a602eed24b684b83c449bae623f3c
5
5
  SHA512:
6
- metadata.gz: 7abeea7fcb8f48da138f0c04954c3c6098448ea25e3ddd582216b8f041472889c0eb67cd9f84ea3d36606bc14185b10a447fa8b9ab74238d0fa5772039127421
7
- data.tar.gz: 566a5ae76e4253cb11f6ca4c1b7c4e8d3b4feb4d1310dcef2f107fedeaecd8efee9200ac721fe67cc3a6c879a464ee050b85f864f6919c79f0d59064a074c4ff
6
+ metadata.gz: '09984ce5dabaf2fe364caf4afee6eca6a81a8c78efd9b54a8e91e5d3d61e24fdfa3597658b71d789f4ee4d2f3cac802bbd29a96d8b6aef6e8036486d07b7effe'
7
+ data.tar.gz: 5871f80d98f62501314351869f5b1f693ba40fd52ca6b07573f643f750adeda064430f9d5d3c3aeb46fdc9820f22b8e619cb58f4f63962bb5e219abebe07cd52
data/.gitignore CHANGED
@@ -15,6 +15,7 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+ data/pstore
18
19
 
19
20
  # rspec failure tracking
20
21
  .rspec_status
data/README.md CHANGED
@@ -1,43 +1,104 @@
1
1
  # Rastreioz
2
2
 
3
- VERSÃO ALFA DE TESTE!
3
+ Esta Gem pertence ao serviço Rastreioz, que permite consultar o serviço de calculo de preços e prazos, rastreamento de encomenda e consulta de endereços diretamente dos Correios, com resultado armazenado em cache de algumas horas para aumentar a velocidade e disponibilidade da consulta.
4
4
 
5
- Rastreioz::Prazo.calcular([:e_sedex, :sedex_10, :pac_com_contrato, :sedex_com_contrato_1], {cep_origem: 22041030, cep_destino: 22041030, peso: 1, formato: :caixa_pacote, comprimento: 20, altura: 4, largura: 11, diametro: 20, valor_declarado: 25.00})
5
+ O Rastreioz fornece os resultados dessa consulta através de uma API autenticada que está sendo disponibilizada
6
+ sem custo adicional, porém, é possível que no futuro ocorra a a cobrança de uma taxa anual somente para a manutenção e hospedagem dos serviços. Ainda assim, se esse serviço for útil para você ou seu site, aceitamos sua doação para ajudar a pagar o café :)
6
7
 
7
- ## Installation
8
+ A implementação da API utiliza a linguagem Ruby no serviço Lambda da AWS e essa Gem faz a interface com os recursos, além da autenticação por JWT.
8
9
 
9
- Add this line to your application's Gemfile:
10
+ VERSÃO BETA: Atenção, essa API e a Gem são utilizadas por uma loja virtual em produção e já recebeu mais de 4.8k requisições desde que foi iniciado a utilização em 19/12/18 até o período de 20/01/19. A utilização em produção, apesar do bom resultado, é por sua conta e risco. O Rastreioz não se responsabiliza por eventuais interrupções do serviço ou mudança da API no período Beta.
11
+
12
+ ## Instalação
13
+
14
+ Inclua essa linha ao arquivo Gemfile da sua aplicação:
10
15
 
11
16
  ```ruby
12
17
  gem 'rastreioz'
13
18
  ```
14
19
 
15
- And then execute:
20
+ E então execute o comando:
16
21
 
17
22
  $ bundle
18
23
 
19
- Or install it yourself as:
24
+ Ou instale separadamente dessa forma:
20
25
 
21
26
  $ gem install rastreioz
22
27
 
23
- ## Usage
28
+ ## Uso
29
+
30
+ 1) Primeiro você deve criar uma conta para ter acesso a api_key e a api_password gerados automáticamente no cadastro. Obs: Possíveis abusos serão excluídos sem aviso.
31
+
32
+ $ curl -H "Content-Type: application/x-www-form-urlencoded" -X POST https://api.rastreioz.com/users/signup -d 'email=usuario@dominio.com.br&full_name=Seu Nome&password=12345678&password_confirmation=12345678'
33
+
34
+ ```
35
+ {"message":"Account created successfully","auth_token":"eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoiZmFkM2MyMzItYzZjNy00MjI2LWI1N2ItNDc2Y2ZlM2JlNzQzIiwiZXhwIjoxNTQ3NTEwODA1fQ.W0ftZ_LX_j14ybNwZ1b1G6LeMQA8C--_JQirXdkXRUU","api_key":"ak_5c5743369a774b78993966d8c2d8a1f5","api_password":"d7f259ac4812bde6dfc67523304a1244"}
36
+ ```
37
+
38
+ 2) Após receber a api_key e a api_password, você deve guardar com segurança essa informações, pois não podem ser regeradas
39
+ neste momento e a api_password não será exibida novamente.
40
+
41
+ ```ruby
42
+ Rastreioz.api_key = "ak_5c5743369a774b78993966d8c2d8a1f5"
43
+ Rastreioz.api_password = "d7f259ac4812bde6dfc67523304a1244"
44
+ ```
45
+
46
+ 3) Após a configuração da gem com a api_key e a api_password recebida, é possível calcular o custo e o prazo da entrega dos serviços sem um contrato com o Correios:
47
+
48
+ Serviços disponíveis:
49
+
50
+ ```ruby
51
+ AVAILABLE_SERVICES = {
52
+ "4510" => { :type => :pac, :name => "PAC", :description => "PAC sem contrato" },
53
+ "41068" => { :type => :pac_com_contrato, :name => "PAC", :description => "PAC com contrato" },
54
+ "4669" => { :type => :pac_com_contrato_2, :name => "PAC", :description => "PAC com contrato" },
55
+ "41300" => { :type => :pac_gf, :name => "PAC GF", :description => "PAC para grandes formatos" },
56
+ "4014" => { :type => :sedex, :name => "SEDEX", :description => "SEDEX sem contrato" },
57
+ "40045" => { :type => :sedex_a_cobrar, :name => "SEDEX a Cobrar", :description => "SEDEX a Cobrar, sem contrato" },
58
+ "40126" => { :type => :sedex_a_cobrar_com_contrato, :name => "SEDEX a Cobrar", :description => "SEDEX a Cobrar, com contrato" },
59
+ "40215" => { :type => :sedex_10, :name => "SEDEX 10", :description => "SEDEX 10, sem contrato" },
60
+ "40290" => { :type => :sedex_hoje, :name => "SEDEX Hoje", :description => "SEDEX Hoje, sem contrato" },
61
+ "40096" => { :type => :sedex_com_contrato_1, :name => "SEDEX", :description => "SEDEX com contrato" },
62
+ "40436" => { :type => :sedex_com_contrato_2, :name => "SEDEX", :description => "SEDEX com contrato" },
63
+ "40444" => { :type => :sedex_com_contrato_3, :name => "SEDEX", :description => "SEDEX com contrato" },
64
+ "40568" => { :type => :sedex_com_contrato_4, :name => "SEDEX", :description => "SEDEX com contrato" },
65
+ "40606" => { :type => :sedex_com_contrato_5, :name => "SEDEX", :description => "SEDEX com contrato" },
66
+ "4162" => { :type => :sedex_com_contrato_6, :name => "SEDEX", :description => "SEDEX com contrato" },
67
+ "81019" => { :type => :e_sedex, :name => "e-SEDEX", :description => "e-SEDEX, com contrato" },
68
+ "81027" => { :type => :e_sedex_prioritario, :name => "e-SEDEX", :description => "e-SEDEX Prioritário, com contrato" },
69
+ "81035" => { :type => :e_sedex_express, :name => "e-SEDEX", :description => "e-SEDEX Express, com contrato" },
70
+ "81868" => { :type => :e_sedex_grupo_1, :name => "e-SEDEX", :description => "(Grupo 1) e-SEDEX, com contrato" },
71
+ "81833" => { :type => :e_sedex_grupo_2, :name => "e-SEDEX", :description => "(Grupo 2) e-SEDEX, com contrato" },
72
+ "81850" => { :type => :e_sedex_grupo_3, :name => "e-SEDEX", :description => "(Grupo 3) e-SEDEX, com contrato" }
73
+ }
74
+ ```
75
+ Calcular valor do Frete:
24
76
 
25
- TODO: Write usage instructions here
77
+ ```ruby
78
+ Rastreioz::Frete.calcular([:pac, :sedex, :sedex_10], {cep_origem: '01154-010', cep_destino: '06351-140', peso: 2, formato: :caixa_pacote, comprimento: 20, altura: 20, largura: 20, diametro: 20, valor_declarado: 115.00})
79
+ ```
80
+
81
+ Caso você tenha um contrato com o correio, pode informar o seu código_empresa e a senha. Essas informações não são armazenadas pelo Rastreioz.
82
+
83
+ ```ruby
84
+ Rastreioz::Frete.calcular([:e_sedex, :sedex_10, :pac_com_contrato, :sedex_com_contrato_1], {cep_origem: '01154-010', cep_destino: '06351-140', peso: 2, formato: :caixa_pacote, comprimento: 20, altura: 20, largura: 20, diametro: 20, valor_declarado: 115.00, codigo_empresa: 11111111, senha: 11111111})
85
+ ```
86
+ 4) A próxima estapa será mostrar o rastreamento dos correios. Ainda em construção.
26
87
 
27
- ## Development
88
+ ## Desenvolvimento
28
89
 
29
90
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
30
91
 
31
92
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
32
93
 
33
- ## Contributing
94
+ ## Contribuição
34
95
 
35
- Bug reports and pull requests are welcome on GitHub at https://github.com/base16soft/rastreioz. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
96
+ Avisos de erros e pull requests são bem vindos nesse repositório https://github.com/base16soft/rastreioz. O projeto destina-se a ser um espaço seguro e acolhedor para colaboração, e espera-se que os colaboradores sigam o código de conduta do [Pacto do Colaborador](http://contributor-covenant.org)
36
97
 
37
98
  ## License
38
99
 
39
- The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
100
+ O código fonte dessa gem está disponível sob os termos da [licença MIT](https://opensource.org/licenses/MIT).
40
101
 
41
- ## Code of Conduct
102
+ ## Código de Conduta
42
103
 
43
- Everyone interacting in the Rastreioz project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/rastreioz/blob/master/CODE_OF_CONDUCT.md).
104
+ Qualquer interação o código base dessa gem, dúvidas, avisos de erros (issues) ou troca de mensagens deve seguir o seguinte [código de conduta](https://github.com/base16soft/rastreioz/blob/master/CODE_OF_CONDUCT.md).
data/data/.keep ADDED
File without changes
data/lib/rastreioz.rb CHANGED
@@ -7,6 +7,7 @@ require 'uri'
7
7
  require "rastreioz/version"
8
8
  require "rastreioz/log"
9
9
  require "rastreioz/http"
10
+ require "rastreioz/auth"
10
11
  require "rastreioz/servico"
11
12
  require "rastreioz/rastreamento"
12
13
  require "rastreioz/frete"
@@ -27,12 +28,23 @@ module Rastreioz
27
28
  extend Timeout
28
29
 
29
30
  class << self
30
- def auth=(credentials)
31
- @credentials = credentials
31
+
32
+ def default_url
33
+ "https://api.rastreioz.com"
32
34
  end
33
35
 
34
- def auth
35
- @credentials
36
+ def api_key=(api_key)
37
+ @api_key = api_key
38
+ end
39
+ def api_key
40
+ @api_key
41
+ end
42
+
43
+ def api_password=(api_password)
44
+ @api_password = api_password
45
+ end
46
+ def api_password
47
+ @api_password
36
48
  end
37
49
  end
38
50
 
@@ -0,0 +1,38 @@
1
+ require 'pstore'
2
+ require 'tmpdir'
3
+
4
+ module Rastreioz
5
+ class Auth
6
+
7
+ def token(use_ssl = true)
8
+
9
+ auth_token = nil
10
+ if !Rastreioz.api_key.nil? && !Rastreioz.api_password.nil?
11
+ temp_dir = Rails.root.join('tmp') rescue Dir.tmpdir()
12
+ store = PStore.new("#{temp_dir}/pstore.data")
13
+
14
+ auth_token = store.transaction { store[:auth_token] }
15
+ expires_in = store.transaction { store[:expires_in] }
16
+
17
+ if auth_token.nil? || Time.now.to_i > expires_in.to_i
18
+ uri = URI.parse("#{Rastreioz.default_url}/users/login")
19
+ http = Net::HTTP.start(uri.host, uri.port, nil, nil, nil, nil, use_ssl: use_ssl, verify_mode: OpenSSL::SSL::VERIFY_NONE)
20
+ request = Net::HTTP::Post.new(uri.path, initheader = {'Content-Type' =>'application/x-www-form-urlencoded'})
21
+ request.body = {api_key: Rastreioz.api_key, api_password: Rastreioz.api_password}.to_json
22
+ response = Rastreioz::Log.new.with_log {
23
+ http.request(request)
24
+ }
25
+ response_body = JSON.parse(response.body)
26
+ auth_token = response_body["auth_token"]
27
+ store.transaction do
28
+ store[:auth_token] = auth_token
29
+ store[:expires_in] = Time.now + 23*60*60
30
+ end
31
+ end
32
+ auth_token
33
+ end
34
+
35
+ end
36
+
37
+ end
38
+ end
data/lib/rastreioz/cep.rb CHANGED
@@ -3,8 +3,6 @@ module Rastreioz
3
3
 
4
4
  attr_accessor :bairro, :cep, :localidade, :logradouro, :uf
5
5
 
6
- URL = "https://api.rastreioz.com/cep"
7
-
8
6
  def initialize(options = {})
9
7
  end
10
8
 
@@ -17,7 +17,6 @@ module Rastreioz
17
17
  :valor_declarado => 0.0
18
18
  }
19
19
 
20
- URL = "https://api.rastreioz.com/frete/prazo"
21
20
  FORMATS = { :caixa_pacote => 1, :rolo_prisma => 2, :envelope => 3 }
22
21
  CONDITIONS = { true => "S", false => "N" }
23
22
 
@@ -29,16 +28,12 @@ module Rastreioz
29
28
 
30
29
  def calcular(service_types)
31
30
  servicos = {}
32
- begin
33
- url = "#{URL}?#{params_for(service_types)}"
34
- response = Rastreioz::Log.new.with_log {Rastreioz::Http.new.http_request(url)}
35
- response_body = JSON.parse(response.body)
36
- response_body.each do |element|
37
- servico = Rastreioz::Servico.new.parse(element)
38
- servicos[servico.tipo] = servico
39
- end
40
- rescue
41
- raise "Falha na Consulta ao Correio"
31
+ url = "#{Rastreioz.default_url}/frete/prazo?#{params_for(service_types)}"
32
+ response = Rastreioz::Log.new.with_log {Rastreioz::Http.new.http_request(url)}
33
+ response_body = JSON.parse(response.body)
34
+ response_body.each do |element|
35
+ servico = Rastreioz::Servico.new.parse(element)
36
+ servicos[servico.tipo] = servico
42
37
  end
43
38
  servicos
44
39
  end
@@ -50,20 +45,20 @@ module Rastreioz
50
45
  private
51
46
 
52
47
  def params_for(service_types)
53
- res = "sCepOrigem=#{self.cep_origem}&" +
54
- "sCepDestino=#{self.cep_destino}&" +
55
- "nVlPeso=#{self.peso}&" +
56
- "nVlComprimento=#{format_decimal(self.comprimento)}&" +
57
- "nVlLargura=#{format_decimal(self.largura)}&" +
58
- "nVlAltura=#{format_decimal(self.altura)}&" +
59
- "nVlDiametro=#{format_decimal(self.diametro)}&" +
60
- "nCdFormato=#{FORMATS[self.formato]}&" +
61
- "sCdMaoPropria=#{CONDITIONS[self.mao_propria]}&" +
62
- "sCdAvisoRecebimento=#{CONDITIONS[self.aviso_recebimento]}&" +
63
- "nVlValorDeclarado=#{format_decimal(format("%.2f" % self.valor_declarado))}&" +
64
- "nCdServico=#{service_codes_for(service_types)}"
48
+ res = "cep_origem=#{self.cep_origem}&" +
49
+ "cep_destino=#{self.cep_destino}&" +
50
+ "peso=#{self.peso}&" +
51
+ "comprimento=#{format_decimal(self.comprimento)}&" +
52
+ "largura=#{format_decimal(self.largura)}&" +
53
+ "altura=#{format_decimal(self.altura)}&" +
54
+ "diametro=#{format_decimal(self.diametro)}&" +
55
+ "formato=#{FORMATS[self.formato]}&" +
56
+ "mao_propria=#{CONDITIONS[self.mao_propria]}&" +
57
+ "aviso_recebimento=#{CONDITIONS[self.aviso_recebimento]}&" +
58
+ "valor_declarado=#{format_decimal(format("%.2f" % self.valor_declarado))}&" +
59
+ "servicos=#{service_codes_for(service_types)}"
65
60
 
66
- res = "#{res}&nCdEmpresa=#{self.codigo_empresa}&sDsSenha=#{self.senha}" if self.codigo_empresa && self.senha
61
+ res = "#{res}&codigo_empresa=#{self.codigo_empresa}&senha=#{self.senha}" if self.codigo_empresa && self.senha
67
62
  res
68
63
  end
69
64
 
@@ -75,8 +70,6 @@ module Rastreioz
75
70
  service_codes = service_types.is_a?(Array) ?
76
71
  service_types.map { |type| Rastreioz::Servico.code_from_type(type) }.join(",") :
77
72
  Rastreioz::Servico.code_from_type(service_types)
78
-
79
- puts service_codes
80
73
  service_codes
81
74
  end
82
75
 
@@ -1,28 +1,19 @@
1
1
  module Rastreioz
2
2
  class Http
3
3
 
4
- def http_request(request_url)
4
+ def http_request(request_url, use_ssl = true)
5
5
  @uri = URI.parse(request_url)
6
- @http = build_http
7
-
6
+ @http = build_http(use_ssl)
8
7
  request = Net::HTTP::Get.new(@uri)
8
+ request['Authorization'] = Rastreioz::Auth.new.token(use_ssl)
9
9
  http.open_timeout = Rastreioz.request_timeout
10
10
  http.request(request)
11
11
  end
12
12
 
13
13
  private
14
14
 
15
- def build_http
16
- Net::HTTP.start(
17
- uri.host,
18
- uri.port,
19
- nil,
20
- nil,
21
- nil,
22
- nil,
23
- use_ssl: true,
24
- verify_mode: OpenSSL::SSL::VERIFY_NONE
25
- )
15
+ def build_http(use_ssl)
16
+ Net::HTTP.start(uri.host, uri.port, nil, nil, nil, nil, use_ssl: use_ssl, verify_mode: OpenSSL::SSL::VERIFY_NONE)
26
17
  end
27
18
 
28
19
  attr_reader :uri, :url, :http
data/lib/rastreioz/log.rb CHANGED
@@ -10,7 +10,7 @@ module Rastreioz
10
10
 
11
11
  def format_request_message(response)
12
12
  message = with_line_break { "RastreioZ Request:" }
13
- message << with_line_break { "GET #{response.uri}" }
13
+ message << with_line_break { "#{response.uri}" }
14
14
  end
15
15
 
16
16
  def format_response_message(response)
@@ -3,8 +3,6 @@ module Rastreioz
3
3
 
4
4
  attr_accessor :bairro, :cep, :localidade, :logradouro, :uf
5
5
 
6
- URL = "https://api.rastreioz.com/cep"
7
-
8
6
  def initialize(options = {})
9
7
  end
10
8
 
@@ -1,3 +1,3 @@
1
1
  module Rastreioz
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.7"
3
3
  end
data/rastreioz.gemspec CHANGED
@@ -8,9 +8,8 @@ Gem::Specification.new do |spec|
8
8
  spec.version = Rastreioz::VERSION
9
9
  spec.authors = ["Augusto Cesar S. Martins"]
10
10
  spec.email = ["augusto@base16.com.br"]
11
-
12
- spec.summary = "Calculo de frete dos Correios utilizando a Rastreioz Api."
13
- spec.description = "[Alfa Version] Calculo de frete utilizando o Web Service Rastreioz.\nOs servicos de frete suportados sao PAC, SEDEX, SEDEX a Cobrar, SEDEX 10, SEDEX Hoje e e-SEDEX."
11
+ spec.summary = "Consulta aos Correios utilizando a Rastreioz Api."
12
+ spec.description = "Esta Gem pertence ao serviço Rastreioz, que permite consultar o serviço de calculo de preços e prazos, rastreamento de encomenda e consulta de endereços diretamente dos Correios, com resultado armazenado em cache de algumas horas para aumentar a velocidade e disponibilidade da consulta."
14
13
  spec.homepage = "https://github.com/base16soft/rastreioz"
15
14
  spec.license = "MIT"
16
15
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rastreioz
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Augusto Cesar S. Martins
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-12-19 00:00:00.000000000 Z
11
+ date: 2019-01-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: log-me
@@ -66,9 +66,10 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '3.0'
69
- description: |-
70
- [Alfa Version] Calculo de frete utilizando o Web Service Rastreioz.
71
- Os servicos de frete suportados sao PAC, SEDEX, SEDEX a Cobrar, SEDEX 10, SEDEX Hoje e e-SEDEX.
69
+ description: Esta Gem pertence ao serviço Rastreioz, que permite consultar o serviço
70
+ de calculo de preços e prazos, rastreamento de encomenda e consulta de endereços
71
+ diretamente dos Correios, com resultado armazenado em cache de algumas horas para
72
+ aumentar a velocidade e disponibilidade da consulta.
72
73
  email:
73
74
  - augusto@base16.com.br
74
75
  executables: []
@@ -85,7 +86,9 @@ files:
85
86
  - Rakefile
86
87
  - bin/console
87
88
  - bin/setup
89
+ - data/.keep
88
90
  - lib/rastreioz.rb
91
+ - lib/rastreioz/auth.rb
89
92
  - lib/rastreioz/cep.rb
90
93
  - lib/rastreioz/frete.rb
91
94
  - lib/rastreioz/http.rb
@@ -117,5 +120,5 @@ rubyforge_project:
117
120
  rubygems_version: 2.7.7
118
121
  signing_key:
119
122
  specification_version: 4
120
- summary: Calculo de frete dos Correios utilizando a Rastreioz Api.
123
+ summary: Consulta aos Correios utilizando a Rastreioz Api.
121
124
  test_files: []