ssn_validation 0.1.5 → 0.1.7
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 +4 -4
- data/.github/workflows/ruby.yml +35 -0
- data/Gemfile.lock +12 -10
- data/Rakefile +3 -1
- data/lib/ssn_validation/ssn.rb +2 -1
- data/lib/validators/social_security_number_validator.rb +1 -1
- data/lib/version.rb +1 -1
- data/ssn_validation.gemspec +1 -0
- data/test/lib/ssn_validation/ssn_test.rb +39 -34
- metadata +23 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0feef3d1f27edb2f2ccd820dc2fb1663c860826c376f33e15f36b134c089a7e9
|
4
|
+
data.tar.gz: 33ad0dfc1f6cce507e48599cf5a4a1d67b8ffdac7c27431f5579b6d2f68122ee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fdb7750c8a6600fb576c9ae9ac0f6712e4b7b7c9fc52b4d0e1615fe5cadc72f5ca4c70f544dab0c5070bad228724ad21154ac08ae81059fe70b9c17d93acae22
|
7
|
+
data.tar.gz: c7cccf7151291da421987e1272c08044561b9863998c7fcb7a223d334541dfa8f7e242348dc025f55f7ce5c502c7469b0e41b28ab55b4ee8a24fd13d1fcc286c
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# This workflow uses actions that are not certified by GitHub.
|
2
|
+
# They are provided by a third-party and are governed by
|
3
|
+
# separate terms of service, privacy policy, and support
|
4
|
+
# documentation.
|
5
|
+
# This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
|
6
|
+
# For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
|
7
|
+
|
8
|
+
name: Ruby
|
9
|
+
|
10
|
+
on:
|
11
|
+
push:
|
12
|
+
branches: [ master ]
|
13
|
+
pull_request:
|
14
|
+
branches: [ master ]
|
15
|
+
|
16
|
+
jobs:
|
17
|
+
test:
|
18
|
+
|
19
|
+
runs-on: ubuntu-latest
|
20
|
+
strategy:
|
21
|
+
matrix:
|
22
|
+
ruby-version: ['2.6', '2.7', '3.0']
|
23
|
+
|
24
|
+
steps:
|
25
|
+
- uses: actions/checkout@v2
|
26
|
+
- name: Set up Ruby
|
27
|
+
# To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
|
28
|
+
# change this to (see https://github.com/ruby/setup-ruby#versioning):
|
29
|
+
# uses: ruby/setup-ruby@v1
|
30
|
+
uses: ruby/setup-ruby@473e4d8fe5dd94ee328fdfca9f8c9c7afc9dae5e
|
31
|
+
with:
|
32
|
+
ruby-version: ${{ matrix.ruby-version }}
|
33
|
+
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
34
|
+
- name: Run tests
|
35
|
+
run: bundle exec rake
|
data/Gemfile.lock
CHANGED
@@ -1,34 +1,36 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
ssn_validation (0.1.
|
4
|
+
ssn_validation (0.1.6)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: http://rubygems.org/
|
8
8
|
specs:
|
9
|
-
activemodel (5.2.
|
10
|
-
activesupport (= 5.2.
|
11
|
-
activesupport (5.2.
|
9
|
+
activemodel (5.2.6)
|
10
|
+
activesupport (= 5.2.6)
|
11
|
+
activesupport (5.2.6)
|
12
12
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
13
13
|
i18n (>= 0.7, < 2)
|
14
14
|
minitest (~> 5.1)
|
15
15
|
tzinfo (~> 1.1)
|
16
|
-
concurrent-ruby (1.1.
|
17
|
-
i18n (1.
|
16
|
+
concurrent-ruby (1.1.9)
|
17
|
+
i18n (1.8.11)
|
18
18
|
concurrent-ruby (~> 1.0)
|
19
|
-
minitest (5.
|
19
|
+
minitest (5.14.4)
|
20
20
|
rake (12.3.3)
|
21
21
|
thread_safe (0.3.6)
|
22
|
-
tzinfo (1.2.
|
22
|
+
tzinfo (1.2.9)
|
23
23
|
thread_safe (~> 0.1)
|
24
24
|
|
25
25
|
PLATFORMS
|
26
|
-
|
26
|
+
x86_64-darwin-20
|
27
|
+
x86_64-linux
|
27
28
|
|
28
29
|
DEPENDENCIES
|
29
30
|
activemodel (~> 5)
|
31
|
+
minitest
|
30
32
|
rake (~> 12)
|
31
33
|
ssn_validation!
|
32
34
|
|
33
35
|
BUNDLED WITH
|
34
|
-
2.
|
36
|
+
2.2.22
|
data/Rakefile
CHANGED
data/lib/ssn_validation/ssn.rb
CHANGED
@@ -6,7 +6,7 @@ module SsnValidation
|
|
6
6
|
|
7
7
|
# returns a hash of 0..n key/value pairs for ssn validation error codes and a default message for each
|
8
8
|
def self.validate(ssn)
|
9
|
-
ssn = ssn.to_s
|
9
|
+
ssn = ssn.to_s.delete('-') # be lenient with incoming dash chars
|
10
10
|
errors = {}
|
11
11
|
return errors if test_ssn?(ssn)
|
12
12
|
|
@@ -50,6 +50,7 @@ module SsnValidation
|
|
50
50
|
false
|
51
51
|
end
|
52
52
|
|
53
|
+
# https://www.irs.gov/irm/part3/irm_03-021-263r
|
53
54
|
def self.invalid_itin?(ssn)
|
54
55
|
return false unless ssn[0] == "9"
|
55
56
|
group = ssn[3..4].to_i
|
@@ -7,7 +7,7 @@ module ActiveModel
|
|
7
7
|
def validate_each(record, attribute, value)
|
8
8
|
ssn_errors = SsnValidation::Ssn.validate(value)
|
9
9
|
return if ssn_errors.blank?
|
10
|
-
ssn_errors.values.each {|error| record.errors
|
10
|
+
ssn_errors.values.each { |error| record.errors.add(attribute, error) }
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
data/lib/version.rb
CHANGED
data/ssn_validation.gemspec
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'minitest/autorun'
|
2
|
-
require 'ssn_validation
|
2
|
+
require 'ssn_validation'
|
3
3
|
|
4
4
|
class SsnTest < Minitest::Test
|
5
5
|
include SsnValidation
|
@@ -7,66 +7,71 @@ class SsnTest < Minitest::Test
|
|
7
7
|
describe 'valid formats' do
|
8
8
|
describe 'valid ITIN' do
|
9
9
|
it 'is valid' do
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
10
|
+
_(Ssn.validate('911781111')).must_equal({})
|
11
|
+
_(Ssn.validate('911501111')).must_equal({})
|
12
|
+
_(Ssn.validate('911651111')).must_equal({})
|
13
|
+
_(Ssn.validate('911651111')).must_equal({})
|
14
|
+
_(Ssn.validate('911881111')).must_equal({})
|
15
|
+
_(Ssn.validate('911901111')).must_equal({})
|
16
|
+
_(Ssn.validate('911991111')).must_equal({})
|
17
17
|
end
|
18
18
|
end
|
19
19
|
describe 'valid SSN' do
|
20
20
|
it 'is valid' do
|
21
|
-
|
21
|
+
_(Ssn.validate('123432100')).must_equal({})
|
22
22
|
end
|
23
23
|
end
|
24
24
|
describe 'valid repeating SSN' do
|
25
25
|
it 'is valid' do
|
26
|
-
|
26
|
+
_(Ssn.validate('123444444')).must_equal({})
|
27
|
+
end
|
28
|
+
end
|
29
|
+
describe 'valid with dashes' do
|
30
|
+
it 'ignores the dashes' do
|
31
|
+
_(Ssn.validate('123-44-4444')).must_equal({})
|
27
32
|
end
|
28
33
|
end
|
29
34
|
end
|
30
35
|
describe 'invalid formats' do
|
31
36
|
describe '666 is invalid' do
|
32
37
|
it 'is valid' do
|
33
|
-
|
38
|
+
_(Ssn.validate('666123210')).must_equal({excluded_666: 'SSN value contains excluded area 666-xx-xxxx'})
|
34
39
|
end
|
35
40
|
end
|
36
41
|
describe 'zero area numbers invalid' do
|
37
42
|
it 'is invalid' do
|
38
|
-
|
43
|
+
_(Ssn.validate('000567890')).must_equal({zero_area: 'SSN value contains zeros in area number 000-xx-xxxx'})
|
39
44
|
end
|
40
45
|
end
|
41
46
|
describe 'zero group numbers invalid' do
|
42
47
|
it 'is invalid' do
|
43
|
-
|
48
|
+
_(Ssn.validate('567007890')).must_equal({zero_group: 'SSN value contains zeros in group number xxx-00-xxxx'})
|
44
49
|
end
|
45
50
|
end
|
46
51
|
describe 'zero serial numbers invalid' do
|
47
52
|
it 'is invalid' do
|
48
|
-
|
53
|
+
_(Ssn.validate('567890000')).must_equal({zero_serial: 'SSN value contains zeros in serial number xxx-xx-0000'})
|
49
54
|
end
|
50
55
|
end
|
51
56
|
describe 'non digits invalid' do
|
52
57
|
it 'is invalid' do
|
53
|
-
|
58
|
+
_(Ssn.validate('ABCDEFGHI')).must_equal({non_digits: 'SSN value contains non-digits'})
|
54
59
|
end
|
55
60
|
end
|
56
61
|
describe 'not 9 digits invalid' do
|
57
62
|
it 'is invalid' do
|
58
|
-
|
63
|
+
_(Ssn.validate('303')).must_equal({nine_digits: 'SSN value is not 9 digits'})
|
59
64
|
end
|
60
65
|
end
|
61
|
-
|
66
|
+
describe 'repeating digits invalid' do
|
62
67
|
it 'is invalid' do
|
63
|
-
|
68
|
+
_(Ssn.validate('888888888')).must_equal({repeating: 'SSN value contains repeating digits'})
|
64
69
|
end
|
65
70
|
end
|
66
71
|
describe 'invalid ITIN' do
|
67
72
|
it 'is invalid' do
|
68
|
-
|
69
|
-
|
73
|
+
_(Ssn.validate('900121234')).must_equal({invalid_itin: 'SSN value contains invalid ITIN format 9xx-[x]x-xxxx'})
|
74
|
+
_(Ssn.validate('900441234')).must_equal({invalid_itin: 'SSN value contains invalid ITIN format 9xx-[x]x-xxxx'})
|
70
75
|
end
|
71
76
|
end
|
72
77
|
end
|
@@ -76,46 +81,46 @@ class SsnTest < Minitest::Test
|
|
76
81
|
end
|
77
82
|
describe 'ascending digits invalid' do
|
78
83
|
it 'is invalid' do
|
79
|
-
|
80
|
-
|
84
|
+
_(Ssn.validate('123456789')).must_equal({ascending: 'SSN value contains all ASCENDING digits'})
|
85
|
+
_(Ssn.validate('567891234')).must_equal({ascending: 'SSN value contains all ASCENDING digits'})
|
81
86
|
end
|
82
87
|
end
|
83
88
|
describe 'ascending digits ex 0 invalid' do
|
84
89
|
it 'is invalid' do
|
85
|
-
|
86
|
-
|
87
|
-
|
90
|
+
_(Ssn.validate('678912345')).must_equal({ascending: 'SSN value contains all ASCENDING digits'})
|
91
|
+
_(Ssn.validate('123456789')).must_equal({ascending: 'SSN value contains all ASCENDING digits'})
|
92
|
+
_(Ssn.validate('234567891')).must_equal({ascending: 'SSN value contains all ASCENDING digits'})
|
88
93
|
end
|
89
94
|
end
|
90
95
|
describe 'descending digits invalid' do
|
91
96
|
it 'is invalid' do
|
92
|
-
|
93
|
-
|
94
|
-
|
97
|
+
_(Ssn.validate('876543210')).must_equal({descending: 'SSN value contains all DESCENDING digits'})
|
98
|
+
_(Ssn.validate('321098765')).must_equal({descending: 'SSN value contains all DESCENDING digits'})
|
99
|
+
_(Ssn.validate('765432109')).must_equal({descending: 'SSN value contains all DESCENDING digits'})
|
95
100
|
end
|
96
101
|
end
|
97
102
|
describe 'descending digits ex 0 invalid' do
|
98
103
|
it 'is invalid' do
|
99
|
-
|
100
|
-
|
104
|
+
_(Ssn.validate('321987654')).must_equal({descending: 'SSN value contains all DESCENDING digits'})
|
105
|
+
_(Ssn.validate('765432198')).must_equal({descending: 'SSN value contains all DESCENDING digits'})
|
101
106
|
end
|
102
107
|
end
|
103
108
|
end
|
104
109
|
describe 'allowing dummy ssns' do
|
105
110
|
it 'allows 666xxxxx' do
|
106
111
|
SsnValidation.config.test_ssns = [/^666/]
|
107
|
-
|
112
|
+
_(Ssn.validate('666123456')).must_equal({})
|
108
113
|
SsnValidation.config.test_ssns = []
|
109
114
|
end
|
110
115
|
it 'allows random test ssns' do
|
111
116
|
SsnValidation.config.test_ssns = ['509421234']
|
112
|
-
|
117
|
+
_(Ssn.validate('509421234')).must_equal({})
|
113
118
|
SsnValidation.config.test_ssns = []
|
114
119
|
end
|
115
120
|
it 'allows multiple test ssns' do
|
116
121
|
SsnValidation.config.test_ssns = ['999999999', /^666/]
|
117
|
-
|
118
|
-
|
122
|
+
_(Ssn.validate('666123456')).must_equal({})
|
123
|
+
_(Ssn.validate('999999999')).must_equal({})
|
119
124
|
SsnValidation.config.test_ssns = []
|
120
125
|
end
|
121
126
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ssn_validation
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Stewart
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-11-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -38,12 +38,27 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '5'
|
41
|
-
|
42
|
-
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: minitest
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
description:
|
56
|
+
email:
|
43
57
|
executables: []
|
44
58
|
extensions: []
|
45
59
|
extra_rdoc_files: []
|
46
60
|
files:
|
61
|
+
- ".github/workflows/ruby.yml"
|
47
62
|
- Gemfile
|
48
63
|
- Gemfile.lock
|
49
64
|
- README.md
|
@@ -61,7 +76,7 @@ homepage: https://github.com/johnsinco/ssn_validation
|
|
61
76
|
licenses:
|
62
77
|
- Apache-2.0
|
63
78
|
metadata: {}
|
64
|
-
post_install_message:
|
79
|
+
post_install_message:
|
65
80
|
rdoc_options: []
|
66
81
|
require_paths:
|
67
82
|
- lib
|
@@ -76,9 +91,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
76
91
|
- !ruby/object:Gem::Version
|
77
92
|
version: '0'
|
78
93
|
requirements: []
|
79
|
-
|
80
|
-
|
81
|
-
signing_key:
|
94
|
+
rubygems_version: 3.2.22
|
95
|
+
signing_key:
|
82
96
|
specification_version: 4
|
83
97
|
summary: Social Security Number (SSN) Validation
|
84
98
|
test_files:
|