bra_document_validation 1.0.0 → 1.0.2

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: 27d8c78d6db49bc48c0e1dfd5ed47ed8dc9ae540e2b8972c28ef1a19d763b8bc
4
- data.tar.gz: 2a2694b688925f879cf5d0fd2d859e107eab8305c33ea87f402674c7f469540f
3
+ metadata.gz: be7fed5ec9bede122da6a1c7199604ac279bb2ad6fa306a1f7bae4b82b23f348
4
+ data.tar.gz: 2a15db815a15aceb31e7328da962362f6d99b5b5f285782c9a79ecd195d0a5ec
5
5
  SHA512:
6
- metadata.gz: 3179114b07dbd55af289d116e5d2c8dfb860aa67c7b6b7523d5051a79a17b1bc3e8e3d91a38d33b5fc54e544ad3df711b30dd0cecb20f2a4182a9b902dca2c3c
7
- data.tar.gz: 047cede5bb6692ac13edd7fc06aca61382954df487d1708103de5f25ff96b4d785e28871449ac788b80a1aa86ede1b171d9a09d5a8299bca84a8205c6fd4dbb1
6
+ metadata.gz: 810e1af48bfc0ea25c639e119a591f6407935ecc2ee49f1db193e1d098ef1619daca3cfd34cc1ae1555828136a85a8c2f70e96ecd759af4e2e56d207b7ea89ec
7
+ data.tar.gz: 848176ec17b7f940ea092f9a28245360b24045851e97212cff3b174784a2b17d8c184466bdd0fa4aed535b22ffce52256b5052671557ed9e430cff1a4e3857cb
@@ -0,0 +1,8 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: bundler
4
+ directory: "/"
5
+ schedule:
6
+ interval: daily
7
+ time: "09:00"
8
+ open-pull-requests-limit: 10
data/.travis.yml CHANGED
@@ -2,5 +2,8 @@
2
2
  language: ruby
3
3
  cache: bundler
4
4
  rvm:
5
- - 2.7.2
5
+ - 2.7.5
6
+ - 3.0.3
7
+ - 3.1.1
8
+
6
9
  before_install: gem install bundler -v 2.1.4
data/CHANGELOG.md CHANGED
@@ -1,5 +1,6 @@
1
1
 
2
2
  # Changelog
3
+
3
4
  All notable changes to this project will be documented in this file.
4
5
 
5
6
  The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
@@ -7,6 +8,28 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
7
8
 
8
9
  ## [Unreleased]
9
10
 
11
+ ## [1.0.2] - 2022-01-04
12
+
13
+ ### Removed
14
+
15
+ - Drop Support for Ruby 2.6 or less
16
+
17
+ ### Refactory
18
+
19
+ - Refactory CPF and CNPJ Validators to use new bra_documents's methods
20
+
21
+ ### Added
22
+
23
+ - Add new validator to check if an attribute is a CPF or a CNPJ
24
+
25
+ ## [1.0.1] - 2020-11-08
26
+
27
+ ### Fixed
28
+
29
+ - Fix Gemfile lock
30
+
10
31
  ## [1.0.0] - 2020-11-08
32
+
11
33
  ### Added
12
- - CPF and CNPJ Validators
34
+
35
+ - CPF and CNPJ Validators
data/Gemfile.lock CHANGED
@@ -1,52 +1,49 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- bra_document_validation (0.1.0)
4
+ bra_document_validation (1.0.2)
5
5
  activemodel (>= 4.0)
6
- bra_documents
6
+ bra_documents (>= 1.0.2)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- activemodel (6.0.3.4)
12
- activesupport (= 6.0.3.4)
13
- activesupport (6.0.3.4)
11
+ activemodel (7.0.2.3)
12
+ activesupport (= 7.0.2.3)
13
+ activesupport (7.0.2.3)
14
14
  concurrent-ruby (~> 1.0, >= 1.0.2)
15
- i18n (>= 0.7, < 2)
16
- minitest (~> 5.1)
17
- tzinfo (~> 1.1)
18
- zeitwerk (~> 2.2, >= 2.2.2)
19
- bra_documents (1.0.0)
15
+ i18n (>= 1.6, < 2)
16
+ minitest (>= 5.1)
17
+ tzinfo (~> 2.0)
18
+ bra_documents (1.0.2)
20
19
  coderay (1.1.3)
21
- concurrent-ruby (1.1.7)
22
- diff-lcs (1.4.4)
23
- i18n (1.8.5)
20
+ concurrent-ruby (1.1.10)
21
+ diff-lcs (1.5.0)
22
+ i18n (1.10.0)
24
23
  concurrent-ruby (~> 1.0)
