ssn_validation 0.1.2 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 055a5606a0f3628720394e6fadc9d7d031cccfd56ae1004184bc7e1c741881b2
4
- data.tar.gz: 9fa6a0e907840f4b7e04981144e6d13930a1af4d53103d29ed0d61ad691a0c2b
3
+ metadata.gz: 0feef3d1f27edb2f2ccd820dc2fb1663c860826c376f33e15f36b134c089a7e9
4
+ data.tar.gz: 33ad0dfc1f6cce507e48599cf5a4a1d67b8ffdac7c27431f5579b6d2f68122ee
5
5
  SHA512:
6
- metadata.gz: 77969a0983d95df462807ea033cf37aca5142e1122d28867e736fcf1515f53b3cf72ed8e8722b1c38603f07f162a225406702fb0ce7671d3510459c38faacffe
7
- data.tar.gz: 58ec9cef29eed8d78060b14a3a7d006c746816ab1f6b37f9a3bb2111359b8ad9cd5ae3866fc4850207ed0620e21a44d372ba54cbe0b72c3ac342d18570396620
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 ADDED
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "http://rubygems.org"
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,36 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ ssn_validation (0.1.6)
5
+
6
+ GEM
7
+ remote: http://rubygems.org/
8
+ specs:
9
+ activemodel (5.2.6)
10
+ activesupport (= 5.2.6)
11
+ activesupport (5.2.6)
12
+ concurrent-ruby (~> 1.0, >= 1.0.2)
13
+ i18n (>= 0.7, < 2)
14
+ minitest (~> 5.1)
15
+ tzinfo (~> 1.1)
16
+ concurrent-ruby (1.1.9)
17
+ i18n (1.8.11)
18
+ concurrent-ruby (~> 1.0)
19
+ minitest (5.14.4)
20
+ rake (12.3.3)
21
+ thread_safe (0.3.6)
22
+ tzinfo (1.2.9)
23
+ thread_safe (~> 0.1)
24
+
25
+ PLATFORMS
26
+ x86_64-darwin-20
27
+ x86_64-linux
28
+
29
+ DEPENDENCIES
30
+ activemodel (~> 5)
31
+ minitest
32
+ rake (~> 12)
33
+ ssn_validation!
34
+
35
+ BUNDLED WITH
36
+ 2.2.22
data/README.md ADDED
@@ -0,0 +1,43 @@
1
+ # SsnValidation
2
+
3
+ SsnValidation is a very basic ruby gem that can validate a US Social Security Number (SSN) or ITIN. It returns a hash of error keys/messages that can be
4
+ used within ActiveRecord errors or otherwise to ensure syntactically valid SSNs.
5
+
6
+ ## Installation
7
+
8
+ Add this line to your application's Gemfile:
9
+
10
+ ```ruby
11
+ gem 'ssn_validation'
12
+ ```
13
+
14
+ And then execute:
15
+
16
+ $ bundle
17
+
18
+ Or install it yourself as:
19
+
20
+ $ gem install ssn_validation
21
+
22
+ ## Usage
23
+
24
+ ```
25
+ ❯ irb
26
+ > require 'ssn_validation'
27
+ > SsnValidation::Ssn.validate('abc')
28
+ => {:nine_digits=>"SSN value is not 9 digits", :non_digits=>"SSN value contains non-digits"}
29
+ > SsnValidation::Ssn.validate(123006789)
30
+ => {:zero_group=>"SSN value contains zeros in group number xxx-00-xxxx"}
31
+ > SsnValidation::Ssn.validate(nil)
32
+ => {:nine_digits=>"SSN value is not 9 digits"}
33
+ > SsnValidation::Ssn.validate('')
34
+ => {:nine_digits=>"SSN value is not 9 digits"}
35
+ ```
36
+
37
+ ## Contributing
38
+
39
+ Bug reports and pull requests are welcome on GitHub at https://github.com/johnsinco/ssn_validation
40
+
41
+ ## License
42
+
43
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
data/Rakefile CHANGED
@@ -1,7 +1,9 @@
1
1
  require 'rake/testtask'
