Class: Lutaml::Xsd::Validation::Facets::FacetValidatorRegistry

Inherits:
Object
  • Object
show all
Defined in:
lib/lutaml/xsd/validation/facets/facet_validator_registry.rb

Overview

Registry for mapping facet types to their validators

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

Examples:

Getting a validator for a facet

facet = Lutaml::Xsd::Pattern.new(value: "[A-Z]+")
validator = FacetValidatorRegistry.validator_for(facet)
validator.valid?("ABC")  # => true

Defined Under Namespace

Classes: UnknownFacetError

Constant Summary collapse

VALIDATORS =

Map of facet classes to validator classes

{
  "Lutaml::Xsd::Pattern" => PatternFacetValidator,
  "Lutaml::Xsd::Length" => LengthFacetValidator,
  "Lutaml::Xsd::MinLength" => MinLengthFacetValidator,
  "Lutaml::Xsd::MaxLength" => MaxLengthFacetValidator,
  "Lutaml::Xsd::Enumeration" => EnumerationFacetValidator,
  "Lutaml::Xsd::MinInclusive" => MinInclusiveFacetValidator,
  "Lutaml::Xsd::MaxInclusive" => MaxInclusiveFacetValidator,
  "Lutaml::Xsd::MinExclusive" => MinExclusiveFacetValidator,
  "Lutaml::Xsd::MaxExclusive" => MaxExclusiveFacetValidator,
  "Lutaml::Xsd::TotalDigits" => TotalDigitsFacetValidator,
  "Lutaml::Xsd::FractionDigits" => FractionDigitsFacetValidator,
  "Lutaml::Xsd::WhiteSpace" => WhiteSpaceFacetValidator,
}.freeze

Class Method Summary collapse

Class Method Details

.register(facet_class, validator_class) ⇒ void

This method returns an undefined value.

Register a custom facet validator

Parameters:

  • facet_class (Class, String)

    The facet class or class name

  • validator_class (Class)

    The validator class



75
76
77
78
# File 'lib/lutaml/xsd/validation/facets/facet_validator_registry.rb', line 75

def register(facet_class, validator_class)
  facet_name = facet_class.is_a?(String) ? facet_class : facet_class.name
  VALIDATORS[facet_name] = validator_class
end

.registered?(facet) ⇒ Boolean

Check if a facet type is registered

Parameters:

  • facet (Object)

    The facet object or class

Returns:

  • (Boolean)

    true if facet type is registered



65
66
67
68
# File 'lib/lutaml/xsd/validation/facets/facet_validator_registry.rb', line 65

def registered?(facet)
  facet_class = facet.is_a?(Class) ? facet.name : facet.class.name
  VALIDATORS.key?(facet_class)
end

.registered_facetsArray<String>

Get all registered facet types

Returns:

  • (Array<String>)

    Array of registered facet class names



83
84
85
# File 'lib/lutaml/xsd/validation/facets/facet_validator_registry.rb', line 83

def registered_facets
  VALIDATORS.keys
end

.validator_for(facet) ⇒ FacetValidator

Get validator instance for a facet

Parameters:

  • facet (Object)

    The facet object

Returns:

Raises:



54
55
56
57
58
59
# File 'lib/lutaml/xsd/validation/facets/facet_validator_registry.rb', line 54

def validator_for(facet)
  validator_class = VALIDATORS[facet.class.name]
  raise UnknownFacetError, facet.class.name unless validator_class

  validator_class.new(facet)
end