25
- method_source (0.9.2)
26
- minitest (5.14.2)
27
- pry (0.12.2)
28
- coderay (~> 1.1.0)
29
- method_source (~> 0.9.0)
30
- pry-nav (0.3.0)
31
- pry (>= 0.9.10, < 0.13.0)
32
- rake (13.0.1)
33
- rspec (3.9.0)
34
- rspec-core (~> 3.9.0)
35
- rspec-expectations (~> 3.9.0)
36
- rspec-mocks (~> 3.9.0)
37
- rspec-core (3.9.3)
38
- rspec-support (~> 3.9.3)
39
- rspec-expectations (3.9.2)
24
+ method_source (1.0.0)
25
+ minitest (5.15.0)
26
+ pry (0.14.1)
27
+ coderay (~> 1.1)
28
+ method_source (~> 1.0)
29
+ pry-nav (1.0.0)
30
+ pry (>= 0.9.10, < 0.15)
31
+ rake (13.0.6)
32
+ rspec (3.11.0)
33
+ rspec-core (~> 3.11.0)
34
+ rspec-expectations (~> 3.11.0)
35
+ rspec-mocks (~> 3.11.0)
36
+ rspec-core (3.11.0)
37
+ rspec-support (~> 3.11.0)
38
+ rspec-expectations (3.11.0)
40
39
  diff-lcs (>= 1.2.0, < 2.0)
41
- rspec-support (~> 3.9.0)
42
- rspec-mocks (3.9.1)
40
+ rspec-support (~> 3.11.0)
41
+ rspec-mocks (3.11.0)
43
42
  diff-lcs (>= 1.2.0, < 2.0)
44
- rspec-support (~> 3.9.0)
45
- rspec-support (3.9.3)
46
- thread_safe (0.3.6)
47
- tzinfo (1.2.7)
48
- thread_safe (~> 0.1)
49
- zeitwerk (2.4.0)
43
+ rspec-support (~> 3.11.0)
44
+ rspec-support (3.11.0)
45
+ tzinfo (2.0.4)
46
+ concurrent-ruby (~> 1.0)
50
47
 
51
48
  PLATFORMS
52
49
  ruby
@@ -59,4 +56,4 @@ DEPENDENCIES
59
56
  rspec
60
57
 
61
58
  BUNDLED WITH
62
- 2.1.4
59
+ 2.2.31
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # BraDocumentValidation
2
2
 