2
2
 
3
3
  Rake::TestTask.new(:test) do |t|
4
- t.pattern = 'test/**/*_test.rb'
4
+ t.libs << "test"
5
+ t.libs << "lib"
6
+ t.test_files = FileList['test/**/*_test.rb']
5
7
  t.verbose = true
6
8
  t.warning = true
7
9
  end
@@ -2,10 +2,11 @@ module SsnValidation
2
2
  module Ssn
3
3
  DIGITS = %w[0 1 2 3 4 5 6 7 8 9].freeze
4
4
  DIGITS_EX0 = DIGITS[1..-1]
5
+ VALID_ITIN_GROUPS = [50..65, 70..88, 90..92, 94..99].map(&:to_a).flatten.freeze
5
6
 
6
7
  # returns a hash of 0..n key/value pairs for ssn validation error codes and a default message for each
7
8
  def self.validate(ssn)
8
- ssn = ssn.to_s
9
+ ssn = ssn.to_s.delete('-') # be lenient with incoming dash chars
9
10
  errors = {}
10
11
  return errors if test_ssn?(ssn)
11
12
 
@@ -18,15 +19,23 @@ module SsnValidation
18
19
  (ssn[0..2] == "000") && errors[:zero_area] = "SSN value contains zeros in area number 000-xx-xxxx"
19
20
  (ssn[3..4] == "00") && errors[:zero_group] = "SSN value contains zeros in group number xxx-00-xxxx"
20
21
  (ssn[5..8] == "0000") && errors[:zero_serial] = "SSN value contains zeros in serial number xxx-xx-0000"
21
- ascending?(ssn) && errors[:ascending] = "SSN value contains all ASCENDING digits"
22
- descending?(ssn) && errors[:descending] = "SSN value contains all DESCENDING digits"
23
22
  return errors if errors.any? # return if ssn conditions fail
24
23
 
25
24
  # check valid ITIN format last
26
25
  invalid_itin?(ssn) && errors[:invalid_itin] = "SSN value contains invalid ITIN format 9xx-[x]x-xxxx"
26
+
27
+ # check extra validations for possible fake ssns if enabled
28
+ errors.merge!(validate_ascending_descending(ssn)) if enable_ascending?
27
29
  errors
28
30
  end
29
31
 
32
+ def self.validate_ascending_descending(ssn)
33
+ errors = {}
34
+ ascending?(ssn) && errors[:ascending] = "SSN value contains all ASCENDING digits"
35
+ descending?(ssn) && errors[:descending] = "SSN value contains all DESCENDING digits"
36
+ return errors
37
+ end
38
+
30
39
  def self.ascending?(ssn)
31
40
  return true if ssn.chars == DIGITS.rotate(ssn[0].to_i)[0..8]
32
41
  return true if ssn.chars == DIGITS_EX0.rotate(ssn[0].to_i - 1)
@@ -41,13 +50,20 @@ module SsnValidation
41
50
  false
42
51
  end
43
52
 
53
+ # https://www.irs.gov/irm/part3/irm_03-021-263r
44
54
  def self.invalid_itin?(ssn)
45
- ssn[0] == "9" && !%w[7 8].include?(ssn[3])
55
+ return false unless ssn[0] == "9"
56
+ group = ssn[3..4].to_i
57
+ !VALID_ITIN_GROUPS.include?(group)
46
58
  end
47
59
 
48
60
  def self.test_ssn?(ssn)
49
61
  SsnValidation.config.test_ssns.any? {|p| p.match(ssn)}
50
62
  end
63
+
64
+ def self.enable_ascending?
65
+ SsnValidation.config.enable_ascending
66
+ end
51
67
  end
52
68
 
53
69
  def self.validate(ssn)
@@ -10,9 +10,11 @@ module SsnValidation
10
10
 
11
11
  class Configuration
12
12
  attr_accessor :test_ssns
13
+ attr_accessor :enable_ascending
13
14
 
