ssn_validation 0.1.2 → 0.1.7

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: 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: