Module: SecID::Validatable

Included in:
Base
Defined in:
lib/sec_id/concerns/validatable.rb

Overview

Provides validation methods for identifier types.

Including classes should override #valid_format? and optionally #detect_errors for type-specific validation.

Defined Under Namespace

Modules: ClassMethods

Constant Summary collapse

ERROR_MAP =

Maps error-code symbols to their exception classes; unmapped codes default to InvalidFormatError.

{
  invalid_check_digit: InvalidCheckDigitError,
  invalid_prefix: InvalidStructureError,
  invalid_category: InvalidStructureError,
  invalid_group: InvalidStructureError,
  invalid_attribute: InvalidStructureError,
  invalid_bban: InvalidStructureError,
  invalid_date: InvalidStructureError,
  invalid_country: InvalidStructureError
}.freeze

Instance Method Summary collapse

Instance Method Details

#errorsErrors

Returns an Errors object with error codes and human-readable messages.

Returns:



76
77
78
79
80
# File 'lib/sec_id/concerns/validatable.rb', line 76

def errors
  return @errors if defined?(@errors)

  @errors = Errors.new(error_codes.map { |code| build_error(code, validation_message(code)) })
end

#valid?Boolean

Returns:

  • (Boolean)


61
62
63
# File 'lib/sec_id/concerns/validatable.rb', line 61

def valid?
  valid_format?
end

#validateself

Eagerly triggers validation and caches errors.

Returns:

  • (self)


68
69
70
71
# File 'lib/sec_id/concerns/validatable.rb', line 68

def validate
  errors
  self
end

#validate!self

Validates and returns self if valid, raises an exception otherwise.



86
87
88
89
90
91
# File 'lib/sec_id/concerns/validatable.rb', line 86

def validate!
  return self if valid?

  detail = errors.details.first
  raise self.class.error_class_for(detail[:error]), detail[:message]
end