validates_identity 0.4.0 → 0.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: de2775d07796e202d6cc7ecdb166bed0233950b9b3439ae5da5e3fc7b89e3957
4
- data.tar.gz: 5cf2f4410a8326c2a0f20c3471540453da92ccbc4617ad171ded389da84f145c
3
+ metadata.gz: 0fdb1765f269869de8c648faa317223189f37cb567b50f6a9caf2564f4611b9c
4
+ data.tar.gz: 28402419c0136ab8b501b47e96bb292201212bb9f91a2c2b7534ff4d84e83bd4
5
5
  SHA512:
6
- metadata.gz: 1bbfa6dc9295dbd292dc37eabedc189129eeb03fa891a8e33ca8cb496213fc99b4defaa0f56b00fdac3f8c1e379f235104ca44281c91aafc84a37e0a46bfcffd
7
- data.tar.gz: 4d359891c62c0c8025528c28b69685d828cb2cb3b809d6bde18cf833fba6514ad152fe3522e79d9e866f17beab939b2eb12113024b96f573c4c1067a48e3061c
6
+ metadata.gz: 376739a02e1cd0673babf91821c4cf3c44f4afdb79cb087ec91d1b31ad44fd48aa1eaa075f51399b1f356aa0dbd09784be5e38d9ef915560f5d109524e2a13a2
7
+ data.tar.gz: f99028dfc1be6a94a2f597cf4fe451c21810b9931c6a311a85482998fa5b4fd87ea3ed1045af705c9132e41bdc16d1a6bdaabaff1e950ae8ac47c760ba201904
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## [0.5.0] - 2024-02-27
2
+
3
+ ### Added
4
+
5
+ - `:only` option to restrict the validation to a specific entity (person or legal)
6
+
1
7
  ## [0.4.0] - 2024-02-25
2
8
 
3
9
  ### Added
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- validates_identity (0.4.0)
4
+ validates_identity (0.5.0)
5
5
  activemodel
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # ValidatesIdentity
2
2
 
3
3
  This projects aims to validate several countries person identification documents.
4
+ It works on top of 2 attributes, so that the identity can be determined by a second value and thus validate the first one accordingly
4
5
 
5
6
  ## Installation
6
7
 
@@ -18,6 +19,14 @@ Or install it yourself as:
18
19
 
19
20
  $ gem install validates_identity
20
21
 
