Class: Lutaml::Xsd::Validation::BaseTypes::BaseTypeValidatorRegistry

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

Overview

Registry for mapping XSD built-in types to their validators

This registry provides a centralized lookup mechanism for obtaining the appropriate validator for a given XSD type name.

Examples:

Getting a validator for a type

validator = BaseTypeValidatorRegistry.validator_for("string")
validator.valid?("hello")  # => true

Defined Under Namespace

Classes: UnknownTypeError

Constant Summary collapse

VALIDATOR_CLASSES =

Map of type names to validator classes

{
  # String types
  "string" => StringValidator,
  "normalizedString" => StringValidator,
  "token" => StringValidator,

  # Boolean type
  "boolean" => BooleanValidator,

  # Numeric types
  "decimal" => DecimalValidator,
  "integer" => IntegerValidator,
  "positiveInteger" => IntegerValidator,
  "negativeInteger" => IntegerValidator,
  "nonPositiveInteger" => IntegerValidator,
  "nonNegativeInteger" => IntegerValidator,
  "long" => IntegerValidator,
  "int" => IntegerValidator,
  "short" => IntegerValidator,
  "byte" => IntegerValidator,
  "unsignedLong" => IntegerValidator,
  "unsignedInt" => IntegerValidator,
  "unsignedShort" => IntegerValidator,
  "unsignedByte" => IntegerValidator,
  "float" => DecimalValidator,
  "double" => DecimalValidator,

  # Date/Time types
  "dateTime" => DateTimeValidator,
  "date" => DateValidator,
  "time" => TimeValidator,

  # URI type
  "anyURI" => AnyURIValidator,

  # QName type
  "QName" => QNameValidator,
}.freeze

Class Method Summary collapse

Class Method Details

.clear_cachevoid

This method returns an undefined value.

Clear validator cache



120
121
122
# File 'lib/lutaml/xsd/validation/base_types/base_type_validator_registry.rb', line 120

def clear_cache
  @validators.clear
end

.register(type_name, validator_class) ⇒ void

This method returns an undefined value.

Register a custom type validator

Parameters:

  • type_name (String)

    The XSD type name

  • validator_class (Class)

    The validator class



105
106
107
108
# File 'lib/lutaml/xsd/validation/base_types/base_type_validator_registry.rb', line 105

def register(type_name, validator_class)
  VALIDATOR_CLASSES[type_name] = validator_class
  @validators.delete(type_name) # Clear cached instance
end

.registered?(type_name) ⇒ Boolean

Check if a type is registered

Parameters:

  • type_name (String)

    The XSD type name

Returns:

  • (Boolean)

    true if type is registered



96
97
98
# File 'lib/lutaml/xsd/validation/base_types/base_type_validator_registry.rb', line 96

def registered?(type_name)
  VALIDATOR_CLASSES.key?(type_name)
end

.registered_typesArray<String>

Get all registered type names

Returns:

  • (Array<String>)

    Array of registered type names



113
114
115
# File 'lib/lutaml/xsd/validation/base_types/base_type_validator_registry.rb', line 113

def registered_types
  VALIDATOR_CLASSES.keys
end

.validator_for(type_name) ⇒ BaseTypeValidator

Get validator instance for a type name

Parameters:

  • type_name (String)

    The XSD type name

Returns:

Raises:



77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/lutaml/xsd/validation/base_types/base_type_validator_registry.rb', line 77

def validator_for(type_name)
  # Return cached validator if exists
  return @validators[type_name] if @validators.key?(type_name)

  # Look up validator class
  validator_class = VALIDATOR_CLASSES[type_name]
  unless validator_class
    raise UnknownTypeError,
          "Unknown XSD type: #{type_name}"
  end

  # Create and cache validator instance
  @validators[type_name] = validator_class.new
end