lib/sec_id/isin.rb in sec_id-1.1.0 vs lib/sec_id/isin.rb in sec_id-2.0.0
- old
+ new
@@ -8,40 +8,23 @@
(?<country_code>[A-Z]{2})
(?<nsin>[A-Z0-9]{9}))
(?<check_digit>\d)?
\z/x.freeze
- attr_reader :isin, :country_code, :nsin
+ attr_reader :country_code, :nsin
def initialize(isin)
- @isin = isin.to_s.strip.upcase
- isin_parts = @isin.match(ID_REGEX) || {}
-
+ isin_parts = parse isin
@identifier = isin_parts[:identifier]
@country_code = isin_parts[:country_code]
@nsin = isin_parts[:nsin]
- @check_digit = isin_parts[:check_digit].to_i if isin_parts[:check_digit]
+ @check_digit = isin_parts[:check_digit]&.to_i
end
- def valid?
- return false unless valid_format?
-
- check_digit == calculate_check_digit
- end
-
- def valid_format?
- identifier ? true : false
- end
-
- def restore!
- @check_digit = calculate_check_digit
- @isin = to_s
- end
-
def calculate_check_digit
return mod_10(luhn_sum) if valid_format?
- raise InvalidFormatError, "ISIN '#{isin}' is invalid and check-digit cannot be calculated!"
+ raise InvalidFormatError, "ISIN '#{full_number}' is invalid and check-digit cannot be calculated!"
end
private
# https://en.wikipedia.org/wiki/Luhn_algorithm