via_cep 2.0.1 → 3.1.4

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: 00df8646dc3a6b1717bad27a4d433d4390707f3c1fec92cfc9f6eb872e514d8e
4
- data.tar.gz: 51ddd7c7c2ee022c4fc807a5e52175f6639d89488e3ad0bdc7a98fffecb5ba6e
3
+ metadata.gz: a5b87542eabffdf88cf0c29abc14f443096126c90ebbe62cca399977cd32ddf6
4
+ data.tar.gz: 5aab5e128777294d118d7b79547f2b220b11551f74bf39eddb8e6367758ccf91
5
5
  SHA512:
6
- metadata.gz: ca4c5852b3f90bac32c6d4de7bc23c8ad368a920683b4dba0f80fdaee52724a352b4720247eb82bdd4b9656bccb95597d4cb6bf1aa2c0001300323065fe52650
7
- data.tar.gz: e5f88bf4f73af01835d8b17ffe3365c7240cca292231c0aabada1c4065277da307b65930c4cbc73d106003e89b5f1ac3a066b1efa39602943c7dffb275f31b01
6
+ metadata.gz: 165e86cfe16bbdcbeeac1f279969fe347aaa5b5988cf28f1b049a7bdc50102e1998822ccf7f14dd01446a9fb9c70385e75527bb26b601e21af2a658f2be39f42
7
+ data.tar.gz: cb3130b542ef1b02b5f1345f1205c4c30c587d14d674b1e8043b015e49c314d5a77580293c5052381e43a6daf49239bc0d978f4bd1d75d3aa700b1d09a31e587
data/.codeclimate.yml CHANGED
@@ -1,7 +1,10 @@
1
- engines:
1
+ version: "2"
2
+ plugins:
2
3
  rubocop:
3
4
  enabled: true
4
- ratings:
5
- paths:
6
- - Gemfile.lock
7
- - "**.rb"
5
+ channel: rubocop-0-60
6
+ config:
7
+ file: ".rubocop.yml"
8
+ exclude_patterns:
9
+ - "spec/"
10
+ - "!spec/support/helpers"
@@ -0,0 +1,18 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: bundler
4
+ directory: "/"
5
+ schedule:
6
+ interval: weekly
7
+ time: "09:00"
8
+ open-pull-requests-limit: 10
9
+ ignore:
10
+ - dependency-name: rspec
11
+ versions:
12
+ - 3.10.0
13
+ - dependency-name: rubocop
14
+ versions:
15
+ - 1.10.0
16
+ - 1.11.0
17
+ - 1.8.1
18
+ - 1.9.1
@@ -0,0 +1,19 @@
1
+ # Overview
2
+
3
+ ## Implementation Details
4
+
5
+ ## Required Documentation Updates
6
+
7
+ None.
8
+
9
+ ## Testing Notes
10
+
11
+ None.
12
+
13
+ ## API Changes
14
+
15
+ None.
16
+
17
+ ## External Dependency Changes
18
+
19
+ None.
data/.gitignore CHANGED
@@ -1,6 +1,5 @@
1
1
  /.bundle/
2
2
  /.yardoc
3
- /Gemfile.lock
4
3
  /_yardoc/
5
4
  /coverage/
6
5
  /doc/
data/.rubocop.yml CHANGED
@@ -1,9 +1,12 @@
1
1
  AllCops:
2
- TargetRubyVersion: 2.2
3
-
4
- Style/Encoding:
5
- EnforcedStyle: always
6
- Enabled: true
7
-
8
- Style/FrozenStringLiteralComment:
9
- EnforcedStyle: always
2
+ SuggestExtensions: false
3
+ Exclude:
4
+ - 'spec/**/*.rb'
5
+ Style/Documentation:
6
+ Enabled: false
7
+ Style/HashEachMethods:
8
+ Enabled: false
9
+ Lint/MissingSuper:
10
+ Enabled: false
11
+ Lint/UriEscapeUnescape:
12
+ Enabled: false
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ via_cep
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.6.3
data/.travis.yml CHANGED
@@ -1,7 +1,15 @@
1
+ env:
2
+ global:
3
+ - CC_TEST_REPORTER_ID=$CODE_CLIMATE_TOKEN
1
4
  language: ruby
