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 +4 -4
- data/.gitignore +1 -0
- data/README.md +75 -14
- data/data/.keep +0 -0
- data/lib/rastreioz.rb +16 -4
- data/lib/rastreioz/auth.rb +38 -0
- data/lib/rastreioz/cep.rb +0 -2
- data/lib/rastreioz/frete.rb +19 -26
- data/lib/rastreioz/http.rb +5 -14
- data/lib/rastreioz/log.rb +1 -1
- data/lib/rastreioz/rastreamento.rb +0 -2
- data/lib/rastreioz/version.rb +1 -1
- data/rastreioz.gemspec +2 -3
- metadata +9 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e09e701d07a19608cb5110b075adec290d5f40c28f0bd2ec34b66dbfe7a91ede
|
4
|
+
data.tar.gz: 18f030e906cef37369a89b4e073ec6da443a602eed24b684b83c449bae623f3c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '09984ce5dabaf2fe364caf4afee6eca6a81a8c78efd9b54a8e91e5d3d61e24fdfa3597658b71d789f4ee4d2f3cac802bbd29a96d8b6aef6e8036486d07b7effe'
|
7
|
+
data.tar.gz: 5871f80d98f62501314351869f5b1f693ba40fd52ca6b07573f643f750adeda064430f9d5d3c3aeb46fdc9820f22b8e619cb58f4f63962bb5e219abebe07cd52
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -1,43 +1,104 @@
|
|
1
1
|
# Rastreioz
|
2
2
|
|
3
|
-
|
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
|
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
|
-
|
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
|
-
|
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
|
-
|
20
|
+
E então execute o comando:
|
16
21
|
|
17
22
|
$ bundle
|
18
23
|
|
19
|
-
|
24
|
+
Ou instale separadamente dessa forma:
|
20
25
|
|
21
26
|
$ gem install rastreioz
|
22
27
|
|
23
|
-
##
|
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
|
-
|
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
|
-
##
|
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
|
-
##
|
94
|
+
## Contribuição
|
34
95
|
|
35
|
-
|
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
|
-
|
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
|
-
##
|
102
|
+
## Código de Conduta
|
42
103
|
|
43
|
-
|
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
|
-
|
31
|
-
|
31
|
+
|
32
|
+
def default_url
|
33
|
+
"https://api.rastreioz.com"
|
32
34
|
end
|
33
35
|
|
34
|
-
def
|
35
|
-
@
|
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
data/lib/rastreioz/frete.rb
CHANGED
@@ -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
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
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 = "
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
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}&
|
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
|
|
data/lib/rastreioz/http.rb
CHANGED
@@ -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 { "
|
13
|
+
message << with_line_break { "#{response.uri}" }
|
14
14
|
end
|
15
15
|
|
16
16
|
def format_response_message(response)
|
data/lib/rastreioz/version.rb
CHANGED
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.
|
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.
|
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:
|
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
|
-
|
71
|
-
|
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:
|
123
|
+
summary: Consulta aos Correios utilizando a Rastreioz Api.
|
121
124
|
test_files: []
|