Class: Lutaml::Xsd::Validation::BaseTypes::BaseTypeValidator Abstract

Inherits:
Object
  • Object
show all
Defined in:
lib/lutaml/xsd/validation/base_types/base_type_validator.rb

Overview

This class is abstract.

Subclasses must implement #valid? and #error_message

Base class for all XSD built-in type validators

Base type validators validate values against XSD built-in types like string, integer, boolean, dateTime, etc.

Examples:

Creating a custom type validator

class CustomTypeValidator < BaseTypeValidator
  def valid?(value)
    # Custom validation logic
    value.start_with?('custom')
  end

  def error_message(value)
    "Value '#{value}' is not a valid custom type"
  end
end

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.for(type_name) ⇒ BaseTypeValidator

Get validator for a specific XSD type name

Parameters:

  • The XSD type name (e.g., 'string', 'integer')

Returns:

  • Validator instance for the type



66
67
68
69
70
71
# File 'lib/lutaml/xsd/validation/base_types/base_type_validator.rb', line 66

def for(type_name)
  # Load registry on first access
  require_relative "base_type_validator_registry" unless defined?(BaseTypeValidatorRegistry)

  BaseTypeValidatorRegistry.validator_for(type_name)
end

.registered?(type_name) ⇒ Boolean

Check if a type is registered

Parameters:

  • The XSD type name

Returns:

  • true if type is registered



77
78
79
80
81
# File 'lib/lutaml/xsd/validation/base_types/base_type_validator.rb', line 77

def registered?(type_name)
  require_relative "base_type_validator_registry" unless defined?(BaseTypeValidatorRegistry)

  BaseTypeValidatorRegistry.registered?(type_name)
end

Instance Method Details

#error_message(value) ⇒ String

This method is abstract.

Subclasses must implement this method

Generate an error message for an invalid value

Parameters:

  • The invalid value

Returns:

  • A descriptive error message

Raises:

  • if not implemented by subclass



48
49
50
51
# File 'lib/lutaml/xsd/validation/base_types/base_type_validator.rb', line 48

def error_message(value)
  raise NotImplementedError,
        "#{self.class.name} must implement #error_message"
end

#type_nameString

Get the type name

Returns:

  • The XSD type name



56
57
58
# File 'lib/lutaml/xsd/validation/base_types/base_type_validator.rb', line 56

def type_name
  self.class.name.split("::").last.sub(/Validator$/, "")
end

#valid?(value) ⇒ Boolean

This method is abstract.

Subclasses must implement this method

Validate a value against the type

Parameters:

  • The value to validate

Returns:

  • true if value is valid, false otherwise

Raises:

  • if not implemented by subclass



37
38
39
40
# File 'lib/lutaml/xsd/validation/base_types/base_type_validator.rb', line 37

def valid?(value)
  raise NotImplementedError,
        "#{self.class.name} must implement #valid?"
end