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 =
{
  invalid_check_digit: InvalidCheckDigitError,
  invalid_prefix: InvalidStructureError,
  invalid_category: InvalidStructureError,
  invalid_group: InvalidStructureError,
  invalid_bban: InvalidStructureError,
  invalid_date: InvalidStructureError
}.freeze

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



19
20
21
# File 'lib/sec_id/concerns/validatable.rb', line 19

def self.included(base)
  base.extend(ClassMethods)
end

Instance Method Details

#errorsErrors

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

Returns:



73
74
75
76
77
# File 'lib/sec_id/concerns/validatable.rb', line 73

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)


58
59
60
# File 'lib/sec_id/concerns/validatable.rb', line 58

def valid?
  valid_format?
end

#validateself

Eagerly triggers validation and caches errors.

Returns:

  • (self)


65
66
67
68
# File 'lib/sec_id/concerns/validatable.rb', line 65

def validate
  errors
  self
end

#validate!self

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



83
84
85
86
87
88
# File 'lib/sec_id/concerns/validatable.rb', line 83

def validate!
  return self if valid?

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