14
15
  def initialize
15
16
  @test_ssns = []
17
+ @enable_ascending = false
16
18
  end
17
19
  end
18
20
  end
@@ -1,2 +1,9 @@
1
1
  require 'ssn_validation/ssn_validation'
2
2
  require 'ssn_validation/ssn'
3
+
4
+ # optional ActiveModel dependency for custom validator
5
+ begin
6
+ require 'validators/social_security_number_validator'
7
+ rescue
8
+ nil
9
+ end
@@ -1,10 +1,13 @@
1
+ require 'active_model'
2
+ require 'ssn_validation/ssn'
3
+
1
4
  module ActiveModel
2
5
  module Validations
3
6
  class SocialSecurityNumberValidator < EachValidator
4
7
  def validate_each(record, attribute, value)
5
- ssn_errors = Ssn.validate(value)
8
+ ssn_errors = SsnValidation::Ssn.validate(value)
6
9
  return if ssn_errors.blank?
7
- ssn_errors.values.each {|error| record.errors[attribute] << error}
10
+ ssn_errors.values.each { |error| record.errors.add(attribute, error) }
8
11
  end
9
12
  end
10
13
  end
data/lib/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module SsnValidation
2
- VERSION = '0.1.2'
2
+ VERSION = '0.1.7'
3
3
  end
@@ -18,5 +18,6 @@ Gem::Specification.new do |spec|
18
18
  spec.required_ruby_version = '>= 2.3'
19
19
  spec.add_development_dependency "rake", '~> 12'
20
20
  spec.add_development_dependency "activemodel", '~> 5'
21
+ spec.add_development_dependency "minitest"
21
22
  end
22
23
 
@@ -1,5 +1,5 @@
1
1
  require 'minitest/autorun'
2
- require 'ssn_validation/ssn'
2
+ require 'ssn_validation'
3
3
 
4
4
  class SsnTest < Minitest::Test
5
5
  include SsnValidation
@@ -7,103 +7,120 @@ class SsnTest < Minitest::Test
7
7
  describe 'valid formats' do
8
8
  describe 'valid ITIN' do
9
9
  it 'is valid' do
10
- assert_equal({}, Ssn.validate('911781111'))
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({})
11
17
  end
12
18
  end
13
19
  describe 'valid SSN' do
14
20
  it 'is valid' do
15
- assert_equal({}, Ssn.validate('123432100'))
21
+ _(Ssn.validate('123432100')).must_equal({})
16
22
  end
17
23
  end
18
24
  describe 'valid repeating SSN' do
19
25
  it 'is valid' do
20
- assert_equal({}, Ssn.validate('123444444'))
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({})
21
32
  end
22
33
  end
23
34
  end
24
35
  describe 'invalid formats' do
25
36
  describe '666 is invalid' do
26
37
  it 'is valid' do
27
- assert_equal({excluded_666: 'SSN value contains excluded area 666-xx-xxxx'}, Ssn.validate('666123210'))
38
+ _(Ssn.validate('666123210')).must_equal({excluded_666: 'SSN value contains excluded area 666-xx-xxxx'})
28
39
  end
29
40
  end
30
41
  describe 'zero area numbers invalid' do
31
42
  it 'is invalid' do
32
- assert_equal({zero_area: 'SSN value contains zeros in area number 000-xx-xxxx'}, Ssn.validate('000567890'))
43
+ _(Ssn.validate('000567890')).must_equal({zero_area: 'SSN value contains zeros in area number 000-xx-xxxx'})
33
44
  end
34
45
  end
35
46
  describe 'zero group numbers invalid' do
36
47
  it 'is invalid' do
37
- assert_equal({zero_group: 'SSN value contains zeros in group number xxx-00-xxxx'}, Ssn.validate('567007890'))
48
+ _(Ssn.validate('567007890')).must_equal({zero_group: 'SSN value contains zeros in group number xxx-00-xxxx'})
38
49
  end
39
50
  end
40
51
  describe 'zero serial numbers invalid' do
