viacep 1.0.0 → 2.0.3

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: 975b270e25133dc39b46c6139c707879d34b52cf4d264335e20bfc29099d5e26
4
- data.tar.gz: f16ffb518a74e69b62f1fbba4c08b17e8c81487a8475365d13dc680dcf8b1a7a
3
+ metadata.gz: d996e5aa0ad22ffabeddff59c6e01715e82506cb67ba9161c7b706c0bf3b1231
4
+ data.tar.gz: 511ab0884767f8c4534454ce935dde9d6da9a7e7571e72b8f72caa2c875a2bc3
5
5
  SHA512:
6
- metadata.gz: 2cc2dcf8bd8ef9ad4ed68be18ab89ea0c01c7bb8784f1f9475243123d3d588d2a7c336b55431285a52a41b3104bed62acd6536268ec0fe8c6501ba6a6ced6b29
7
- data.tar.gz: c7991ce8de2e218187524ac6cebbaded33991d5db420649e1044c3f1f13d8e0a21e817feb80be36f72940731bf3adbf7a21497645ddeb351e07633f83ab31908
6
+ metadata.gz: 8822385880160352463509f979354cd456dc72edc85f14906ab69d7d03a1a09c06c76b32d62f3daf9a449c7669a015304be9c0ecf680f1ce6f89996840a1cffb
7
+ data.tar.gz: 5debef0f5bd8b1babb8b268f82b62872a44d0ce59ce4f0e731e77209ebcb5a03b5e00300506abd448698fd080d12086d7186eee4b8a1633c5063adbd513aa3ef
@@ -0,0 +1,9 @@
1
+ root = true
2
+
3
+ [*]
4
+ indent_style = space
5
+ indent_size = 2
6
+ end_of_line = lf
7
+ charset = utf-8
8
+ trim_trailing_whitespace = true
9
+ insert_final_newline = true
@@ -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
@@ -0,0 +1,30 @@
1
+ # Changelog
2
+ All notable changes to this project will be documented in this file.
3
+
4
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
5
+
6
+ ## Unreleased
7
+ ### Added
8
+ N/A
9
+
10
+ ### Changed
11
+ N/A
12
+
13
+ ### Deprecated
14
+ N/A
15
+
16
+ ### Removed
17
+ N/A
18
+
19
+ ### Fixed
20
+ N/A
21
+
22
+ ### Security
23
+ N/A
24
+
25
+ ## [2.0.3] - 2019-07-20
26
+ ### Added
27
+ - Create CHANGELOG.md file to track changes.
28
+
29
+ ### Fixed
30
+ - Improve public API documentation
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "https://rubygems.org"
2
+ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
3
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2019 Vinicius Brasil
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,50 @@
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 ![Tests](https://github.com/vnbrs/viacep/workflows/Tests/badge.svg) [![GitHub license](https://img.shields.io/github/license/vnbrs/burocracia.cr.svg)](https://github.com/vnbrs/burocracia.cr/blob/master/LICENSE)
4
+ > Dependency-less zipcode lookup gem for Brazilian addresses with an easy-to-use API and useful features such as timeout.
5
+
6
+ ## Installing
7
+
8
+ You can easily install viacep through [RubyGems](https://rubygems.org/gems/viacep/):
9
+
10
+ ```shell
11
+ gem install viacep
12
+ => Rock on! 🚀
13
+ ```
14
+
15
+ or add the following to your Gemfile:
16
+
17
+ ```shell
18
+ gem "viacep"
19
+ ```
20
+
21
+ ## Usage
22
+
23
+ ```ruby
24
+ require 'viacep'
25
+
26
+ # with unformatted zipcodes... =)
27
+ ViaCep::Address.new('80210130')
28
+ => #<ViaCep::Address:0x00007fe52a8a0568 @cep="80210-130", @address="Rua José Ananias Mauad", @neighborhood="Jardim Botânico", @city="Curitiba", @state="PR", @ibge="4106902", @gia="">
29
+
30
+ # with formatted zipcodes... =)
31
+ ViaCep::Address.new('13035-680')
32
+ => #<ViaCep::Address:0x00007fe52a99e730 @cep="13035-680", @address="Avenida João Jorge", @neighborhood="Vila Industrial", @city="Campinas", @state="SP", @ibge="3509502", @gia="2446">
33
+
34
+ # or even an nonexistent zipcode... =(
35
+ ViaCep::Address.new('12345678')
36
+ => exception thrown: ViaCep::ApiRequestError
37
+
38
+ # and specifying a timeout in seconds... =)
39
+ ViaCep::Address.new('80210130', timeout: 0.2)
40
+ => exception thrown: Timeout::Error (execution expired)
41
+ ```
42
+
43
+ ## Contributing
44
+
45
+ 1. Create a fork (https://github.com/vnbrs/viacep/fork)
46
+ 2. Create a branch (git checkout -b my-new-feature)
47
+ 3. Make a commit (git commit -am 'Add some feature')
48
+ 4. Push your code (git push origin my-new-feature)
49
+ 5. Create a Pull Request
50
+ 6. Thanks! 🤙🏼
@@ -0,0 +1 @@
1
+ theme: jekyll-theme-minimal
@@ -1,24 +1,6 @@
1
- require 'service'
2
-
3
1
  module ViaCep
4
- class Address
5
- attr_reader :cep, :address, :neighborhood, :city, :state, :ibge, :gia
6
-
7
- def initialize(cep, options = {})
8
- cep = cep.delete('^0-9')
9
- fill_from_response(Service.fetch(cep, options[:timeout]))
10
- end
11
-
12
- private
2
+ VERSION = "2.0.3".freeze
13
3
 
14
- def fill_from_response(response)
15
- @cep = response['cep']
16
- @address = response['logradouro']
17
- @neighborhood = response['bairro']
18
- @city = response['localidade']
19
- @state = response['uf']
20
- @ibge = response['ibge']
21
- @gia = response['gia']
22
- end
23
- end
4
+ require_relative "viacep/address"
5
+ require_relative "viacep/exceptions"
24
6
  end
@@ -0,0 +1,55 @@
1
+ require_relative 'service'
2
+
3
+ module ViaCep
4
+ class Address
5
+ attr_reader :cep, :address, :neighborhood, :city, :state, :ibge, :gia
6
+
7
+ #
8
+ # Initializes an instance of ViaCep::Address and fetches the CEP using the external API.
9
+ #
10
+ # @example Fetch a CEP
11
+ # ViaCep::Address.new('80210130')
12
+ # #=> #<ViaCep::Address:0x00007fe52a8a0568 @cep="80210-130", @address="Rua José Ananias Mauad", @neighborhood="Jardim Botânico", @city="Curitiba", @state="PR", @ibge="4106902", @gia="">
13
+ #
14
+ # @example Fetch a CEP with a formatted string
15
+ # ViaCep::Address.new('80210-130')
16
+ # #=> #<ViaCep::Address:0x00007fe52a8a0568 @cep="80210-130", @address="Rua José Ananias Mauad", @neighborhood="Jardim Botânico", @city="Curitiba", @state="PR", @ibge="4106902", @gia="">
17
+ #
18
+ # @param [String] cep The CEP to be fetched.
19
+ # @option options [Integer] :timeout The timeout in seconds to the request.
20
+ #
21
+ # @raise [ArgumentError] This is raised when CEP is nil.
22
+ # @raise [ArgumentError] This is raised when CEP format is invalid.
23
+ # @raise [ViaCep::ApiRequestError] This is raised when the external API is down or the CEP does not exist.
24
+ # @raise [Timeout::Error] This is raised when the timeout argument is specified and the request timed out.
25
+ #
26
+ # @return [ViaCep::Address]
27
+ #
28
+ def initialize(cep, options = {})
29
+ if cep.nil?
30
+ raise ArgumentError, 'CEP cannot be nil'
31
+ end
32
+
33
+ cep = cep.to_s.delete('^0-9')
34
+
35
+ if cep.length != 8
36
+ raise ArgumentError, 'CEP must have 8 digits'
37
+ end
38
+
39
+ response = Service.fetch cep, options[:timeout]
40
+ fill_from response
41
+ end
42
+
43
+ private
44
+
45
+ def fill_from(response)
46
+ @cep = response['cep']
47
+ @address = response['logradouro']
48
+ @neighborhood = response['bairro']
49
+ @city = response['localidade']
50
+ @state = response['uf']
51
+ @ibge = response['ibge']
52
+ @gia = response['gia']
53
+ end
54
+ end
55
+ end
@@ -1,4 +1,4 @@
1
1
  module ViaCep
2
2
  class Error < StandardError; end
3
- class AddressNotFound < Error; end
3
+ class ApiRequestError < Error; end
4
4
  end
@@ -0,0 +1,49 @@
1
+ require 'net/http'
2
+ require 'uri'
3
+ require 'json'
4
+ require 'timeout'
5
+ require_relative 'exceptions'
6
+
7
+ module ViaCep
8
+ class Service
9
+ BASE_URL = 'https://viacep.com.br/ws'.freeze
10
+
11
+ #
12
+ # Fetches the ViaCEP API to request a CEP.
13
+ #
14
+ # @example Fetch a CEP with no timeout.
15
+ # ViaCep::Service.fetch('80210130', nil)
16
+ # #=> {"cep"=>"80210-130", "logradouro"=>"Rua José Ananias Mauad", "complemento"=>"", "bairro"=>"Jardim Botânico", "localidade"=>"Curitiba", "uf"=>"PR", "unidade"=>"", "ibge"=>"4106902", "gia"=>""}
17
+ #
18
+ # @example Fetch a CEP with a timeout of 30 seconds.
19
+ # ViaCep::Service.fetch('80210130', 30)
20
+ # #=> {"cep"=>"80210-130", "logradouro"=>"Rua José Ananias Mauad", "complemento"=>"", "bairro"=>"Jardim Botânico", "localidade"=>"Curitiba", "uf"=>"PR", "unidade"=>"", "ibge"=>"4106902", "gia"=>""}
21
+ #
22
+ # @param [String] cep The CEP to be fetched.
23
+ # @param [Integer, nil] timeout The timeout in seconds for the request to be finished.
24
+ #
25
+ # @raise [ViaCep::ApiRequestError] This is raised when the external API is down or the CEP does not exist.
26
+ # @raise [Timeout::Error] This is raised when the timeout argument is specified and the request timed out.
27
+ #
28
+ # @return [Hash]
29
+ #
30
+ def self.fetch(cep, timeout)
31
+ Timeout.timeout(timeout) do
32
+ uri = URI("#{BASE_URL}/#{cep}/json")
33
+ request = Net::HTTP.get_response(uri)
34
+
35
+ if request.code == '200'
36
+ response = JSON.parse(request.body)
37
+
38
+ if response["erro"]
39
+ raise ApiRequestError, "The server responded with HTTP 200 could not process the request"
40
+ end
41
+
42
+ response
43
+ else
44
+ raise ApiRequestError, "The server responded with HTTP #{request.code}"
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,53 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe ViaCep::Address do
4
+ describe '#initialize' do
5
+ context 'when a valid CEP is passed' do
6
+ it 'returns the Address' do
7
+ mock_viacep_success
8
+
9
+ address = ViaCep::Address.new('80210130')
10
+ expect(address.address).not_to be_empty
11
+ end
12
+ end
13
+
14
+ context 'when a invalid length CEP is passed' do
15
+ it 'raises ArgumentError' do
16
+ expect { ViaCep::Address.new('000000') }
17
+ .to raise_error(ArgumentError)
18
+ end
19
+ end
20
+
21
+ context 'when a unexistent CEP is passed' do
22
+ it 'raises ViaCep::ApiRequestError' do
23
+ mock_viacep_not_found
24
+ expect { ViaCep::Address.new('00000000') }
25
+ .to raise_error(ViaCep::ApiRequestError)
26
+ end
27
+ end
28
+
29
+ context 'when a nil CEP is passed' do
30
+ it 'raises ArgumentError' do
31
+ expect { ViaCep::Address.new(nil) }
32
+ .to raise_error(ArgumentError)
33
+ end
34
+ end
35
+
36
+ context 'when a low timeout is specified' do
37
+ it 'raises a Timeout::Error' do
38
+ mock_viacep_slow_success(delay_in_seconds: 0.01)
39
+ expect { ViaCep::Address.new('80210130', timeout: 0.001) }
40
+ .to raise_error(Timeout::Error)
41
+ end
42
+ end
43
+
44
+ context 'when a regular timeout is specified' do
45
+ it 'returns the Address' do
46
+ mock_viacep_success
47
+
48
+ address = ViaCep::Address.new('80210130', timeout: 3.0)
49
+ expect(address.address).not_to be_empty
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,28 @@
1
+ require 'webmock/rspec'
2
+
3
+ module ViaCep
4
+ module Test
5
+ module RequestMocker
6
+ def mock_viacep_success
7
+ WebMock.stub_request(:get, /viacep/).to_return(File.new("#{__dir__}/viacep_success.txt"))
8
+ end
9
+
10
+ def mock_viacep_not_found
11
+ WebMock.stub_request(:get, /viacep/).to_return(File.new("#{__dir__}/viacep_not_found.txt"))
12
+ end
13
+
14
+ def mock_viacep_invalid_format
15
+ WebMock.stub_request(:get, /viacep/).to_return(File.new("#{__dir__}/viacep_invalid_format.txt"))
16
+ end
17
+
18
+ def mock_viacep_slow_success(delay_in_seconds:)
19
+ success = lambda do |request|
20
+ sleep delay_in_seconds
21
+ File.new("#{__dir__}/viacep_success.txt")
22
+ end
23
+
24
+ WebMock.stub_request(:get, /viacep/).to_return(success)
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,8 @@
1
+ HTTP/1.1 400 Bad Request
2
+ Server: nginx/1.14.0
3
+ Date: Thu, 14 Feb 2019 23:35:24 GMT
4
+ Content-Type: text/html; charset=utf-8
5
+ Transfer-Encoding: chunked
6
+ Connection: keep-alive
7
+
8
+ <h3>ViaCEP Bad Request (400)</h3>
@@ -0,0 +1,17 @@
1
+ HTTP/1.1 200 OK
2
+ Server: nginx/1.14.0
3
+ Date: Thu, 14 Feb 2019 23:34:10 GMT
4
+ Content-Type: application/json; charset=utf-8
5
+ Transfer-Encoding: chunked
6
+ Connection: keep-alive
7
+ Access-Control-Allow-Origin: *
8
+ Access-Control-Allow-Methods: GET, OPTIONS
9
+ Access-Control-Allow-Headers: Content-Type, X-Request-With, X-Requested-By
10
+ Access-Control-Allow-Credentials: true
11
+ Access-Control-Max-Age: 86400
12
+ Cache-Control: max-age=3600
13
+ Cache-Control: public
14
+
15
+ {
16
+ "erro": true
17
+ }
@@ -0,0 +1,25 @@
1
+ HTTP/1.1 200 OK
2
+ Server: nginx/1.14.0
3
+ Date: Thu, 14 Feb 2019 23:32:54 GMT
4
+ Content-Type: application/json; charset=utf-8
5
+ Transfer-Encoding: chunked
6
+ Connection: keep-alive
7
+ Access-Control-Allow-Origin: *
8
+ Access-Control-Allow-Methods: GET, OPTIONS
9
+ Access-Control-Allow-Headers: Content-Type, X-Request-With, X-Requested-By
10
+ Access-Control-Allow-Credentials: true
11
+ Access-Control-Max-Age: 86400
12
+ Cache-Control: max-age=3600
13
+ Cache-Control: public
14
+
15
+ {
16
+ "cep": "13035-680",
17
+ "logradouro": "Avenida João Jorge",
18
+ "complemento": "",
19
+ "bairro": "Vila Industrial",
20
+ "localidade": "Campinas",
21
+ "uf": "SP",
22
+ "unidade": "",
23
+ "ibge": "3509502",
24
+ "gia": "2446"
25
+ }
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe ViaCep::Service do
4
+ it 'should have a base URL' do
5
+ expect(ViaCep::Service::BASE_URL).not_to be_empty
6
+ end
7
+
8
+ describe '.fetch' do
9
+ context 'when a small timeout is specified' do
10
+ it 'raises Timeout::Error' do
11
+ mock_viacep_slow_success(delay_in_seconds: 0.01)
12
+ expect { ViaCep::Service.fetch('80210130', 0.001) }
13
+ .to raise_error(Timeout::Error)
14
+ end
15
+ end
16
+
17
+ context 'when a suficient timeout is specified' do
18
+ it 'returns the response' do
19
+ mock_viacep_success
20
+ response = ViaCep::Service.fetch('80210130', 5.0)
21
+ expect(response).not_to be_empty
22
+ end
23
+ end
24
+
25
+ context 'when a invalid CEP is passed' do
26
+ it 'raises ViaCep::ApiRequestError' do
27
+ mock_viacep_invalid_format
28
+ expect { ViaCep::Service.fetch('000000', nil) }
29
+ .to raise_error(ViaCep::ApiRequestError)
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,24 @@
1
+ require_relative '../lib/viacep'
2
+ require_relative './mock/request_mocker'
3
+ require 'webmock/rspec'
4
+
5
+ RSpec.configure do |config|
6
+ config.include ViaCep::Test::RequestMocker
7
+
8
+ config.expect_with :rspec do |expectations|
9
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
10
+ expectations.syntax = :expect
11
+ end
12
+
13
+ config.mock_with :rspec do |mocks|
14
+ mocks.verify_partial_doubles = true
15
+ end
16
+
17
+ config.shared_context_metadata_behavior = :apply_to_host_groups
18
+ config.order = :random
19
+
20
+ config.before(:each) do
21
+ WebMock.reset!
22
+ WebMock.disable_net_connect!
23
+ end
24
+ end
@@ -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 = 'vini@hey.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 'webmock', '~> 3.8.3'
19
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: viacep
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 2.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vinicius Brasil (@vnbrs)
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2011-09-29 00:00:00.000000000 Z
11
+ date: 2018-05-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -25,29 +25,46 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '3.7'
27
27
  - !ruby/object:Gem::Dependency
28
- name: httparty
28
+ name: webmock
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.13.7
34
- type: :runtime
33
+ version: 3.8.3
34
+ type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.13.7
41
- description:
42
- email: vnbrs@icloud.com
40
+ version: 3.8.3
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: vini@hey.com
43
44
  executables: []
44
45
  extensions: []
45
46
  extra_rdoc_files: []
46
47
  files:
47
- - lib/exceptions.rb
48
- - lib/service.rb
48
+ - ".editorconfig"
49
+ - ".gitignore"
50
+ - CHANGELOG.md
51
+ - Gemfile
52
+ - LICENSE
53
+ - README.md
54
+ - _config.yml
49
55
  - lib/viacep.rb
50
- homepage:
56
+ - lib/viacep/address.rb
57
+ - lib/viacep/exceptions.rb
58
+ - lib/viacep/service.rb
59
+ - spec/address_spec.rb
60
+ - spec/mock/request_mocker.rb
61
+ - spec/mock/viacep_invalid_format.txt
62
+ - spec/mock/viacep_not_found.txt
63
+ - spec/mock/viacep_success.txt
64
+ - spec/service_spec.rb
65
+ - spec/spec_helper.rb
66
+ - viacep.gemspec
67
+ homepage: https://github.com/vnbrs/viacep
51
68
  licenses:
52
69
  - MIT
53
70
  metadata: {}
@@ -66,10 +83,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
66
83
  - !ruby/object:Gem::Version
67
84
  version: '0'
68
85
  requirements: []
69
- rubyforge_project:
70
- rubygems_version: 2.7.3
86
+ rubygems_version: 3.1.2
71
87
  signing_key:
72
88
  specification_version: 4
73
- summary: Gem responsável por buscar endereços a partir do CEP utilizando a API do
74
- ViaCEP com features úteis como timeout.
89
+ summary: Gem sem dependências e fácil de usar para busca de endereços a partir do
90
+ CEP utilizando o ViaCEP
75
91
  test_files: []
@@ -1,20 +0,0 @@
1
- require 'httparty'
2
- require 'timeout'
3
- require 'exceptions'
4
-
5
- module ViaCep
6
- class Service
7
- BASE_URI = 'https://viacep.com.br/ws'
8
-
9
- def self.fetch(cep, timeout = nil)
10
- Timeout::timeout(timeout) do
11
- response = HTTParty.get("#{BASE_URI}/#{cep}/json")
12
- if response.code == 404 || response.parsed_response['erro']
13
- raise AddressNotFound, 'the API responded with HTTP 404'
14
- else
15
- response.parsed_response
16
- end
17
- end
18
- end
19
- end
20
- end