security_identifiers 0.1.1 → 0.2.0

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
  SHA1:
3
- metadata.gz: 2966f074a72f9e3b0937e0d66ee7738f735da794
4
- data.tar.gz: efdb4c760ec5945b8a5e2a90c2f046eeb4c4a898
3
+ metadata.gz: 8d4a1a164bc410f563cc724a23854d04ecfa5f56
4
+ data.tar.gz: 6ae673ffb5413e871201358c2b2c2da695b81a75
5
5
  SHA512:
6
- metadata.gz: 0e2c726c65b626c4cbb6f6d992b013a8c2280ee6ae3f7a30da5731951b56f0890684eef22f938d1e6b3218513c383108010cb81a8d3b826f2871198be3dbc2df
7
- data.tar.gz: 0ec8c45c8a1a9665e4f3293e55e4125b81779b25e2f3e353b8c6d9f35e0d11272a609b2e8084990ff6a7a48db3034fe24f57a2d549cb49ed39361982fae8a122
6
+ metadata.gz: 16cd1df966a268205dc28469b74b873196466576f7e4f689072f4f2301ea77831a4cdf93f6f41a40bb28c578e7483c8bda290e4fbeea5eaf6d072d5ae07df0cd
7
+ data.tar.gz: 4faeb36286a5d64b6b2f57b1bf9e7afb57c6664cc3a53932d013bee1f12d1143967e325b49a2dc09f2c393eda37568a8cc0a1e97a5e5bbfd78664b1d5e27a73f
data/.gitignore CHANGED
@@ -16,3 +16,5 @@ spec/reports
16
16
  test/tmp
17
17
  test/version_tmp
18
18
  tmp
19
+
20
+ .rubocop-http*
data/.rubocop.yml ADDED
@@ -0,0 +1,2 @@
1
+ inherit_from:
2
+ - https://raw.githubusercontent.com/invisiblelines/style-guide/master/ruby/.rubocop.yml
data/.travis.yml CHANGED
@@ -1,8 +1,16 @@
1
+ sudo: false
1
2
  language: ruby
2
3
  rvm:
3
- - 2.2.0
4
- - 2.1.0
5
- - 2.0.0
6
- - 1.9.3
7
- - jruby-19mode
4
+ - 2.4.0
5
+ - 2.3.3
6
+ - 2.2.6
7
+ - jruby-9.1.5.0
8
+ - jruby-head
8
9
  - ruby-head
10
+ cache:
11
+ bundler: true
12
+
13
+ matrix:
14
+ allow_failures:
15
+ - rvm: ruby-head
16
+ - rvm: jruby-head
data/README.md CHANGED
@@ -47,7 +47,7 @@ Now you can validate
47
47
 
48
48
  isin.valid? # => true
49
49
 
50
- The same method apply to CUSIPs and SEDOLs.
50
+ The same method applies to CUSIPs and SEDOLs.
51
51
 
52
52
  CUSIPs and SEDOLs also support converting these identifiers to ISINs.
53
53
 
data/Rakefile CHANGED
@@ -1,8 +1,8 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
3
 
4
- RSpec::Core::RakeTask.new(:spec)
4
+ RSpec::Core::RakeTask.new(:spec)
5
5
 
6
- task :spec
6
+ task :spec
7
7
 
8
- task :default => :spec
8
+ task default: :spec
@@ -1,10 +1,8 @@
1
1
  module SecurityIdentifiers
2
-
3
2
  class InvalidFormat < StandardError; end
4
3
  class InvalidConversion < StandardError; end
5
4
 
6
5
  class Base
7
-
8
6
  attr_reader :original_check_digit
9
7
 
10
8
  def valid?
@@ -17,22 +15,31 @@ module SecurityIdentifiers
17
15
 
18
16
  private
19
17
 
20
- def digits
21
- @digits ||= @identifier.split('').map { |i| i.match(/[A-Z]/) ? (i.ord - 55) : i.to_i }
22
- end
18
+ def digits_for(char)
19
+ return char.to_i unless char =~ /[A-Z]/
23
20
 