41
52
  it 'is invalid' do
42
- assert_equal({zero_serial: 'SSN value contains zeros in serial number xxx-xx-0000'}, Ssn.validate('567890000'))
53
+ _(Ssn.validate('567890000')).must_equal({zero_serial: 'SSN value contains zeros in serial number xxx-xx-0000'})
43
54
  end
44
55
  end
45
56
  describe 'non digits invalid' do
46
57
  it 'is invalid' do
47
- assert_equal({non_digits: 'SSN value contains non-digits'}, Ssn.validate('ABCDEFGHI'))
58
+ _(Ssn.validate('ABCDEFGHI')).must_equal({non_digits: 'SSN value contains non-digits'})
48
59
  end
49
60
  end
50
61
  describe 'not 9 digits invalid' do
51
62
  it 'is invalid' do
52
- assert_equal({nine_digits: 'SSN value is not 9 digits'}, Ssn.validate('303'))
63
+ _(Ssn.validate('303')).must_equal({nine_digits: 'SSN value is not 9 digits'})
53
64
  end
54
65
  end
55
- describe 'ascending digits invalid' do
66
+ describe 'repeating digits invalid' do
56
67
  it 'is invalid' do
57
- assert_equal({ascending: 'SSN value contains all ASCENDING digits'}, Ssn.validate('123456789'))
58
- assert_equal({ascending: 'SSN value contains all ASCENDING digits'}, Ssn.validate('567891234'))
68
+ _(Ssn.validate('888888888')).must_equal({repeating: 'SSN value contains repeating digits'})
59
69
  end
60
70
  end
61
- describe 'ascending digits ex 0 invalid' do
71
+ describe 'invalid ITIN' do
62
72
  it 'is invalid' do
63
- assert_equal({ascending: 'SSN value contains all ASCENDING digits'}, Ssn.validate('678912345'))
64
- assert_equal({ascending: 'SSN value contains all ASCENDING digits'}, Ssn.validate('123456789'))
65
- assert_equal({ascending: 'SSN value contains all ASCENDING digits'}, Ssn.validate('234567891'))
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'})
66
75
  end
67
76
  end
68
- describe 'descending digits invalid' do
77
+ end
78
+ describe 'do extra validations based on probably bogus SSNSs' do
79
+ before do
80
+ SsnValidation.config.enable_ascending = true
81
+ end
82
+ describe 'ascending digits invalid' do
69
83
  it 'is invalid' do
70
- assert_equal({descending: 'SSN value contains all DESCENDING digits'}, Ssn.validate('876543210'))
71
- assert_equal({descending: 'SSN value contains all DESCENDING digits'}, Ssn.validate('321098765'))
72
- assert_equal({descending: 'SSN value contains all DESCENDING digits'}, Ssn.validate('987654321'))
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'})
73
86
  end
74
87
  end
75
- describe 'descending digits ex 0 invalid' do
88
+ describe 'ascending digits ex 0 invalid' do
76
89
  it 'is invalid' do
77
- assert_equal({descending: 'SSN value contains all DESCENDING digits'}, Ssn.validate('321987654'))
78
- assert_equal({descending: 'SSN value contains all DESCENDING digits'}, Ssn.validate('765432198'))
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'})
79
93
  end
80
94
  end
81
- describe 'repeating digits invalid' do
95
+ describe 'descending digits invalid' do
82
96
  it 'is invalid' do
83
- assert_equal({repeating: 'SSN value contains repeating digits'}, Ssn.validate('888888888'))
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'})
84
100
  end
85
101
  end
86
- describe 'invalid ITIN' do
102
+ describe 'descending digits ex 0 invalid' do
87
103
  it 'is invalid' do
88
- assert_equal({invalid_itin: 'SSN value contains invalid ITIN format 9xx-[x]x-xxxx'}, Ssn.validate('900991234'))
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'})
89
106
  end
90
107
  end
91
108
  end
92
109
  describe 'allowing dummy ssns' do
93
110
  it 'allows 666xxxxx' do
94
111
  SsnValidation.config.test_ssns = [/^666/]
95
- assert_equal({}, Ssn.validate('666123456'))
112
+ _(Ssn.validate('666123456')).must_equal({})
96
113
  SsnValidation.config.test_ssns = []
97
114
  end
98
115
  it 'allows random test ssns' do
99
116
  SsnValidation.config.test_ssns = ['509421234']
100
- assert_equal({}, Ssn.validate('509421234'))
117
+ _(Ssn.validate('509421234')).must_equal({})
101
118
  SsnValidation.config.test_ssns = []
102
119
  end
103
120
  it 'allows multiple test ssns' do
104
121
  SsnValidation.config.test_ssns = ['999999999', /^666/]
105
- assert_equal({}, Ssn.validate('666123456'))
106
- assert_equal({}, Ssn.validate('999999999'))
122
+ _(Ssn.validate('666123456')).must_equal({})
123
+ _(Ssn.validate('999999999')).must_equal({})
107
124
  SsnValidation.config.test_ssns = []
108
125
  end
109
126
  end
@@ -1,18 +1,30 @@
1
- # require 'minitest/autorun'
2
- # require 'ssn_validation'
3
- # require 'activemodel'
1
+ require 'minitest/autorun'
2
+ require 'active_model'
3
+ require 'ssn_validation'
4
+ require 'validators/social_security_number_validator'
4
5
 
5
- # class SsnTestModel
6
- # include ActiveModel::Validations
7
- # attr_accessor :ssn
8
- # validates :ssn, social_security_number: true
9
- # end
6
+ class SsnTestModel
7
+ include ActiveModel::Validations
8
+ attr_accessor :ssn
9
+ validates :ssn, social_security_number: true
10
+ end
10
11
 
11
- # class SocialSecurityNumberValidatorTest < Minitest::Test
12
- # describe 'it uses the ssn validation rules' do
13
- # it 'validates' do
14
- # subject = SsnTestModel.new(ssn: '666000000')
15
- # assert_equal({}, subject.errors)
16
- # end
17
- # end
18
- # end
12
+ class SocialSecurityNumberValidatorTest < Minitest::Test
13
+ describe 'it uses the ssn validation rules' do
14
+ it 'validates' do
15
+ subject = SsnTestModel.new
16
+ subject.ssn = '123454321'
17
+ assert subject.valid?
18
+ assert_equal({}, subject.errors.to_h)
19
+ end
20
+
21
+ it 'can use the ascending validation rules' do
22
+ SsnValidation.config.enable_ascending = true
23
+ subject = SsnTestModel.new
24
+ subject.ssn = '123456789'
25
+ subject.valid?
26
+ assert_equal({ssn: 'SSN value contains all ASCENDING digits'}, subject.errors.to_h)
27
+ SsnValidation.config.enable_ascending = false
28
+ end
29
+ end
30
+ 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.2
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: 2019-09-26 00:00:00.000000000 Z
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,30 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '5'
41
- description:
42
- email:
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"
62
+ - Gemfile
63
+ - Gemfile.lock
64
+ - README.md
47
65
  - Rakefile
48
66
  - lib/ssn_validation.rb
49
67
  - lib/ssn_validation/ssn.rb
@@ -58,7 +76,7 @@ homepage: https://github.com/johnsinco/ssn_validation
58
76
  licenses:
59
77
  - Apache-2.0
60
78
  metadata: {}
61
- post_install_message:
79
+ post_install_message:
62
80
  rdoc_options: []
63
81
  require_paths:
64
82
  - lib
@@ -73,9 +91,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
73
91
  - !ruby/object:Gem::Version
74
92
  version: '0'
75
93
  requirements: []
76
- rubyforge_project:
77
- rubygems_version: 2.7.6.2
78
- signing_key:
94
+ rubygems_version: 3.2.22
95
+ signing_key:
79
96
  specification_version: 4
80
97
  summary: Social Security Number (SSN) Validation
81
98
  test_files: