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 +4 -4
- data/.gitignore +2 -0
- data/.rubocop.yml +2 -0
- data/.travis.yml +13 -5
- data/README.md +1 -1
- data/Rakefile +5 -5
- data/lib/security_identifiers/base.rb +22 -15
- data/lib/security_identifiers/cusip.rb +18 -8
- data/lib/security_identifiers/isin.rb +11 -16
- data/lib/security_identifiers/sedol.rb +11 -10
- data/lib/security_identifiers/validations/cusip_validator.rb +4 -14
- data/lib/security_identifiers/validations/isin_validator.rb +4 -14
- data/lib/security_identifiers/validations/sedol_validator.rb +4 -14
- data/lib/security_identifiers/version.rb +1 -3
- data/security_identifiers.gemspec +13 -13
- data/spec/cusip_spec.rb +12 -2
- data/spec/isin_spec.rb +32 -2
- data/spec/sedol_spec.rb +0 -2
- data/spec/validations/cusip_validator_spec.rb +0 -4
- data/spec/validations/isin_validator_spec.rb +0 -2
- data/spec/validations/sedol_validator_spec.rb +0 -3
- metadata +40 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8d4a1a164bc410f563cc724a23854d04ecfa5f56
|
4
|
+
data.tar.gz: 6ae673ffb5413e871201358c2b2c2da695b81a75
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 16cd1df966a268205dc28469b74b873196466576f7e4f689072f4f2301ea77831a4cdf93f6f41a40bb28c578e7483c8bda290e4fbeea5eaf6d072d5ae07df0cd
|
7
|
+
data.tar.gz: 4faeb36286a5d64b6b2f57b1bf9e7afb57c6664cc3a53932d013bee1f12d1143967e325b49a2dc09f2c393eda37568a8cc0a1e97a5e5bbfd78664b1d5e27a73f
|
data/.gitignore
CHANGED
data/.rubocop.yml
ADDED
data/.travis.yml
CHANGED
@@ -1,8 +1,16 @@
|
|
1
|
+
sudo: false
|
1
2
|
language: ruby
|
2
3
|
rvm:
|
3
|
-
- 2.
|
4
|
-
- 2.
|
5
|
-
- 2.
|
6
|
-
- 1.
|
7
|
-
- jruby-
|
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
data/Rakefile
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
require
|
2
|
-
require
|
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 :
|
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
|
-
|
21
|
-
|
22
|
-
end
|
18
|
+
def digits_for(char)
|
19
|
+
return char.to_i unless char =~ /[A-Z]/
|
23
20
|
|
24
|
-
|
25
|
-
|
26
|
-
|
21
|
+
ord = char.to_i(36)
|
22
|
+
[ord / 10, ord % 10]
|
23
|
+
end
|
27
24
|
|
28
|
-
|
29
|
-
|
30
|
-
|
25
|
+
def digits
|
26
|
+
@digits ||= @identifier.each_char.flat_map { |char| digits_for(char) }
|
27
|
+
end
|
31
28
|
|
32
|
-
|
33
|
-
|
34
|
-
|
29
|
+
def even_values
|
30
|
+
@even_values ||= digits.select.with_index(1) { |digit, i| i.even? && digit }
|
31
|
+
end
|
35
32
|
|
36
|
-
|
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 =
|
22
|
+
values = even_values.map { |i| i * 2 }.zip(odd_values).flatten
|
19
23
|
|
20
|
-
|
21
|
-
|
24
|
+
sum = values.inject(0) do |result, i|
|
25
|
+
result + (i / 10) + i % 10
|
22
26
|
end
|
23
27
|
|
24
|
-
(
|
28
|
+
mod_10(sum)
|
25
29
|
end
|
26
30
|
|
27
31
|
def to_isin(iso = 'US')
|
28
|
-
raise InvalidConversion
|
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
|
-
|
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
|
-
|
19
|
-
|
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
|
-
|
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
|
-
(
|
21
|
+
mod_10(sum)
|
29
22
|
end
|
30
23
|
|
31
|
-
|
24
|
+
private
|
32
25
|
|
33
|
-
|
34
|
-
|
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
|
-
|
19
|
-
|
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
|
-
(
|
22
|
+
mod_10(sum)
|
26
23
|
end
|
27
24
|
|
28
|
-
def to_isin(iso='GB')
|
29
|
-
raise InvalidConversion
|
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
|
-
|
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
|
-
|
9
|
-
cusip = CUSIP.new(value)
|
5
|
+
cusip = CUSIP.new(value)
|
10
6
|
|
11
|
-
|
12
|
-
|
13
|
-
|
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
|
-
|
9
|
-
isin = ISIN.new(value)
|
5
|
+
isin = ISIN.new(value)
|
10
6
|
|
11
|
-
|
12
|
-
|
13
|
-
|
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
|
-
|
9
|
-
sedol = SEDOL.new(value)
|
5
|
+
sedol = SEDOL.new(value)
|
10
6
|
|
11
|
-
|
12
|
-
|
13
|
-
|
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
|
@@ -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 =
|
8
|
+
s.name = 'security_identifiers'
|
9
9
|
s.version = SecurityIdentifiers::VERSION
|
10
|
-
s.authors = [
|
11
|
-
s.email = [
|
12
|
-
s.summary =
|
13
|
-
s.description =
|
14
|
-
s.homepage =
|
15
|
-
s.license =
|
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 = [
|
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 '
|
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.
|
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:
|
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:
|
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:
|
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:
|
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:
|
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.
|
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.
|
97
|
-
|
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
|