22
+ ## Official Plugins
23
+
24
+ Just require the plugins you want/need in your Gemfile and you will be good to go
25
+
26
+ - [Brazilian CPF](https://github.com/plribeiro3000/validates_identity-br_cpf)
27
+ - [Brazilian CNPJ](https://github.com/plribeiro3000/validates_identity-br_cnpj)
28
+ - [Guatemala DPI](https://github.com/plribeiro3000/validates_identity-gt_dpi)
29
+
21
30
  ## Usage
22
31
 
23
32
  Just use as any other validator:
@@ -29,42 +38,55 @@ class User < ActiveRecord::Base
29
38
  end
30
39
  ```
31
40
 
32
- ## Advanced Usage
33
-
34
- ### Format
41
+ ### Format Option
35
42
 
36
43
  The `format` option can be used to format the final identity value.
37
44
 
38
45
  ```ruby
39
46
  class User < ActiveRecord::Base
40
- # :identity_type is the attribute that will be used to determine the identity type and is required
47
+ # all values will be formatted after successful validation
41
48
  validates :identity, identity: { identity_type: :identity_type, format: true }
42
49
  end
43
50
  ```
44
51
 
45
- ### Custom Validators
52
+ ### Only Option
46
53
 
47
- New Identity Validators can be registered through the public apis of `ValidatesIdentity`
54
+ The `only` option can be used to narrow down the validators
48
55
 
49
56
  ```ruby
50
- ValidatesIdentity.register_identity_type('CustomIdentity', CustomIdentityValidator)
57
+ class User < ActiveRecord::Base
58
+ # will accept only person identity types
59
+ validates :identity, identity: { identity_type: :identity_type, only: :person }
60
+ # will accept only legal identity types
61
+ validates :identity, identity: { identity_type: :identity_type, only: :legal }
62
+ end
51
63
  ```
52
64
 
53
- Each Validator should have:
65
+ ### Aliases
54
66
 
55
- - a constructor with 1 param: `value`
56
- - a `valid?` method that returns a boolean
57
- - a `formatted` method that returns the value formatted
67
+ In case of a legacy system where keys were already defined and differ from the official ones, aliases can be registered to easy the transition
58
68
 
59
- ### Validators Aliases
69
+ ```ruby
70
+ ValidatesIdentity.register_person_identity_type_alias('LegacyIdentity', 'CustomIdentity')
71
+ ValidatesIdentity.register_legal_identity_type_alias('LegacyIdentity', 'CustomIdentity')
72
+ ```
60
73
 
61
- In case of a legacy system where keys were already defined and differ from the official ones, aliases can be registered as well
74
+ ### Adding your own Validators
75
+
76
+ New Identity Validators can be registered through the public apis of `ValidatesIdentity`
62
77
 
63
78
  ```ruby
64
- ValidatesIdentity.register_identity_type_alias('LegacyIdentity', 'CustomIdentity')
79
+ ValidatesIdentity.register_person_identity_type('CustomIdentity', CustomIdentityValidator)
80
+ ValidatesIdentity.register_legal_identity_type('CustomIdentity', CustomIdentityValidator)
65
81
  ```
66
82
 
67
- ### Custom scenarios for matching
83
+ A Validator must implement:
84
+
85
+ - a constructor with 1 param: `value`
86
+ - a `valid?` method that returns a boolean
87
+ - a `formatted` method that returns the formatted value
88
+
89
+ ### Adding scenarios to the matcher
68
90
 
69
91
  When adding a new validator, cases of success and error can be added through and API so that the `Matcher` will test against them
70
92
 
@@ -13,14 +13,23 @@ module Shoulda
13
13
  def initialize(identity, identity_type)
14
14
  super(identity)
15
15
  @identity_type = identity_type
16
+ @type = :both
16
17
  end
17
18
 
18
19
  def description
19
- 'requires a valid identity'
20
+ case @type
21
+ when :person then 'require a valid person identity'
22
+ when :legal then 'require a valid legal identity'
23
+ else 'require a valid identity'
24
+ end
20
25
  end
21
26
 
22
27
  def failure_message
23
- 'does not require a valid identity'
28
+ case @type
29
+ when :person then 'does not require a valid person identity'
30
+ when :legal then 'does not require a valid legal identity'
31
+ else 'expected to require a valid identity'
32
+ end
24
33
  end
25
34
 
26
35
  def matches?(subject)
@@ -28,7 +37,7 @@ module Shoulda
28
37
 
29
38
  result = []
30
39
 
31
- ValidatesIdentity::ShouldaMatchers.allowed_values.each do |identity_type, values|
40
+ allowed_values.each do |identity_type, values|
32
41
  subject.send("#{@identity_type}=", identity_type)
33
42
 
34
43
  values.each do |value|
@@ -36,7 +45,7 @@ module Shoulda
36
45
  end
37
46
  end
38
47
 
39
- ValidatesIdentity::ShouldaMatchers.disallowed_values.each do |identity_type, values|
48
+ disallowed_values.each do |identity_type, values|
40
49
  subject.send("#{@identity_type}=", identity_type)
41
50
 
42
51
  values.each do |value|
@@ -46,6 +55,40 @@ module Shoulda
46
55
 
47
56
  result.inject(:&)
48
57
  end
58
+
59
+ private
60
+
61
+ def allowed_values
62
+ case @type
63
+ when :person then person_allowed_values
64
+ when :legal then legal_allowed_values
65
+ else ValidatesIdentity::ShouldaMatchers.allowed_values
66
+ end
67
+ end
68
+
69
+ def disallowed_values
70
+ case @type
71
+ when :person then person_disallowed_values + legal_allowed_values
72
+ when :legal then legal_disallowed_values + person_allowed_values
73
+ else ValidatesIdentity::ShouldaMatchers.disallowed_values
74
+ end
75
+ end
76
+
77
+ def person_allowed_values
78
+ ValidatesIdentity::ShouldaMatchers.person_allowed_values
79
+ end
80
+
81
+ def person_disallowed_values
82
+ ValidatesIdentity::ShouldaMatchers.person_disallowed_values
83
+ end
84
+
85
+ def legal_allowed_values
86
+ ValidatesIdentity::ShouldaMatchers.legal_allowed_values
87
+ end
88
+
89
+ def legal_disallowed_values
90
+ ValidatesIdentity::ShouldaMatchers.legal_disallowed_values
91
+ end
49
92
  end
50
93
  end
51
94
  end
@@ -15,7 +15,7 @@ class ValidatesIdentity
15
15
  return true if value.blank?
16
16
  return false if options[:identity_type].blank?
17
17
 
18
- validator_class = ValidatesIdentity.get_validator(identity_type)
18
+ validator_class = ValidatesIdentity.get_validator(identity_type, type: options[:only])
19
19
 
20
20
  return false if validator_class.nil?
21
21
 
@@ -3,20 +3,44 @@
3
3
  class ValidatesIdentity
4
4
  class ShouldaMatchers
5
5
  class << self
6
+ def person_allowed_values
7
+ @person_allowed_values ||= {}
8
+ end
9
+
10
+ def legal_allowed_values
11
+ @legal_allowed_values ||= {}
12
+ end
13
+
14
+ def person_disallowed_values
15
+ @person_disallowed_values ||= {}
16
+ end
17
+
18
+ def legal_disallowed_values
19
+ @legal_disallowed_values ||= {}
20
+ end
21
+
6
22
  def allowed_values
7
- @allowed_values ||= {}
23
+ person_allowed_values.merge(legal_allowed_values)
8
24
  end
9
25
 
10
26
  def disallowed_values
11
- @disallowed_values ||= {}
27
+ person_disallowed_values.merge(legal_disallowed_values)
28
+ end
29
+
30
+ def register_person_allowed_values(identity_type_acronym, values = [])
31
+ person_allowed_values[identity_type_acronym] = values
32
+ end
33
+
34
+ def register_legal_allowed_values(identity_type_acronym, values = [])
35
+ legal_allowed_values[identity_type_acronym] = values
12
36
  end
13
37
 
14
- def register_allowed_values(identity_type_acronym, values = [])
15
- allowed_values[identity_type_acronym] = values
38
+ def register_person_disallowed_values(identity_type_acronym, values = [])
39
+ person_disallowed_values[identity_type_acronym] = values
16
40
  end
17
41
 
18
- def register_disallowed_values(identity_type_acronym, values = [])
19
- disallowed_values[identity_type_acronym] = values
42
+ def register_legal_disallowed_values(identity_type_acronym, values = [])
43
+ legal_disallowed_values[identity_type_acronym] = values
20
44
  end
21
45
  end
22
46
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class ValidatesIdentity
4
- VERSION = '0.4.0'
4
+ VERSION = '0.5.0'
5
5
  end
@@ -10,26 +10,57 @@ class ValidatesIdentity
10
10
  class << self
11
11
  private
12
12
 
13
+ def person_identity_types
14
+ @person_identity_types ||= {}
15
+ end
16
+
17
+ def legal_identity_types
18
+ @legal_identity_types ||= {}
19
+ end
20
+
13
21
  def identity_types
14
- @identity_types ||= {}
22
+ person_identity_types.merge(legal_identity_types)
23
+ end
24
+
25
+ def person_identity_type_aliases
26
+ @person_identity_type_aliases ||= {}
27
+ end
28
+
29
+ def legal_identity_type_aliases
30
+ @legal_identity_type_aliases ||= {}
15
31
  end
16
32
 
17
33
  def identity_type_aliases
18
- @identity_type_aliases ||= {}
34
+ person_identity_type_aliases.merge(legal_identity_type_aliases)
19
35
  end
20
36
  end
21
37
 
22
- def self.register_identity_type(identity_type_acronym, identity_type_validator)
23
- identity_types[identity_type_acronym] = identity_type_validator
24
- identity_type_aliases[identity_type_acronym] = identity_type_acronym
38
+ def self.register_person_identity_type(identity_type_acronym, identity_type_validator)
39
+ person_identity_types[identity_type_acronym] = identity_type_validator
40
+ register_person_identity_type_alias(identity_type_acronym, identity_type_acronym)
41
+ end
42
+
43
+ def self.register_legal_identity_type(identity_type_acronym, identity_type_validator)
44
+ legal_identity_types[identity_type_acronym] = identity_type_validator
45
+ register_legal_identity_type_alias(identity_type_acronym, identity_type_acronym)
25
46
  end
26
47
 
27
- def self.register_identity_type_alias(identity_type, identity_type_alias)
28
- identity_type_aliases[identity_type_alias] = identity_type
48
+ def self.register_person_identity_type_alias(identity_type, identity_type_alias)
49
+ person_identity_type_aliases[identity_type_alias] = identity_type
29
50
  end
30
51
 
31
- def self.get_validator(identity_type)
32
- identity_alias = identity_type_aliases[identity_type]
52
+ def self.register_legal_identity_type_alias(identity_type, identity_type_alias)
53
+ legal_identity_type_aliases[identity_type_alias] = identity_type
54
+ end
55
+
56
+ def self.get_validator(identity_type, type: :both)
57
+ identity_alias =
58
+ case type
59
+ when :person then person_identity_type_aliases[identity_type]
60
+ when :legal then legal_identity_type_aliases[identity_type]
61
+ else identity_type_aliases[identity_type]
62
+ end
63
+
33
64
  identity_types[identity_alias]
34
65
  end
35
66
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: validates_identity
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paulo Ribeiro
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-02-25 00:00:00.000000000 Z
11
+ date: 2024-02-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel