rastreioz 0.1.3 → 0.1.7

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.
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: []