2
5
  rvm:
3
- - 2.2.3
4
- before_install: gem install bundler -v 1.10.6
5
- addons:
6
- code_climate:
7
- repo_token: c70e0538e62cddacecb3cb86033e4595d0e3a36653ab9dfeb51328f7be55a0f3
6
+ - 2.6.3
7
+ before_script:
8
+ - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
9
+ - chmod +x ./cc-test-reporter
10
+ - ./cc-test-reporter before-build
11
+ - gem install bundler:2.1.4
12
+ script:
13
+ - bundle exec rspec
14
+ after_script:
15
+ - ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
data/FUNDING.yml ADDED
@@ -0,0 +1,3 @@
1
+ # These are supported funding model platforms
2
+
3
+ patreon: marcelobarreto
data/Gemfile CHANGED
@@ -1,13 +1,6 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  source 'https://rubygems.org'
5
4
 
6
5
  # Specify your gem's dependencies in via_cep.gemspec
7
6
  gemspec
8
-
9
- group :test do
10
- gem 'codeclimate-test-reporter', '~> 0.6'
11
- gem 'rubocop', '~> 0.49.0'
12
- gem 'rspec', '~> 3.5'
13
- end
data/Gemfile.lock ADDED
@@ -0,0 +1,65 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ via_cep (3.1.4)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ ast (2.4.2)
10
+ diff-lcs (1.4.4)
11
+ docile (1.4.1)
12
+ json (2.6.3)
13
+ parallel (1.22.1)
14
+ parser (3.2.0.0)
15
+ ast (~> 2.4.1)
16
+ rainbow (3.1.1)
17
+ rake (13.0.3)
18
+ regexp_parser (2.6.1)
19
+ rexml (3.2.5)
20
+ rspec (3.9.0)
21
+ rspec-core (~> 3.9.0)
22
+ rspec-expectations (~> 3.9.0)
23
+ rspec-mocks (~> 3.9.0)
24
+ rspec-core (3.9.3)
25
+ rspec-support (~> 3.9.3)
26
+ rspec-expectations (3.9.2)
27
+ diff-lcs (>= 1.2.0, < 2.0)
28
+ rspec-support (~> 3.9.0)
29
+ rspec-mocks (3.9.1)
30
+ diff-lcs (>= 1.2.0, < 2.0)
31
+ rspec-support (~> 3.9.0)
32
+ rspec-support (3.9.3)
33
+ rubocop (1.43.0)
34
+ json (~> 2.3)
35
+ parallel (~> 1.10)
36
+ parser (>= 3.2.0.0)
37
+ rainbow (>= 2.2.2, < 4.0)
38
+ regexp_parser (>= 1.8, < 3.0)
39
+ rexml (>= 3.2.5, < 4.0)
40
+ rubocop-ast (>= 1.24.1, < 2.0)
41
+ ruby-progressbar (~> 1.7)
42
+ unicode-display_width (>= 2.4.0, < 3.0)
43
+ rubocop-ast (1.24.1)
44
+ parser (>= 3.1.1.0)
45
+ ruby-progressbar (1.11.0)
46
+ simplecov (0.22.0)
47
+ docile (~> 1.1)
48
+ simplecov-html (~> 0.11)
49
+ simplecov_json_formatter (~> 0.1)
50
+ simplecov-html (0.13.0)
51
+ simplecov_json_formatter (0.1.4)
52
+ unicode-display_width (2.4.2)
53
+
54
+ PLATFORMS
55
+ ruby
56
+
57
+ DEPENDENCIES
58
+ rake (~> 13.0.3)
59
+ rspec (~> 3.5)
60
+ rubocop (~> 1.43.0)
61
+ simplecov (~> 0.22.0)
62
+ via_cep!
63
+
64
+ BUNDLED WITH
65
+ 2.1.4
data/Makefile ADDED
@@ -0,0 +1,2 @@
1
+ default:
2
+ ./bin/console
data/README.md CHANGED
@@ -1,7 +1,12 @@
1
1
  # ViaCep
2
2
 
3
3
  ## Status
4
- [![Build Status](https://api.travis-ci.org/marcelobarreto/via_cep.svg?branch=master)](https://travis-ci.org/marcelobarreto/via_cep) [![Code Climate](https://codeclimate.com/github/marcelobarreto/via_cep.svg)](https://codeclimate.com/github/marcelobareto/via_cep) [![Code Climate](https://codeclimate.com/github/marcelobarreto/via_cep/coverage.svg)](https://codeclimate.com/github/marcelobarreto/via_cep)[![RubyGems](http://img.shields.io/gem/dt/via_cep.svg?style=flat)](http://rubygems.org/gems/via_cep)
4
+
5
+ [![Build Status](https://api.travis-ci.org/marcelobarreto/via_cep.svg?branch=master)](https://travis-ci.org/marcelobarreto/via_cep)
6
+ [![Code Climate](https://codeclimate.com/github/marcelobarreto/via_cep.svg)](https://codeclimate.com/github/marcelobareto/via_cep)
7
+ [![Code Climate](https://codeclimate.com/github/marcelobarreto/via_cep/coverage.svg)](https://codeclimate.com/github/marcelobarreto/via_cep)
8
+ [![Ruby Style Guide](https://img.shields.io/badge/code_style-rubocop-brightgreen.svg)](https://github.com/rubocop/rubocop)
9
+ [![RubyGems](http://img.shields.io/gem/dt/via_cep.svg?style=flat)](http://rubygems.org/gems/via_cep)
5
10
 
6
11
 
7
12
  ## Installation
@@ -14,28 +19,29 @@ gem 'via_cep'
14
19
 
15
20
  And then execute:
16
21
 
17
- $ bundle
22
+ ```$ bundle```
18
23
 
19
24
  Or install it yourself as:
20
25
 
21
- $ gem install via_cep
26
+ ```$ gem install via_cep```
22
27
 
23
28
  ## Usage
24
29
 
25
30
  On terminal you can use via_cep like this:
31
+
26
32
  ```ruby
27
- require 'via_cep'
33
+ require 'via_cep'
28
34
 
29
- address = ViaCep::Address.new('01001-000')
30
- address = ViaCep::Address.new(01001000)
35
+ address = ViaCep::Address.new('01001-000')
36
+ address = ViaCep::Address.new(01001000)
31
37
 
32
- address.street # Returns "Praça da Sé"
38
+ address.street # Returns "Praça da Sé"
33
39
  ```
34
40
 
35
41
  You can use from terminal either
36
42
 
37
43
  ```bash
38
- $ zipcode 01001-000 01406000
44
+ $ zipcode 01001-000 01406000
39
45
  ```
40
46
  It will return 2 address with its information
41
47
 
@@ -64,7 +70,7 @@ search.zipcode # => "01001-000"
64
70
 
65
71
  ### Available methods
66
72
 
67
- zipcode, street, complement, neighborhood, city, state, ibge, gia.
73
+ zipcode, street, complement, neighborhood, city, state, ibge, gia.
68
74
 
69
75
  ## Development
70
76
 
data/Rakefile CHANGED
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  require 'bundler/gem_tasks'
data/bin/console CHANGED
@@ -1,7 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
- # encoding: utf-8
3
2
  # frozen_string_literal: true
4
- # encoding: utf-8
5
3
 
6
4
  require 'bundler/setup'
7
5
  require 'via_cep'
data/bin/zipcode CHANGED
@@ -1,12 +1,10 @@
1
1
  #!/usr/bin/env ruby
2
- # encoding: utf-8
3
2
  # frozen_string_literal: true
4
- # encoding: utf-8
5
3
 
6
- $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + '/../lib'))
4
+ $LOAD_PATH.unshift(File.expand_path("#{File.dirname(__FILE__)}/../lib"))
7
5
  require 'via_cep'
8
6
 
9
- if ARGV.count > 0
7
+ if ARGV.count.positive?
10
8
  ARGV.each do |zipcode|
11
9
  address = ViaCep::Address.new(zipcode)
12
10
  puts "#{zipcode}:"
@@ -1,29 +1,49 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
- require_relative 'methods'
5
-
6
3
  module ViaCep
7
- # Address class
8
- class Address
4
+ class Address < Instance
5
+ attr_reader :zipcode
6
+
7
+ #
8
+ # Initialize an instance of ViaCep::Address and retrieve the CEP using the ViaCep WS API.
9
+ #
10
+ # Retrieve a zipcode
11
+ # ViaCep::Address.new('01001000')
12
+ # #=> #<ViaCep::Address:0x0000558da60b3770 @zipcode="01001-000",
13
+ # @street="Praca da Se", @complement="lado impar", @neighborhood="Se", @city="Sao Paulo", @state="SP",
14
+ # @ibge="3550308", @gia="1004", @error=nil>
15
+ #
16
+ # Retrieve a zipcode with a formatted string
17
+ # ViaCep::Address.new('01001-000')
18
+ # #=> #<ViaCep::Address:0x000055e5429aef98 @zipcode="01001-000", @street="Praca da Se", @complement="lado impar",
19
+ # @neighborhood="Se", @city="Sao Paulo", @state="SP", @ibge="3550308", @gia="1004", @error=nil>
20
+ #
21
+ # raise [ArgumentError] Error raised when zipcode is nil.
22
+ # raise [ViaCep::Errors::InvalidZipcodeFormat] Errorraised when zipcode format is invalid.
23
+ # raise [ViaCep::Errors::ZipcodeNotFound] Error raised when the external API is down or the CEP does not exist.
24
+ #
25
+ # return [ViaCep::Address]
26
+ #
27
+
9
28
  def initialize(zipcode)
10
- uri = URI("#{BASE_URL}/#{zipcode}/json/")
11
- request = Net::HTTP.get_response(uri)
29
+ @zipcode = zipcode
30
+ valid?
31
+ call_service
32
+ rescue JSON::ParserError, Net::HTTPBadRequest
33
+ raise ViaCep::Errors::ZipcodeNotFound
34
+ end
12
35
 
13
- raise ViaCep::Errors::InvalidZipcodeFormat unless ViaCep::Validators::
14
- Zipcode.valid?(zipcode)
36
+ private
15
37
 
16
- if request.code === '200'
17
- @response = JSON.parse(request.body)
38
+ def call_service
39
+ response = JSON.parse(ViaCep::HTTP.get(path: zipcode).body)
40
+ raise ViaCep::Errors::ZipcodeNotFound if response['erro']
18
41
 
19
- raise ViaCep::Errors::ZipcodeNotFound if @response['erro']
20
- end
42
+ define_attributes(response)
21
43
  end
22
44
 
23
- ViaCep::METHODS.each do |method_name, response_method_name|
24
- define_method(method_name) do
25
- @response[response_method_name]
26
- end
45
+ def valid?
46
+ raise ViaCep::Errors::InvalidZipcodeFormat unless ViaCep::Validators::Zipcode.valid?(zipcode)
27
47
  end
28
48
  end
29
49
  end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ViaCep
4
+ module HTTP
5
+ #
6
+ # Main HTTP module using Net::HTTP
7
+ #
8
+ # return [Net::HTTPOK] | [Net::HTTPBadRequest]
9
+ #
10
+ def self.get(path:, query: {})
11
+ Net::HTTP.get_response(ViaCep::HTTP.uri(path: path, query: query))
12
+ end
13
+
14
+ def self.was_successful?(request)
15
+ request.code.eql?('200')
16
+ end
17
+
18
+ def self.uri(path:, query: {})
19
+ base_uri = URI(BASE_URL)
20
+ base_uri.path = "/ws/#{URI::Parser.new.escape(path)}/json"
21
+ base_uri.query = URI.encode_www_form(query)
22
+ base_uri
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ViaCep
4
+ class Instance
5
+ #
6
+ # Default class to define methods based on the response
7
+ #
8
+ # return [ViaCep::Instance]
9
+ #
10
+ def define_attributes(response)
11
+ ViaCep::METHODS.each do |method_name, response_key|
12
+ value = response[response_key.to_s]
13
+
14
+ instance_variable_set("@#{method_name}", value)
15
+ self.class.define_method(method_name) do
16
+ instance_variable_get("@#{method_name}")
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -1,16 +1,22 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  module ViaCep
5
- # Translate methods allows us to use metaprogramming.
4
+ #
5
+ # Constant with the params mapped
6
+ #
7
+ # return Hash
8
+ #
6
9
  METHODS = {
7
- zipcode: 'cep',
8
- street: 'logradouro',
9
- complement: 'complemento',
10
- neighborhood: 'bairro',
11
- city: 'localidade',
12
- state: 'uf',
13
- ibge: 'ibge',
14
- gia: 'gia'
10
+ zipcode: :cep,
11
+ street: :logradouro,
12
+ complement: :complemento,
13
+ neighborhood: :bairro,
14
+ city: :localidade,
15
+ state: :uf,
16
+ ibge: :ibge,
17
+ gia: :gia,
18
+ error: :erro,
19
+ ddd: :ddd,
20
+ siafi: :siafi
15
21
  }.freeze
16
22
  end
@@ -1,28 +1,49 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
- require_relative 'methods'
5
-
6
3
  module ViaCep
7
- # Search an address
8
- class SearchByAddress
4
+ class SearchByAddress < Instance
5
+ attr_reader :state, :city, :street
6
+
7
+ #
8
+ # Initialize an instance of ViaCep::SearchByAddress and retrieve the CEP using the ViaCep WS API.
9
+ #
10
+ # Search for a zipcode through the address
11
+ # ViaCep::SearchByAddress.new(state: 'SP', city: 'Sao Paulo', street: 'Praca da Se')
12
+ # #=> #<ViaCep::SearchByAddress:0x000055e542d90210 @state="SP", @city="Sao Paulo", @street="Praca da Se",
13
+ # @zipcode="01001-000", @complement="lado impar", @neighborhood="Se", @ibge="3550308", @gia="1004", @error=nil>
14
+ #
15
+ # raise [ViaCep::Errors::InvalidAddressFormat] Error raised when there is any address field empty.
16
+ # raise [ViaCep::Errors::InvalidStateFormat] Error raised when the state is not a valid one
17
+ #
18
+ # return [ViaCep::SearchByAddress]
19
+ #
20
+
9
21
  def initialize(state:, city:, street:)
10
- city = ViaCep::Utils.parameterize(city)
11
- street = ViaCep::Utils.parameterize(street)
22
+ @state = state
23
+ @city = city
24
+ @street = street
12
25
 
13
- raise ViaCep::Errors::InvalidStateFormat unless ViaCep::Validators::State.valid?(state)
26
+ valid?
27
+ call_service
28
+ rescue JSON::ParserError, Net::HTTPBadRequest
29
+ raise ViaCep::Errors::AddressNotFound
30
+ end
14
31
 
15
- uri = URI("#{BASE_URL}/#{state}/#{city}/#{street}/json")
16
- request = Net::HTTP.get_response(uri)
32
+ private
17
33
 
18
- @response = JSON.parse(request.body) if request.code === '200'
19
- raise ViaCep::Errors::AddressNotFound if @response.include?('Bad Request')
34
+ def valid?
35
+ raise ViaCep::Errors::InvalidAddressFormat unless state && city && street
36
+ raise ViaCep::Errors::InvalidStateFormat unless ViaCep::Validators::State.valid?(state)
20
37
  end
21
38
 
22
- ViaCep::METHODS.each do |method_name, response_method_name|
23
- define_method(method_name) do
24
- @response.first[response_method_name]
25
- end
39
+ def call_service
40
+ request = HTTP.get(path: "#{state}/#{city}/#{street}")
41
+ raise ViaCep::Errors::AddressNotFound unless HTTP.was_successful?(request)
42
+
43
+ response = JSON.parse(request.body)
44
+ raise ViaCep::Errors::AddressNotFound if response.length.eql?(0)
45
+
46
+ define_attributes(response[0])
26
47
  end
27
48
  end
28
49
  end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ViaCep
4
+ module Validators
5
+ module State
6
+ class << self
7
+ #
8
+ # Validates if the state passed is a valid one.
9
+ #
10
+ # Return if is valid or not
11
+ # ViaCep::Validators::State.valid?('foo')
12
+ # #=> false
13
+ # ViaCep::Validators::State.valid?('RJ')
14
+ # #=> true
15
+ #
16
+ # return Boolean
17
+ #
18
+ def valid?(state)
19
+ %w[
20
+ AC AL AP AM BA CE DF ES GO
21
+ MA MT MS MG PR PB PA PE PI
22
+ RJ RN RS RO RR SC SE SP TO
23
+ ].include?(state.to_s)
24
+ end
25
+ end
26
+ end
27
+
28
+ # Zipcode validator
29
+ module Zipcode
30
+ class << self
31
+ #
32
+ # Validates if the zipcode passed is a valid one.
33
+ #
34
+ # Return if is valid or not
35
+ # ViaCep::Validators::Zipcode.valid?('0')
36
+ # #=> false
37
+ # ViaCep::Validators::Zipcode.valid?('01001000')
38
+ # #=> true
39
+ #
40
+ # return Boolean
41
+ #
42
+ def valid?(zipcode)
43
+ zipcode = zipcode.to_s
44
+ !!zipcode.match(/^[0-9]{5}(-)[0-9]{3}$/) || !!zipcode.match(/^[0-9]{8}$/)
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -1,6 +1,5 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  module ViaCep
5
- VERSION = '2.0.1'.freeze
4
+ VERSION = '3.1.4'
6
5
  end
data/lib/via_cep.rb CHANGED
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  require 'via_cep/version'
@@ -6,22 +5,30 @@ require 'net/http'
6
5
  require 'uri'
7
6
  require 'json'
8
7
 
8
+ # Validators
9
+ require 'via_cep/validators'
10
+
11
+ # HTTP
12
+ require 'via_cep/http'
13
+
9
14
  # Core
10
- require 'via_cep/address'
11
15
  require 'via_cep/methods'
16
+ require 'via_cep/instance'
17
+ require 'via_cep/address'
12
18
  require 'via_cep/search_by_address'
13
19
 
14
- # Validators
15
- require 'via_cep/validators/zipcode'
16
- require 'via_cep/validators/state'
20
+ module ViaCep
21
+ BASE_URL = 'https://viacep.com.br'
22
+
23
+ module Errors
24
+ class ZipcodeNotFound < StandardError; end
25
+
26
+ class InvalidZipcodeFormat < StandardError; end
17
27
 
18
- # Errors
19
- require 'via_cep/errors/invalid_zipcode_format'
20
- require 'via_cep/errors/invalid_state_format'
21
- require 'via_cep/errors/zipcode_not_found'
22
- require 'via_cep/errors/address_not_found'
28
+ class InvalidStateFormat < StandardError; end
23
29
 
24
- # Utils
25
- require 'via_cep/utils/utils'
30
+ class InvalidAddressFormat < StandardError; end
26
31
 
27
- BASE_URL = 'https://viacep.com.br/ws'.freeze
32
+ class AddressNotFound < StandardError; end
33
+ end
34
+ end
data/via_cep.gemspec CHANGED
@@ -1,26 +1,29 @@
1
- # coding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
- lib = File.expand_path('../lib', __FILE__)
3
+ lib = File.expand_path('lib', __dir__)
5
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
6
5
  require 'via_cep/version'
7
6
 
8
- Gem::Specification.new do |s|
9
- s.name = 'via_cep'
10
- s.version = ViaCep::VERSION
11
- s.authors = ['Marcelo Barreto (@marcelobarreto)']
12
- s.email = ['marcelobarretojunior@gmail.com']
13
- s.summary = 'Brazillian zip-code information'
14
- s.homepage = 'http://www.github.com/marcelobarreto/via_cep'
15
- s.license = 'MIT'
7
+ Gem::Specification.new do |spec|
8
+ spec.name = 'via_cep'
9
+ spec.version = ViaCep::VERSION
10
+ spec.required_ruby_version = Gem::Requirement.new('>= 2.6')
11
+ spec.authors = ['Marcelo Barreto (@marcelobarreto)']
12
+ spec.email = ['marcelobarretojunior@gmail.com']
13
+ spec.summary = 'Brazillian zip-code information'
14
+ spec.homepage = 'http://www.github.com/marcelobarreto/via_cep'
15
+ spec.license = 'MIT'
16
16
 
17
- s.files = `git ls-files -z`.split("\x0").reject do |f|
17
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
18
18
  f.match(%r{^(test|spec|features)/})
19
19
  end
20
20
 
21
- s.bindir = 'bin'
22
- s.executables = ['zipcode']
23
- s.require_paths = ['lib']
21
+ spec.bindir = 'bin'
22
+ spec.executables = ['zipcode']
23
+ spec.require_paths = ['lib']
24
24
 
25
- s.add_dependency 'activesupport', '~> 5.0'
25
+ spec.add_development_dependency 'rake', '~> 13.0.3'
26
+ spec.add_development_dependency 'rspec', '~> 3.5'
27
+ spec.add_development_dependency 'rubocop', '~> 1.43.0'
28
+ spec.add_development_dependency 'simplecov', '~> 0.22.0'
26
29
  end
metadata CHANGED
@@ -1,30 +1,72 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: via_cep
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 3.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marcelo Barreto (@marcelobarreto)
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-20 00:00:00.000000000 Z
11
+ date: 2024-09-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: activesupport
14
+ name: rake
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '5.0'
20
- type: :runtime
19
+ version: 13.0.3
20
+ type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '5.0'
27
- description:
26
+ version: 13.0.3
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.5'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.5'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rubocop
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 1.43.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 1.43.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: simplecov
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.22.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.22.0
69
+ description:
28
70
  email:
29
71
  - marcelobarretojunior@gmail.com
30
72
  executables:
@@ -33,13 +75,20 @@ extensions: []
33
75
  extra_rdoc_files: []
34
76
  files:
35
77
  - ".codeclimate.yml"
78
+ - ".github/dependabot.yml"
79
+ - ".github/pull_request_template.md"
36
80
  - ".gitignore"
37
81
  - ".rspec"
38
82
  - ".rubocop.yml"
83
+ - ".ruby-gemset"
84
+ - ".ruby-version"
39
85
  - ".travis.yml"
40
86
  - CODE_OF_CONDUCT.md
87
+ - FUNDING.yml
41
88
  - Gemfile
89
+ - Gemfile.lock
42
90
  - LICENSE.txt
91
+ - Makefile
43
92
  - README.md
44
93
  - Rakefile
45
94
  - bin/console
@@ -47,22 +96,18 @@ files:
47
96
  - bin/zipcode
48
97
  - lib/via_cep.rb
49
98
  - lib/via_cep/address.rb
50
- - lib/via_cep/errors/address_not_found.rb
51
- - lib/via_cep/errors/invalid_state_format.rb
52
- - lib/via_cep/errors/invalid_zipcode_format.rb
53
- - lib/via_cep/errors/zipcode_not_found.rb
99
+ - lib/via_cep/http.rb
100
+ - lib/via_cep/instance.rb
54
101
  - lib/via_cep/methods.rb
55
102
  - lib/via_cep/search_by_address.rb
56
- - lib/via_cep/utils/utils.rb
57
- - lib/via_cep/validators/state.rb
58
- - lib/via_cep/validators/zipcode.rb
103
+ - lib/via_cep/validators.rb
59
104
  - lib/via_cep/version.rb
60
105
  - via_cep.gemspec
61
106
  homepage: http://www.github.com/marcelobarreto/via_cep
62
107
  licenses:
63
108
  - MIT
64
109
  metadata: {}
65
- post_install_message:
110
+ post_install_message:
66
111
  rdoc_options: []
67
112
  require_paths:
68
113
  - lib
@@ -70,16 +115,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
70
115
  requirements:
71
116
  - - ">="
72
117
  - !ruby/object:Gem::Version
73
- version: '0'
118
+ version: '2.6'
74
119
  required_rubygems_version: !ruby/object:Gem::Requirement
75
120
  requirements:
76
121
  - - ">="
77
122
  - !ruby/object:Gem::Version
78
123
  version: '0'
79
124
  requirements: []
80
- rubyforge_project:
81
- rubygems_version: 2.7.9
82
- signing_key:
125
+ rubygems_version: 3.4.6
126
+ signing_key:
83
127
  specification_version: 4
84
128
  summary: Brazillian zip-code information
85
129
  test_files: []
@@ -1,15 +0,0 @@
1
- # encoding: utf-8
2
- # frozen_string_literal: true
3
-
4
- module ViaCep
5
- module Errors
6
- # This class is responsible to show an error
7
- class AddressNotFound < ArgumentError
8
- attr_reader :message
9
-
10
- def initialize
11
- @message = 'Not found anything for that address'
12
- end
13
- end
14
- end
15
- end
@@ -1,15 +0,0 @@
1
- # encoding: utf-8
2
- # frozen_string_literal: true
3
-
4
- module ViaCep
5
- module Errors
6
- # This class is responsible to show an error
7
- class InvalidStateFormat < ArgumentError
8
- attr_reader :message
9
-
10
- def initialize
11
- @message = 'State has an invalid format'
12
- end
13
- end
14
- end
15
- end
@@ -1,15 +0,0 @@
1
- # encoding: utf-8
2
- # frozen_string_literal: true
3
-
4
- module ViaCep
5
- module Errors
6
- # This class is responsible to show an error
7
- class InvalidZipcodeFormat < ArgumentError
8
- attr_reader :message
9
-
10
- def initialize
11
- @message = 'Zipcode has an invalid format'
12
- end
13
- end
14
- end
15
- end
@@ -1,15 +0,0 @@
1
- # encoding: utf-8
2
- # frozen_string_literal: true
3
-
4
- module ViaCep
5
- module Errors
6
- # This class is responsible to show an error
7
- class ZipcodeNotFound < StandardError
8
- attr_reader :message
9
-
10
- def initialize
11
- @message = 'Not found anything for that zipcode'
12
- end
13
- end
14
- end
15
- end
@@ -1,24 +0,0 @@
1
- # encoding: utf-8
2
- # frozen_string_literal: true
3
-
4
- require 'active_support/all'
5
-
6
- module ViaCep
7
- # Utils module
8
- class Utils
9
- class << self
10
- def handle_whitespaces(string)
11
- string.split(' ').join('%20')
12
- end
13
-
14
- def handle_accents(string)
15
- ActiveSupport::Inflector.transliterate(string)
16
- end
17
-
18
- def parameterize(string)
19
- string = handle_accents(string)
20
- handle_whitespaces(string)
21
- end
22
- end
23
- end
24
- end
@@ -1,23 +0,0 @@
1
- # encoding: utf-8
2
- # frozen_string_literal: true
3
-
4
- module ViaCep
5
- module Validators
6
- # State validator
7
- module State
8
- class << self
9
- def valid?(state)
10
- states.include?(state.to_s)
11
- end
12
-
13
- def states
14
- %w[
15
- AC AL AP AM BA CE DF ES GO
16
- MA MT MS MG PR PB PA PE PI
17
- RJ RN RS RO RR SC SE SP TO
18
- ]
19
- end
20
- end
21
- end
22
- end
23
- end
@@ -1,22 +0,0 @@
1
- # encoding: utf-8
2
- # frozen_string_literal: true
3
-
4
- module ViaCep
5
- module Validators
6
- # Zipcode validator
7
- module Zipcode
8
- class << self
9
- def valid?(zipcode)
10
- zipcode = zipcode.to_s
11
-
12
- return true if match_regex?(zipcode)
13
- end
14
-
15
- def match_regex?(zipcode)
16
- zipcode = zipcode.to_s
17
- zipcode.match(/^[0-9]{5}(-)[0-9]{3}$/) || zipcode.match(/^[0-9]{8}$/)
18
- end
19
- end
20
- end
21
- end
22
- end