brazil-cep 0.2.0 → 0.4.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.
- checksums.yaml +4 -4
- data/lib/brazil_cep/adapters/base.rb +2 -1
- data/lib/brazil_cep/adapters/correios_web.rb +62 -0
- data/lib/brazil_cep/adapters/viacep.rb +3 -1
- data/lib/brazil_cep/adapters.rb +3 -1
- data/lib/brazil_cep/version.rb +1 -1
- data/lib/brazil_cep.rb +17 -1
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 846ef72872222fae21a466e025f9366f3194e03330c350f82a2e7241e95b2680
|
|
4
|
+
data.tar.gz: 0a2df924f5d863cb398c027ec4b1c97686b3a966ca35a9e2202665f7e64a1133
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 12722468d5c1e0187bee7d8c152239017f0c0e7ef256b3b34d46594028d5dbc84fb79db3d6402a8c677c1eacfeeb56ebfd47102e616108804b50f993a198bd4c
|
|
7
|
+
data.tar.gz: 98492724593be83d12735da04a735722108f435b50219c60ad7616bb0aecea70c28e22a8cfe9fc32385e14a1bbf98ab138a26c43a5ea32f40a2ac19a57fc59e7
|
|
@@ -31,7 +31,8 @@ module Brazil
|
|
|
31
31
|
@cep = value unless value.nil?
|
|
32
32
|
|
|
33
33
|
http_request(provider_url) do |http_response|
|
|
34
|
-
raise Brazil::Cep::
|
|
34
|
+
raise Brazil::Cep::ZipcodeNotFound, http_response if http_response.is_a?(Net::HTTPNotFound)
|
|
35
|
+
raise Brazil::Cep::RequestError, http_response if http_response.code.to_i >= 400
|
|
35
36
|
end
|
|
36
37
|
|
|
37
38
|
deserialization!
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Brazil
|
|
4
|
+
module Cep
|
|
5
|
+
module Adapters
|
|
6
|
+
# Correios Web provider adapter class
|
|
7
|
+
# This class is responsible for fetching the address information from the Correios Web provider
|
|
8
|
+
class CorreiosWeb < Base
|
|
9
|
+
provider base_url: "https://buscacepinter.correios.com.br/app/endereco/carrega-cep-endereco.php"
|
|
10
|
+
|
|
11
|
+
private
|
|
12
|
+
|
|
13
|
+
def http_request(uri, **options, &block)
|
|
14
|
+
http_options =
|
|
15
|
+
{ open_timeout: open_timeout, read_timeout: read_timeout, write_timeout: write_timeout }
|
|
16
|
+
.update(**options)
|
|
17
|
+
|
|
18
|
+
http_options[:use_ssl] = uri.scheme == "https"
|
|
19
|
+
|
|
20
|
+
Net::HTTP.start(uri.host, uri.port, **http_options) do |http|
|
|
21
|
+
request = Net::HTTP::Post.new(uri)
|
|
22
|
+
request.set_form_data(params)
|
|
23
|
+
headers.each { |key, value| request[key] = value }
|
|
24
|
+
|
|
25
|
+
@response = http.request(request)
|
|
26
|
+
|
|
27
|
+
block.call(@response)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def headers
|
|
32
|
+
{ "Referer" => "https://buscacepinter.correios.com.br/app/endereco/index.php" }
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def params
|
|
36
|
+
{ pagina: "/app/endereco/index.php", cepaux: nil, endereco: @cep, tipoCEP: "ALL" }
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def transformation!
|
|
40
|
+
data = Array(@payload[:dados]).first
|
|
41
|
+
raise Brazil::Cep::ZipcodeNotFound, @response if data.nil?
|
|
42
|
+
|
|
43
|
+
street, *complement = data[:logradouroDNEC].split(" - ")
|
|
44
|
+
|
|
45
|
+
raise Brazil::Cep::ZipcodeNotFound, @response if data[:cep] != @cep.sub("-", "")
|
|
46
|
+
|
|
47
|
+
address_params = {
|
|
48
|
+
zipcode: data[:cep],
|
|
49
|
+
state: data[:uf],
|
|
50
|
+
city: data[:localidade],
|
|
51
|
+
neighborhood: data[:bairro],
|
|
52
|
+
street: street,
|
|
53
|
+
complement: complement.join(" - "),
|
|
54
|
+
meta: @payload.update(provider: :correios_web)
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
Brazil::Cep::Address.new(**address_params)
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
@@ -11,6 +11,8 @@ module Brazil
|
|
|
11
11
|
private
|
|
12
12
|
|
|
13
13
|
def transformation!
|
|
14
|
+
raise Brazil::Cep::ZipcodeNotFound, @response if @payload[:erro] == true
|
|
15
|
+
|
|
14
16
|
address_params = {
|
|
15
17
|
zipcode: @payload[:cep],
|
|
16
18
|
state: @payload[:uf],
|
|
@@ -18,7 +20,7 @@ module Brazil
|
|
|
18
20
|
neighborhood: @payload[:bairro],
|
|
19
21
|
street: @payload[:logradouro],
|
|
20
22
|
complement: @payload[:complemento],
|
|
21
|
-
meta: @payload.update(provider: :
|
|
23
|
+
meta: @payload.update(provider: :viacep)
|
|
22
24
|
}
|
|
23
25
|
|
|
24
26
|
Brazil::Cep::Address.new(**address_params)
|
data/lib/brazil_cep/adapters.rb
CHANGED
|
@@ -9,12 +9,14 @@ module Brazil
|
|
|
9
9
|
autoload :Viacep, "brazil_cep/adapters/viacep"
|
|
10
10
|
autoload :Postmon, "brazil_cep/adapters/postmon"
|
|
11
11
|
autoload :RepublicaVirtual, "brazil_cep/adapters/republica_virtual"
|
|
12
|
+
autoload :CorreiosWeb, "brazil_cep/adapters/correios_web"
|
|
12
13
|
|
|
13
14
|
# list of provider keys and classes
|
|
14
15
|
PROVIDERS = {
|
|
15
16
|
viacep: Viacep,
|
|
16
17
|
postmon: Postmon,
|
|
17
|
-
republica_virtual: RepublicaVirtual
|
|
18
|
+
republica_virtual: RepublicaVirtual,
|
|
19
|
+
correios_web: CorreiosWeb
|
|
18
20
|
}
|
|
19
21
|
|
|
20
22
|
private_constant :PROVIDERS
|
data/lib/brazil_cep/version.rb
CHANGED
data/lib/brazil_cep.rb
CHANGED
|
@@ -8,8 +8,24 @@ module Brazil
|
|
|
8
8
|
# Brazil::Cep providers a simple way to fetch address information from a Brazilian CEP
|
|
9
9
|
# @public
|
|
10
10
|
module Cep
|
|
11
|
+
# generic error class
|
|
11
12
|
class Error < StandardError; end
|
|
12
|
-
|
|
13
|
+
|
|
14
|
+
# request error class
|
|
15
|
+
class RequestError < Error
|
|
16
|
+
attr_reader :status, :code, :response
|
|
17
|
+
|
|
18
|
+
def initialize(response)
|
|
19
|
+
@response = response
|
|
20
|
+
@status = response.message || "Undefined"
|
|
21
|
+
@code = response.code.to_i
|
|
22
|
+
|
|
23
|
+
super("Request Error: #{code} #{status} - #{response.body[0..1000].inspect}")
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# zipcode not found error class
|
|
28
|
+
class ZipcodeNotFound < RequestError; end
|
|
13
29
|
|
|
14
30
|
# fetch address information from a Brazilian CEP
|
|
15
31
|
# @param [String] cep the CEP to fetch
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: brazil-cep
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.4.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Daniel Vinciguerra
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2024-03-
|
|
11
|
+
date: 2024-03-29 00:00:00.000000000 Z
|
|
12
12
|
dependencies: []
|
|
13
13
|
description: Brazil::CEP is a gem to provide interface to use common CEP services
|
|
14
14
|
email:
|
|
@@ -28,6 +28,7 @@ files:
|
|
|
28
28
|
- lib/brazil_cep.rb
|
|
29
29
|
- lib/brazil_cep/adapters.rb
|
|
30
30
|
- lib/brazil_cep/adapters/base.rb
|
|
31
|
+
- lib/brazil_cep/adapters/correios_web.rb
|
|
31
32
|
- lib/brazil_cep/adapters/postmon.rb
|
|
32
33
|
- lib/brazil_cep/adapters/republica_virtual.rb
|
|
33
34
|
- lib/brazil_cep/adapters/viacep.rb
|