24
- def even_values
25
- @even_values ||= digits.values_at(* digits.each_index.select { |i| i.even? })
26
- end
21
+ ord = char.to_i(36)
22
+ [ord / 10, ord % 10]
23
+ end
27
24
 
28
- def odd_values
29
- @odd_values ||= digits.values_at(* digits.each_index.select { |i| i.odd? })
30
- end
25
+ def digits
26
+ @digits ||= @identifier.each_char.flat_map { |char| digits_for(char) }
27
+ end
31
28
 
32
- def fix!
33
- @original_check_digit = check_digit
34
- end
29
+ def even_values
30
+ @even_values ||= digits.select.with_index(1) { |digit, i| i.even? && digit }
31
+ end
35
32
 
36
- end
33
+ def odd_values
34
+ @odd_values ||= digits.select.with_index(1) { |digit, i| i.odd? && digit }
35
+ end
36
+
37
+ def fix!
38
+ @original_check_digit = check_digit
39
+ end
37
40
 
41
+ def mod_10(sum)
42
+ (10 - sum % 10) % 10
43
+ end
44
+ end
38
45
  end
@@ -1,11 +1,15 @@
1
1
  module SecurityIdentifiers
2
-
3
2
  class CUSIP < Base
3
+ SYMBOLS = {
4
+ '*' => [3, 6],
5
+ '@' => [3, 7],
6
+ '#' => [3, 8]
7
+ }.freeze
4
8
 
5
9
  def initialize(str)
6
10
  raise InvalidFormat if str.nil?
7
11
 