3
+ [![Build Status](https://travis-ci.com/bvicenzo/bra_document_validation.svg?branch=master)](https://travis-ci.com/bvicenzo/bra_document_validation)
4
+
3
5
  This gem allows to validate Brazilian documents, CPF and CNPJ, with format and digit verification.
4
6
 
5
7
  ## Installation
@@ -12,17 +14,32 @@ gem 'bra_document_validation'
12
14
 
13
15
  And then execute:
14
16
 
15
- $ bundle install
17
+ ```sh
18
+ bundle install
19
+ ```
16
20
 
17
21
  Or install it yourself as:
18
22
 
19
- $ gem install bra_document_validation
23
+ ```sh
24
+ gem install bra_document_validation
25
+ ```
20
26
 
21
27
  ## Usage
22
28
 
23
29
  ```rb
24
30
  validates :document_number, 'bra_document_validation/cpf': true
25
31
  validates :document_number, 'bra_document_validation/cnpj': true
32
+ validates :document_number, 'bra_document_validation/cpf_or_cnpj': true
33
+ ```
34
+
35
+ You might need add CPF and CNPJ acronyms to inflactions.
36
+
37
+ ```rb
38
+ # config/initializers/inflections.rb
39
+ ActiveSupport::Inflector.inflections do |inflect|
40
+ inflect.acronym 'CPF'
41
+ inflect.acronym 'CNPJ'
42
+ end
26
43
  ```
27
44
 
28
45
  # Format
@@ -33,6 +50,7 @@ However you can pass options if your number is formatted.
33
50
  ```rb
34
51
  validates :document_number, 'bra_document_validation/cpf': { formatted: true }
35
52
  validates :document_number, 'bra_document_validation/cnpj': { formatted: false }
53
+ validates :document_number, 'bra_document_validation/cpf_or_cnpj': { formatted: false }
36
54
  ```
37
55
 
38
56
  # Messaging
@@ -44,6 +62,7 @@ However you can add a custom message that substitute the above messages.
44
62
  ```rb
45
63
  validates :document_number, 'bra_document_validation/cpf': { message: :invalid }
46
64
  validates :document_number, 'bra_document_validation/cnpj': { message: 'A custom message' }
65
+ validates :document_number, 'bra_document_validation/cpf_or_cnpj': { message: :invalid }
47
66
  ```
48
67
 
49
68
  ## Development
data/bin/console CHANGED
@@ -7,8 +7,8 @@ require 'bra_document_validation'
7
7
  # with your gem easier. You can also use a different console, if you like.
8
8
 
9
9
  # (If you use this, don't forget to add pry to your Gemfile!)
10
- require 'pry'
11
- Pry.start
10
+ require 'pry'
11
+ require 'pry-nav'
12
12
 
13
13
  require 'irb'
14
14
  IRB.start(__FILE__)
@@ -28,7 +28,7 @@ Gem::Specification.new do |spec|
28
28
  spec.require_paths = ['lib']
29
29
 
30
30
  spec.add_runtime_dependency 'activemodel', '>= 4.0'
31
- spec.add_runtime_dependency 'bra_documents'
31
+ spec.add_runtime_dependency 'bra_documents', '>= 1.0.2'
32
32
 
33
33
  spec.add_development_dependency 'pry'
34
34
  spec.add_development_dependency 'pry-nav'
@@ -2,43 +2,24 @@
2
2
 
3
3
  module BraDocumentValidation
4
4
  class CNPJValidator < ActiveModel::EachValidator
5
- FORMATTED_CNPJ_PATTERN = /\A(\d{2}\.\d{3}\.\d{3}\/\d{4})-(\d{2})\Z/.freeze
6
- RAW_CNPJ_PATTERN = /\A\d{14}\Z/.freeze
7
- NOT_NUMBER_PATTERN = /\D/.freeze
8
-
9
5
  def validate_each(record, attribute, value)
10
- return record.errors.add(attribute, error_message(:invalid_format)) unless document_format.match?(value.to_s)
11
- full_number = only_numbers_for(value.to_s)
12
- record.errors.add(attribute, error_message(:invalid_verification_digit)) if black_listed?(full_number) || !digit_verified?(full_number)
13
- end
14
-
15
- private
6
+ return record.errors.add(attribute, error_message(:invalid_format)) unless valid_format?(value)
16
7
 
17
- def digit_verified?(full_number)
18
- company_number, matrix_subsidiary_number = numbers_for(full_number)
19
-
20
- full_number == BraDocuments::CNPJGenerator.generate(company_number: company_number, matrix_subsidiary_number: matrix_subsidiary_number)
8
+ record.errors.add(attribute, error_message(:invalid_verification_digit)) unless valid_verification_digit?(value)
21
9
  end
22
10
 
23
- def numbers_for(value)
24
- number = value.gsub(NOT_NUMBER_PATTERN, '').chars
25
-
26
- [
27
- number.shift(BraDocuments::CNPJGenerator::COMPANY_NUMBER_SIZE).join,
28
- number.shift(BraDocuments::CNPJGenerator::MATRIX_SUBSIDIARY_SIZE).join
29
- ]
30
- end
11
+ private
31
12
 
32
- def only_numbers_for(value)
33
- value.gsub(NOT_NUMBER_PATTERN, '')
13
+ def valid_format?(document)
14
+ BraDocuments::Matcher.match?(document.to_s, kind: :cnpj, mode: document_format)
34
15
  end
35
16
 
36
- def black_listed?(number)
37
- number.chars.uniq.size == 1
17
+ def valid_verification_digit?(document)
18
+ BraDocuments::CNPJGenerator.valid_verification_digit?(document: document.to_s)
38
19
  end
39
20
 
40
21
  def document_format
41
- options[:formatted] ? FORMATTED_CNPJ_PATTERN : RAW_CNPJ_PATTERN
22
+ options[:formatted] ? :formatted : :raw
42
23
  end
43
24
 
44
25
  def error_message(default_message)
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BraDocumentValidation
4
+ class CPFOrCNPJValidator < ActiveModel::EachValidator
5
+ def validate_each(record, attribute, value)
6
+ return record.errors.add(attribute, error_message(:invalid_format)) unless valid_format?(value)
7
+
8
+ record.errors.add(attribute, error_message(:invalid_verification_digit)) unless valid_verification_digit?(value)
9
+ end
10
+
11
+ private
12
+
13
+ def valid_format?(document)
14
+ BraDocuments::Matcher.match?(document.to_s, kind: :cpf, mode: document_format) ||
15
+ BraDocuments::Matcher.match?(document.to_s, kind: :cnpj, mode: document_format)
16
+ end
17
+
18
+ def valid_verification_digit?(document)
19
+ BraDocuments::CPFGenerator.valid_verification_digit?(document: document.to_s) ||
20
+ BraDocuments::CNPJGenerator.valid_verification_digit?(document: document.to_s)
21
+ end
22
+
23
+ def document_format
24
+ options[:formatted] ? :formatted : :raw
25
+ end
26
+
27
+ def error_message(default_message)
28
+ options.fetch(:message, default_message)
29
+ end
30
+ end
31
+ end
@@ -2,38 +2,24 @@
2
2
 
3
3
  module BraDocumentValidation
4
4
  class CPFValidator < ActiveModel::EachValidator
5
- FORMATTED_CPF_PATTERN = /^(\d{3}\.\d{3}\.\d{3})-(\d{2})$/.freeze
6
- RAW_CPF_PATTERN = /\A\d{11}\z/
7
- NOT_NUMBER_PATTERN = /\D/.freeze
8
-
9
5
  def validate_each(record, attribute, value)
10
- return record.errors.add(attribute, error_message(:invalid_format)) unless document_format.match?(value.to_s)
11
- full_number = only_numbers_for(value.to_s)
12
- record.errors.add(attribute, error_message(:invalid_verification_digit)) if black_listed?(full_number) || !digit_verified?(full_number)
13
- end
14
-
15
- private
6
+ return record.errors.add(attribute, error_message(:invalid_format)) unless valid_format?(value)
16
7
 
17
- def digit_verified?(number)
18
- person_number = number_without_verifying_digits_for(number)
19
-
20
- number == BraDocuments::CPFGenerator.generate(person_number: person_number)
8
+ record.errors.add(attribute, error_message(:invalid_verification_digit)) unless valid_verification_digit?(value)
21
9
  end
22
10
 
23
- def number_without_verifying_digits_for(number)
24
- number.chars.shift(BraDocuments::CPFGenerator::PERSON_NUMBER_SIZE).join
25
- end
11
+ private
26
12
 
27
- def only_numbers_for(value)
28
- value.gsub(NOT_NUMBER_PATTERN, '')
13
+ def valid_format?(document)
14
+ BraDocuments::Matcher.match?(document.to_s, kind: :cpf, mode: document_format)
29
15
  end
30
16
 
31
- def black_listed?(number)
32
- number.chars.uniq.size == 1
17
+ def valid_verification_digit?(document)
18
+ BraDocuments::CPFGenerator.valid_verification_digit?(document: document.to_s)
33
19
  end
34
20
 
35
21
  def document_format
36
- options[:formatted] ? FORMATTED_CPF_PATTERN : RAW_CPF_PATTERN
22
+ options[:formatted] ? :formatted : :raw
37
23
  end
38
24
 
39
25
  def error_message(default_message)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module BraDocumentValidation
4
- VERSION = '1.0.0'
4
+ VERSION = '1.0.2'
5
5
  end
@@ -5,6 +5,7 @@ require 'bra_documents'
5
5
  require 'bra_document_validation/version'
6
6
  require 'bra_document_validation/cnpj_validator'
7
7
  require 'bra_document_validation/cpf_validator'
8
+ require 'bra_document_validation/cpf_or_cnpj_validator'
8
9
 
9
10
  module BraDocumentValidation
10
11
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bra_document_validation
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bruno Vicenzo
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-11-09 00:00:00.000000000 Z
11
+ date: 2022-04-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: 1.0.2
34
34
  type: :runtime
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'
40
+ version: 1.0.2
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: pry
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -101,6 +101,7 @@ executables: []
101
101
  extensions: []
102
102
  extra_rdoc_files: []
103
103
  files:
104
+ - ".github/dependabot.yml"
104
105
  - ".gitignore"
105
106
  - ".rspec"
106
107
  - ".travis.yml"
@@ -115,6 +116,7 @@ files:
115
116
  - bra_document_validation.gemspec
116
117
  - lib/bra_document_validation.rb
117
118
  - lib/bra_document_validation/cnpj_validator.rb
119
+ - lib/bra_document_validation/cpf_or_cnpj_validator.rb
118
120
  - lib/bra_document_validation/cpf_validator.rb
119
121
  - lib/bra_document_validation/version.rb
120
122
  homepage: https://github.com/bvicenzo/bra_document_validation
@@ -125,7 +127,7 @@ metadata:
125
127
  homepage_uri: https://github.com/bvicenzo/bra_document_validation
126
128
  source_code_uri: https://github.com/bvicenzo/bra_document_validation
127
129
  changelog_uri: https://github.com/bvicenzo/bra_document_validation/blob/master/CHANGELOG.md
128
- post_install_message:
130
+ post_install_message:
129
131
  rdoc_options: []
130
132
  require_paths:
131
133
  - lib
@@ -140,8 +142,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
140
142
  - !ruby/object:Gem::Version
141
143
  version: '0'
142
144
  requirements: []
143
- rubygems_version: 3.1.4
144
- signing_key:
145
+ rubygems_version: 3.2.31
146
+ signing_key:
145
147
  specification_version: 4
146
148
  summary: This gem add ActiveModel validations to Brazilian documents.
147
149
  test_files: []