viacep 2.0.0 → 2.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.editorconfig +9 -0
- data/.gitignore +55 -0
- data/.yardopts +1 -0
- data/Gemfile +3 -0
- data/README.md +48 -0
- data/lib/viacep.rb +3 -23
- data/lib/viacep/address.rb +27 -0
- data/lib/{exceptions.rb → viacep/exceptions.rb} +0 -0
- data/lib/{service.rb → viacep/service.rb} +2 -1
- data/spec/address_spec.rb +33 -0
- data/spec/service_spec.rb +29 -0
- data/spec/spec_helper.rb +15 -0
- data/viacep.gemspec +19 -0
- metadata +33 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6a0da61db07bc87dc9593747ae9d63580cc685e1d299da83dd0a03ab0ff13419
|
4
|
+
data.tar.gz: cf244b4466c7a73e25ffbf84024faf8fd2f50c7b797e6c9a892f9c381a4aa1b6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 99d3fb4ba76ab983c3eadb79194e84fe2c73614724adedc8d9498ac5cce9e41e430e9b5587518a6fe731a3312a18b6bc11c509bab363a4eecaa291b3c3668a7c
|
7
|
+
data.tar.gz: 1ba60a80b2fefb9a5f80d941d84a4c58ad6bc5b83cd2d5ae95c8b5ab0e259f88c52f3f98f33e077a7b4bdd484c953848c0dc6828daf8d97a898772d953d370cf
|
data/.editorconfig
ADDED
data/.gitignore
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
/.config
|
4
|
+
capybara-*.html
|
5
|
+
.rspec
|
6
|
+
/log
|
7
|
+
/db/*.sqlite3
|
8
|
+
/db/*.sqlite3-journal
|
9
|
+
/public/system
|
10
|
+
/coverage/
|
11
|
+
/InstalledFiles
|
12
|
+
/pkg/
|
13
|
+
/spec/reports/
|
14
|
+
/test/version_tmp/
|
15
|
+
**/tmp/*
|
16
|
+
**.orig
|
17
|
+
rerun.txt
|
18
|
+
pickle-email-*.html
|
19
|
+
|
20
|
+
## Specific to RubyMotion:
|
21
|
+
config/initializers/secret_token.rb
|
22
|
+
config/secrets.yml
|
23
|
+
|
24
|
+
.dat*
|
25
|
+
.repl_history
|
26
|
+
build/
|
27
|
+
|
28
|
+
## Documentation cache and generated files:
|
29
|
+
/.yardoc/
|
30
|
+
/_yardoc/
|
31
|
+
/doc/
|
32
|
+
/rdoc/
|
33
|
+
|
34
|
+
## Environment normalisation:
|
35
|
+
/.bundle/
|
36
|
+
/vendor/bundle
|
37
|
+
/lib/bundler/man/
|
38
|
+
|
39
|
+
# for a library or gem, you might want to ignore these files since the code is
|
40
|
+
# intended to run in multiple environments; otherwise, check them in:
|
41
|
+
Gemfile.lock
|
42
|
+
.ruby-version*
|
43
|
+
.ruby-gemset*
|
44
|
+
.rvmrc*
|
45
|
+
|
46
|
+
# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
|
47
|
+
.rvmrc
|
48
|
+
|
49
|
+
# if using bower-rails ignore default bower_components path bower.json files
|
50
|
+
/vendor/assets/bower_components
|
51
|
+
*.bowerrc
|
52
|
+
bower.json
|
53
|
+
|
54
|
+
# Ignore pow environment settings
|
55
|
+
.powenv
|
data/.yardopts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--markup=markdown
|
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/b/bc/BRA_orthographic.svg/270px-BRA_orthographic.svg.png" align="right" />
|
2
|
+
|
3
|
+
# viacep [![GitHub license](https://img.shields.io/github/license/vnbrs/burocracia.cr.svg)](https://github.com/vnbrs/burocracia.cr/blob/master/LICENSE)
|
4
|
+
> Gem responsável por buscar endereços a partir do CEP utilizando a API do ViaCEP com features úteis como timeout.
|
5
|
+
|
6
|
+
## Instalação
|
7
|
+
|
8
|
+
Instale o viacep pelo [RubyGems](https://rubygems.org/gems/viacep/) facilmente via terminal:
|
9
|
+
|
10
|
+
```shell
|
11
|
+
gem install viacep
|
12
|
+
=> Vai que é tua! 🚀
|
13
|
+
```
|
14
|
+
|
15
|
+
## Como usar?
|
16
|
+
|
17
|
+
```ruby
|
18
|
+
require 'viacep'
|
19
|
+
|
20
|
+
# com CEPs sem formatação...
|
21
|
+
ViaCep::Address.new('80210130')
|
22
|
+
=> #<ViaCep::Address:0x00007fe52a8a0568 @cep="80210-130", @address="Rua José Ananias Mauad", @neighborhood="Jardim Botânico", @city="Curitiba", @state="PR", @ibge="4106902", @gia="">
|
23
|
+
|
24
|
+
# com CEPs formatados...
|
25
|
+
ViaCep::Address.new('13035-680')
|
26
|
+
=> #<ViaCep::Address:0x00007fe52a99e730 @cep="13035-680", @address="Avenida João Jorge", @neighborhood="Vila Industrial", @city="Campinas", @state="SP", @ibge="3509502", @gia="2446">
|
27
|
+
|
28
|
+
# um CEP não existente...
|
29
|
+
ViaCep::Address.new('123')
|
30
|
+
=> exception thrown: ViaCep::ApiRequestError
|
31
|
+
|
32
|
+
# especificando um timeout em segundos...
|
33
|
+
ViaCep::Address.new('80210130', timeout: 0.2)
|
34
|
+
=> exception thrown: Timeout::Error (execution expired)
|
35
|
+
```
|
36
|
+
|
37
|
+
## Contribuindo
|
38
|
+
|
39
|
+
1. Faça um fork (https://github.com/vnbrs/viacep/fork)
|
40
|
+
2. Crie uma branch (git checkout -b my-new-feature)
|
41
|
+
3. Faça um commit (git commit -am 'Add some feature')
|
42
|
+
4. Faça o push (git push origin my-new-feature)
|
43
|
+
5. Crie um Pull Request
|
44
|
+
6. Valeu! 🤙🏼
|
45
|
+
|
46
|
+
## Contribuidores
|
47
|
+
|
48
|
+
- [vnbrs](https://github.com/vnbrs) Vinicius Brasil - creator, maintainer
|
data/lib/viacep.rb
CHANGED
@@ -1,26 +1,6 @@
|
|
1
|
-
require 'service'
|
2
|
-
|
3
1
|
module ViaCep
|
4
|
-
|
5
|
-
attr_reader :cep, :address, :neighborhood, :city, :state, :ibge, :gia
|
6
|
-
|
7
|
-
def initialize(cep, options = {})
|
8
|
-
cep = cep.to_s.delete('^0-9')
|
9
|
-
|
10
|
-
response = Service.fetch cep, options[:timeout]
|
11
|
-
fill_from response
|
12
|
-
end
|
13
|
-
|
14
|
-
private
|
2
|
+
VERSION = "2.0.1".freeze
|
15
3
|
|
16
|
-
|
17
|
-
|
18
|
-
@address = response['logradouro']
|
19
|
-
@neighborhood = response['bairro']
|
20
|
-
@city = response['localidade']
|
21
|
-
@state = response['uf']
|
22
|
-
@ibge = response['ibge']
|
23
|
-
@gia = response['gia']
|
24
|
-
end
|
25
|
-
end
|
4
|
+
require_relative "viacep/address"
|
5
|
+
require_relative "viacep/exceptions"
|
26
6
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require_relative 'service'
|
2
|
+
|
3
|
+
module ViaCep
|
4
|
+
class Address
|
5
|
+
attr_reader :cep, :address, :neighborhood, :city, :state, :ibge, :gia
|
6
|
+
|
7
|
+
# Initializes an instance of Address and fetches the CEP using the external API
|
8
|
+
def initialize(cep, options = {})
|
9
|
+
cep = cep.to_s.delete('^0-9')
|
10
|
+
|
11
|
+
response = Service.fetch cep, options[:timeout]
|
12
|
+
fill_from response
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def fill_from(response)
|
18
|
+
@cep = response['cep']
|
19
|
+
@address = response['logradouro']
|
20
|
+
@neighborhood = response['bairro']
|
21
|
+
@city = response['localidade']
|
22
|
+
@state = response['uf']
|
23
|
+
@ibge = response['ibge']
|
24
|
+
@gia = response['gia']
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
File without changes
|
@@ -2,12 +2,13 @@ require 'net/http'
|
|
2
2
|
require 'uri'
|
3
3
|
require 'json'
|
4
4
|
require 'timeout'
|
5
|
-
|
5
|
+
require_relative 'exceptions'
|
6
6
|
|
7
7
|
module ViaCep
|
8
8
|
class Service
|
9
9
|
BASE_URL = 'https://viacep.com.br/ws'.freeze
|
10
10
|
|
11
|
+
# Fetches the ViaCEP API to request a CEP
|
11
12
|
def self.fetch(cep, timeout)
|
12
13
|
Timeout.timeout(timeout) do
|
13
14
|
uri = URI("#{BASE_URL}/#{cep}/json")
|
@@ -0,0 +1,33 @@
|
|
1
|
+
RSpec.describe ViaCep::Address do
|
2
|
+
describe '#initialize' do
|
3
|
+
context 'when a valid CEP is passed' do
|
4
|
+
subject(:address) { ViaCep::Address.new('80210130') }
|
5
|
+
|
6
|
+
it 'returns the Address' do
|
7
|
+
expect(address.address).not_to be_empty
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
context 'when a invalid CEP is passed' do
|
12
|
+
it 'raises ViaCep::ApiRequestError' do
|
13
|
+
expect { ViaCep::Address.new('000000') }.
|
14
|
+
to raise_error(ViaCep::ApiRequestError)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
context 'when a low timeout is specified' do
|
19
|
+
it 'raises a Timeout::Error' do
|
20
|
+
expect { ViaCep::Address.new('80210130', timeout: 0.001) }.
|
21
|
+
to raise_error(Timeout::Error)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'when a regular timeout is specified' do
|
26
|
+
subject(:address) { ViaCep::Address.new('80210130', timeout: 25) }
|
27
|
+
|
28
|
+
it 'returns the Address' do
|
29
|
+
expect(address.address).not_to be_empty
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
RSpec.describe ViaCep::Service do
|
2
|
+
it 'should have a base URL' do
|
3
|
+
expect(ViaCep::Service::BASE_URL).not_to be_empty
|
4
|
+
end
|
5
|
+
|
6
|
+
describe '.fetch' do
|
7
|
+
context 'when a small timeout is specified' do
|
8
|
+
it 'raises Timeout::Error' do
|
9
|
+
expect { ViaCep::Service.fetch('80210130', 0.001) }.
|
10
|
+
to raise_error(Timeout::Error)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
context 'when a suficient timeout is specified' do
|
15
|
+
subject(:response) { ViaCep::Service.fetch('80210130', 25) }
|
16
|
+
|
17
|
+
it 'returns the response' do
|
18
|
+
expect(response).not_to be_empty
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
context 'when a invalid CEP is passed' do
|
23
|
+
it 'raises ViaCep::ApiRequestError' do
|
24
|
+
expect { ViaCep::Service.fetch('000000', nil) }.
|
25
|
+
to raise_error(ViaCep::ApiRequestError)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require_relative '../lib/viacep'
|
2
|
+
|
3
|
+
RSpec.configure do |config|
|
4
|
+
config.expect_with :rspec do |expectations|
|
5
|
+
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
|
6
|
+
expectations.syntax = :expect
|
7
|
+
end
|
8
|
+
|
9
|
+
config.mock_with :rspec do |mocks|
|
10
|
+
mocks.verify_partial_doubles = true
|
11
|
+
end
|
12
|
+
|
13
|
+
config.shared_context_metadata_behavior = :apply_to_host_groups
|
14
|
+
config.order = :random
|
15
|
+
end
|
data/viacep.gemspec
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require File.expand_path('../lib/viacep', __FILE__)
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = 'viacep'
|
5
|
+
s.version = ViaCep::VERSION
|
6
|
+
s.date = '2018-05-02'
|
7
|
+
s.summary = 'Gem sem dependências e fácil de usar para busca de endereços a partir do CEP utilizando o ViaCEP'
|
8
|
+
s.description = 'Gem sem dependências e fácil de usar para busca de endereços a partir do CEP utilizando o ViaCEP'
|
9
|
+
s.authors = ['Vinicius Brasil (@vnbrs)']
|
10
|
+
s.email = 'marcosbrasilaraujo@gmail.com'
|
11
|
+
s.license = 'MIT'
|
12
|
+
s.homepage = 'https://github.com/vnbrs/viacep'
|
13
|
+
|
14
|
+
s.require_paths = ['lib']
|
15
|
+
s.files = `git ls-files | grep -Ev '^(test|doc|examples|.yardoc|.github)'`.split("\n")
|
16
|
+
|
17
|
+
s.add_development_dependency 'rspec', '~> 3.7'
|
18
|
+
s.add_development_dependency 'yard', '~> 0.9.11'
|
19
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: viacep
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vinicius Brasil (@vnbrs)
|
@@ -24,16 +24,41 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '3.7'
|
27
|
-
|
28
|
-
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: yard
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.9.11
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.9.11
|
41
|
+
description: Gem sem dependências e fácil de usar para busca de endereços a partir
|
42
|
+
do CEP utilizando o ViaCEP
|
43
|
+
email: marcosbrasilaraujo@gmail.com
|
29
44
|
executables: []
|
30
45
|
extensions: []
|
31
46
|
extra_rdoc_files: []
|
32
47
|
files:
|
33
|
-
-
|
34
|
-
-
|
48
|
+
- ".editorconfig"
|
49
|
+
- ".gitignore"
|
50
|
+
- ".yardopts"
|
51
|
+
- Gemfile
|
52
|
+
- README.md
|
35
53
|
- lib/viacep.rb
|
36
|
-
|
54
|
+
- lib/viacep/address.rb
|
55
|
+
- lib/viacep/exceptions.rb
|
56
|
+
- lib/viacep/service.rb
|
57
|
+
- spec/address_spec.rb
|
58
|
+
- spec/service_spec.rb
|
59
|
+
- spec/spec_helper.rb
|
60
|
+
- viacep.gemspec
|
61
|
+
homepage: https://github.com/vnbrs/viacep
|
37
62
|
licenses:
|
38
63
|
- MIT
|
39
64
|
metadata: {}
|
@@ -56,6 +81,6 @@ rubyforge_project:
|
|
56
81
|
rubygems_version: 2.7.6
|
57
82
|
signing_key:
|
58
83
|
specification_version: 4
|
59
|
-
summary: Gem
|
60
|
-
|
84
|
+
summary: Gem sem dependências e fácil de usar para busca de endereços a partir do
|
85
|
+
CEP utilizando o ViaCEP
|
61
86
|
test_files: []
|