8
- match_data = str.upcase.match(/^([A-Z0-9]{8})(\d{1})?$/)
12
+ match_data = str.upcase.match(/^([A-Z0-9\*@#]{8})(\d{1})?$/)
9
13
 
10
14
  raise InvalidFormat if match_data.nil?
11
15
 
@@ -15,21 +19,27 @@ module SecurityIdentifiers
15
19
  end
16
20
 
17
21
  def check_digit
18
- values = odd_values.map { |i| i * 2 }.zip(even_values).flatten
22
+ values = even_values.map { |i| i * 2 }.zip(odd_values).flatten
19
23
 
20
- values = values.inject(0) do |sum, i|
21
- sum += (i / 10) + i % 10
24
+ sum = values.inject(0) do |result, i|
25
+ result + (i / 10) + i % 10
22
26
  end
23
27
 
24
- ((10 - values) % 10) % 10
28
+ mod_10(sum)
25
29
  end
26
30
 
27
31
  def to_isin(iso = 'US')
28
- raise InvalidConversion if !['US', 'CA'].include?(iso)
32
+ raise InvalidConversion unless %w(US CA).include?(iso)
29
33
 
30
34
  ISIN.new([iso, @identifier, check_digit].join)
31
35
  end
32
36
 
33
- end
37
+ private
38
+
39
+ def digits_for(char)
40
+ return SYMBOLS[char] if SYMBOLS.key?(char)
34
41
 
42
+ super
43
+ end
44
+ end
35
45
  end
@@ -1,7 +1,5 @@
1
1
  module SecurityIdentifiers
2
-
3
2
  class ISIN < Base
4
-
5
3
  def initialize(str)
6
4
  raise InvalidFormat if str.nil?
7
5
 
@@ -15,25 +13,22 @@ module SecurityIdentifiers
15
13
  end
16
14
 
17
15
  def check_digit
18
- longest, shortest = if even_values.last == digits.last
19
- [even_values, odd_values]
20
- else
21
- [odd_values, even_values]
22
- end
16
+ first_group, second_group = digit_groups
17
+ first_group.map! { |d| d * 2 }
23
18
 
24
- longest = longest.map { |i| i * 2 }
25
- values = (longest.concat(shortest)).to_s.scan(/./).map(&:to_i)
26
- sum = values.inject(&:+)
19
+ sum = (first_group + second_group).join.each_char.inject(0) { |result, i| result + i.to_i }
27
20
 
28
- (10 - (sum % 10)) % 10
21
+ mod_10(sum)
29
22
  end
30
23
 
31
- protected
24
+ private
32
25
 
33
- def digits
34
- @digits ||= super.join('').split('').map(&:to_i)
26
+ def digit_groups
27
+ if digits.size.even?
28
+ [even_values, odd_values]
29
+ else
30
+ [odd_values, even_values]
35
31
  end
36
-
32
+ end
37
33
  end
38
-
39
34
  end
@@ -1,6 +1,6 @@
1
1
  module SecurityIdentifiers
2
-
3
2
  class SEDOL < Base
3
+ WEIGHTS = [1, 3, 1, 7, 3, 9, 1].freeze
4
4
 
5
5
  def initialize(str)
6
6
  raise InvalidFormat if str.nil?
@@ -15,22 +15,23 @@ module SecurityIdentifiers
15
15
  end
16
16
 
17
17
  def check_digit
18
- weights = [1, 3, 1, 7, 3, 9, 1]
19
- sum = 0
20
-
21
- digits.each_with_index do |i, idx|
22
- sum += weights[idx] * i
18
+ sum = digits.each_with_index.inject(0) do |result, (i, idx)|
19
+ result + WEIGHTS[idx] * i
23
20
  end
24
21
 
25
- (10 - sum % 10) % 10
22
+ mod_10(sum)
26
23
  end
27
24
 
28
- def to_isin(iso='GB')
29
- raise InvalidConversion if !['GB', 'IE'].include?(iso)
25
+ def to_isin(iso = 'GB')
26
+ raise InvalidConversion unless %w(GB IE).include?(iso)
30
27
 
31
28
  ISIN.new([iso, '00', @identifier, check_digit].join)
32
29
  end
33
30
 
34
- end
31
+ private
35
32
 
33
+ def digits_for(char)
34
+ char =~ /[A-Z]/ ? char.to_i(36) : char.to_i
35
+ end
36
+ end
36
37
  end
@@ -1,23 +1,13 @@
1
1
  module SecurityIdentifiers
2
-
3
2
  module Validations
4
-
5
3
  class CusipValidator < ActiveModel::EachValidator
6
-
7
4
  def validate_each(record, attribute, value)
8
- begin
9
- cusip = CUSIP.new(value)
5
+ cusip = CUSIP.new(value)
10
6
 
11
- unless cusip.valid?
12
- record.errors[attribute] << 'does not have a valid check digit'
13
- end
14
- rescue SecurityIdentifiers::InvalidFormat
15
- record.errors[attribute] << 'is not in the correct format'
16
- end
7
+ record.errors[attribute] << 'does not have a valid check digit' unless cusip.valid?
8
+ rescue SecurityIdentifiers::InvalidFormat
9
+ record.errors[attribute] << 'is not in the correct format'
17
10
  end
18
-
19
11
  end
20
-
21
12
  end
22
-
23
13
  end
@@ -1,23 +1,13 @@
1
1
  module SecurityIdentifiers
2
-
3
2
  module Validations
4
-
5
3
  class IsinValidator < ActiveModel::EachValidator
6
-
7
4
  def validate_each(record, attribute, value)
8
- begin
9
- isin = ISIN.new(value)
5
+ isin = ISIN.new(value)
10
6
 
11
- unless isin.valid?
12
- record.errors[attribute] << 'does not have a valid check digit'
13
- end
14
- rescue SecurityIdentifiers::InvalidFormat
15
- record.errors[attribute] << 'is not in the correct format'
16
- end
7
+ record.errors[attribute] << 'does not have a valid check digit' unless isin.valid?
8
+ rescue SecurityIdentifiers::InvalidFormat
9
+ record.errors[attribute] << 'is not in the correct format'
17
10
  end
18
-
19
11
  end
20
-
21
12
  end
22
-
23
13
  end
@@ -1,23 +1,13 @@
1
1
  module SecurityIdentifiers
2
-
3
2
  module Validations
4
-
5
3
  class SedolValidator < ActiveModel::EachValidator
6
-
7
4
  def validate_each(record, attribute, value)
8
- begin
9
- sedol = SEDOL.new(value)
5
+ sedol = SEDOL.new(value)
10
6
 
11
- unless sedol.valid?
12
- record.errors[attribute] << 'does not have a valid check digit'
13
- end
14
- rescue SecurityIdentifiers::InvalidFormat
15
- record.errors[attribute] << 'is not in the correct format'
16
- end
7
+ record.errors[attribute] << 'does not have a valid check digit' unless sedol.valid?
8
+ rescue SecurityIdentifiers::InvalidFormat
9
+ record.errors[attribute] << 'is not in the correct format'
17
10
  end
18
-
19
11
  end
20
-
21
12
  end
22
-
23
13
  end
@@ -1,5 +1,3 @@
1
1
  module SecurityIdentifiers
2
-
3
- VERSION = '0.1.1'
4
-
2
+ VERSION = '0.2.0'.freeze
5
3
  end
@@ -5,25 +5,25 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
5
  require 'security_identifiers/version'
6
6
 
7
7
  Gem::Specification.new do |s|
8
- s.name = "security_identifiers"
8
+ s.name = 'security_identifiers'
9
9
  s.version = SecurityIdentifiers::VERSION
10
- s.authors = ["Kieran Johnson"]
11
- s.email = ["hello@invisiblelines.com"]
12
- s.summary = %q{Security Identifier validation library for Ruby}
13
- s.description = s.summary
14
- s.homepage = ""
15
- s.license = "MIT"
10
+ s.authors = ['Kieran Johnson']
11
+ s.email = ['hello@invisiblelines.com']
12
+ s.summary = 'Security Identifier validation library for Ruby'
13
+ s.description = 'Validate ISIN, CUSIP and SEDOL codes'
14
+ s.homepage = 'https://github.com/invisiblelines/security_identifiers'
15
+ s.license = 'MIT'
16
16
 
17
- s.files = `git ls-files`.split($/)
17
+ s.files = `git ls-files`.split($RS)
18
18
  s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
19
  s.test_files = s.files.grep(%r{^(test|spec|features)/})
20
- s.require_paths = ["lib"]
20
+ s.require_paths = ['lib']
21
21
 
22
22
  s.add_development_dependency 'bundler', '~> 1.3'
23
- s.add_development_dependency 'rake'
24
- s.add_development_dependency 'activemodel'
23
+ s.add_development_dependency 'rake', '~> 12.0', '>= 12.0.0'
24
+ s.add_development_dependency 'activemodel', '5.0.2'
25
25
  s.add_development_dependency 'guard', '2.12.1'
26
26
  s.add_development_dependency 'guard-rspec', '4.5.0'
27
-
28
- s.add_development_dependency 'rspec', '~> 3.2.0'
27
+ s.add_development_dependency 'rspec', '~> 3.5', '>= 3.5.0'
28
+ s.add_development_dependency 'rubocop', '0.47.1'
29
29
  end
data/spec/cusip_spec.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe CUSIP do
4
-
5
4
  it 'is invalid without 8 character alpha-numeric identifier' do
6
5
  expect { CUSIP.new('5509BG3') }.to raise_error(SecurityIdentifiers::InvalidFormat)
7
6
  end
@@ -38,6 +37,18 @@ describe CUSIP do
38
37
  end
39
38
  end
40
39
 
40
+ context 'Valid PPN codes' do
41
+ let(:cusip) { CUSIP.new('00800*AA6') }
42
+
43
+ it 'calculates the check digit' do
44
+ expect(cusip.check_digit).to eql(cusip.original_check_digit.to_i)
45
+ end
46
+
47
+ it 'validates the check digit' do
48
+ expect(cusip).to be_valid
49
+ end
50
+ end
51
+
41
52
  context 'Invalid check digit' do
42
53
  let(:cusip) { CUSIP.new('125509BG4') }
43
54
 
@@ -69,5 +80,4 @@ describe CUSIP do
69
80
  expect(cusip.to_s).to eql('125509BG3')
70
81
  end
71
82
  end
72
-
73
83
  end
data/spec/isin_spec.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe ISIN do
4
-
5
4
  it 'is invalid without a country code' do
6
5
  expect { ISIN.new('120378331004') }.to raise_error(SecurityIdentifiers::InvalidFormat)
7
6
  end
@@ -42,6 +41,30 @@ describe ISIN do
42
41
  end
43
42
  end
44
43
 
44
+ context 'Regression alphanumeric ISIN' do
45
+ let(:isin) { ISIN.new('CA26210W1005') }
46
+
47
+ it 'calculates the check digit' do
48
+ expect(isin.check_digit).to eql(5)
49
+ end
50
+
51
+ it 'validates the check digit' do
52
+ expect(isin).to be_valid
53
+ end
54
+ end
55
+
56
+ context 'Valid alphanumeric ISIN ETF' do
57
+ let(:isin) { ISIN.new('IE00B3RBWM25') }
58
+
59
+ it 'calculates the check digit' do
60
+ expect(isin.check_digit).to eql(5)
61
+ end
62
+
63
+ it 'validates the check digit' do
64
+ expect(isin).to be_valid
65
+ end
66
+ end
67
+
45
68
  context 'Invalid check digit' do
46
69
  let(:isin) { ISIN.new('US0378331004') }
47
70
 
@@ -50,6 +73,14 @@ describe ISIN do
50
73
  end
51
74
  end
52
75
 
76
+ context 'Invalid check digit ETF' do
77
+ let(:isin) { ISIN.new('IE00B3RBWM24') }
78
+
79
+ it 'validates the check digit' do
80
+ expect(isin).to_not be_valid
81
+ end
82
+ end
83
+
53
84
  context '#to_s' do
54
85
  let(:isin) { ISIN.new('AU0000XVGZA3') }
55
86
 
@@ -57,5 +88,4 @@ describe ISIN do
57
88
  expect(isin.to_s).to eql('AU0000XVGZA3')
58
89
  end
59
90
  end
60
-
61
91
  end
data/spec/sedol_spec.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe SEDOL do
4
-
5
4
  it 'is invalid without 6 character alpha-numeric identifier' do
6
5
  expect { SEDOL.new('B0WNL') }.to raise_error(SecurityIdentifiers::InvalidFormat)
7
6
  end
@@ -49,5 +48,4 @@ describe SEDOL do
49
48
  expect(sedol.to_s).to eql('B0WNLY7')
50
49
  end
51
50
  end
52
-
53
51
  end
@@ -1,9 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Validations::CusipValidator do
4
-
5
4
  context 'with invalid cusip' do
6
-
7
5
  subject { Security.new(cusip: '5509BG3') }
8
6
 
9
7
  it 'is invalid' do
@@ -12,12 +10,10 @@ describe Validations::CusipValidator do
12
10
  end
13
11
 
14
12
  context 'with cusip' do
15
-
16
13
  subject { Security.new(cusip: '125509BG3') }
17
14
 
18
15
  it 'is valid' do
19
16
  expect(subject).to be_valid
20
17
  end
21
18
  end
22
-
23
19
  end
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Validations::IsinValidator do
4
-
5
4
  context 'without isin' do
6
5
  subject { Security.new(isin: 'US03783310') }
7
6
 
@@ -17,5 +16,4 @@ describe Validations::IsinValidator do
17
16
  expect(subject).to be_valid
18
17
  end
19
18
  end
20
-
21
19
  end
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Validations::SedolValidator do
4
-
5
4
  context 'without sedol' do
6
5
  subject { Security.new(sedol: 'BOWN') }
7
6
 
@@ -11,12 +10,10 @@ describe Validations::SedolValidator do
11
10
  end
12
11
 
13
12
  context 'with sedol' do
14
-
15
13
  subject { Security.new(sedol: 'B0WNLY7') }
16
14
 
17
15
  it 'is valid' do
18
16
  expect(subject).to be_valid
19
17
  end
20
18
  end
21
-
22
19
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: security_identifiers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kieran Johnson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-11 00:00:00.000000000 Z
11
+ date: 2017-03-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -28,30 +28,36 @@ dependencies:
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '12.0'
31
34
  - - ">="
32
35
  - !ruby/object:Gem::Version
33
- version: '0'
36
+ version: 12.0.0
34
37
  type: :development
35
38
  prerelease: false
36
39
  version_requirements: !ruby/object:Gem::Requirement
37
40
  requirements:
41
+ - - "~>"
42
+ - !ruby/object:Gem::Version
43
+ version: '12.0'
38
44
  - - ">="
39
45
  - !ruby/object:Gem::Version
40
- version: '0'
46
+ version: 12.0.0
41
47
  - !ruby/object:Gem::Dependency
42
48
  name: activemodel
43
49
  requirement: !ruby/object:Gem::Requirement
44
50
  requirements:
45
- - - ">="
51
+ - - '='
46
52
  - !ruby/object:Gem::Version
47
- version: '0'
53
+ version: 5.0.2
48
54
  type: :development
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
51
57
  requirements:
52
- - - ">="
58
+ - - '='
53
59
  - !ruby/object:Gem::Version
54
- version: '0'
60
+ version: 5.0.2
55
61
  - !ruby/object:Gem::Dependency
56
62
  name: guard
57
63
  requirement: !ruby/object:Gem::Requirement
@@ -86,15 +92,35 @@ dependencies:
86
92
  requirements:
87
93
  - - "~>"
88
94
  - !ruby/object:Gem::Version
89
- version: 3.2.0
95
+ version: '3.5'
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: 3.5.0
90
99
  type: :development
91
100
  prerelease: false
92
101
  version_requirements: !ruby/object:Gem::Requirement
93
102
  requirements:
94
103
  - - "~>"
95
104
  - !ruby/object:Gem::Version
96
- version: 3.2.0
97
- description: Security Identifier validation library for Ruby
105
+ version: '3.5'
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: 3.5.0
109
+ - !ruby/object:Gem::Dependency
110
+ name: rubocop
111
+ requirement: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - '='
114
+ - !ruby/object:Gem::Version
115
+ version: 0.47.1
116
+ type: :development
117
+ prerelease: false
118
+ version_requirements: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - '='
121
+ - !ruby/object:Gem::Version
122
+ version: 0.47.1
123
+ description: Validate ISIN, CUSIP and SEDOL codes
98
124
  email:
99
125
  - hello@invisiblelines.com
100
126
  executables: []
@@ -102,6 +128,7 @@ extensions: []
102
128
  extra_rdoc_files: []
103
129
  files:
104
130
  - ".gitignore"
131
+ - ".rubocop.yml"
105
132
  - ".travis.yml"
106
133
  - Gemfile
107
134
  - Guardfile
@@ -125,7 +152,7 @@ files:
125
152
  - spec/validations/cusip_validator_spec.rb
126
153
  - spec/validations/isin_validator_spec.rb
127
154
  - spec/validations/sedol_validator_spec.rb
128
- homepage: ''
155
+ homepage: https://github.com/invisiblelines/security_identifiers
129
156
  licenses:
130
157
  - MIT
131
158
  metadata: {}
@@ -145,7 +172,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
145
172
  version: '0'
146
173
  requirements: []
147
174
  rubyforge_project:
148
- rubygems_version: 2.4.5
175
+ rubygems_version: 2.4.5.1
149
176
  signing_key:
150
177
  specification_version: 4
151
178
  summary: Security Identifier validation library for Ruby