security_identifiers 0.1.1 → 0.2.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
  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