Class: Lutaml::Qea::Validation::ValidatorRegistry

Inherits:
Object
  • Object
show all
Defined in:
lib/lutaml/qea/validation/validator_registry.rb

Overview

Registry for managing validators using the registry pattern Allows dynamic registration and retrieval of validators

Examples:

Registering and using validators

registry = ValidatorRegistry.new
registry.register(:package, PackageValidator)
registry.register(:class, ClassValidator)

validator = registry.get(:package)
result = validator.new(context).validate

Instance Method Summary collapse

Constructor Details

#initializeValidatorRegistry

Returns a new instance of ValidatorRegistry.



17
18
19
# File 'lib/lutaml/qea/validation/validator_registry.rb', line 17

def initialize
  @validators = {}
end

Instance Method Details

#allHash<Symbol, Class>

Returns all registered validators

Returns:

  • (Hash<Symbol, Class>)


74
75
76
# File 'lib/lutaml/qea/validation/validator_registry.rb', line 74

def all
  @validators.dup
end

#clearvoid

This method returns an undefined value.

Clears all registered validators



89
90
91
# File 'lib/lutaml/qea/validation/validator_registry.rb', line 89

def clear
  @validators.clear
end

#create(name, context = {}) ⇒ BaseValidator

Creates a validator instance

Parameters:

  • name (Symbol)

    Validator name/key

  • context (Hash) (defaults to: {})

    Validation context (must include :result key)

Returns:

Raises:

  • (KeyError)

    if validator not found



99
100
101
102
# File 'lib/lutaml/qea/validation/validator_registry.rb', line 99

def create(name, context = {})
  result = context[:result] || ValidationResult.new
  fetch(name).new(result: result, context: context)
end

#fetch(name) ⇒ Class

Retrieves a validator class by name, raising an error if not found

Parameters:

  • name (Symbol)

    Validator name/key

Returns:

  • (Class)

Raises:

  • (KeyError)

    if validator not found



50
51
52
53
54
# File 'lib/lutaml/qea/validation/validator_registry.rb', line 50

def fetch(name)
  @validators.fetch(name) do
    raise KeyError, "Validator '#{name}' not registered"
  end
end

#get(name) ⇒ Class?

Retrieves a validator class by name

Parameters:

  • name (Symbol)

    Validator name/key

Returns:

  • (Class, nil)

    Validator class or nil if not found



41
42
43
# File 'lib/lutaml/qea/validation/validator_registry.rb', line 41

def get(name)
  @validators[name]
end

#namesArray<Symbol>

Returns all registered validator names

Returns:

  • (Array<Symbol>)


67
68
69
# File 'lib/lutaml/qea/validation/validator_registry.rb', line 67

def names
  @validators.keys
end

#register(name, validator_class) ⇒ void

This method returns an undefined value.

Registers a validator class

Parameters:

  • name (Symbol)

    Validator name/key

  • validator_class (Class)

    Validator class (must inherit from BaseValidator)

Raises:

  • (ArgumentError)

    if validator_class is not a BaseValidator



28
29
30
31
32
33
34
35
# File 'lib/lutaml/qea/validation/validator_registry.rb', line 28

def register(name, validator_class)
  unless validator_class.is_a?(Class)
    raise ArgumentError,
          "Expected a Class, got #{validator_class.class}"
  end

  @validators[name] = validator_class
end

#registered?(name) ⇒ Boolean

Checks if a validator is registered

Parameters:

  • name (Symbol)

    Validator name/key

Returns:

  • (Boolean)


60
61
62
# File 'lib/lutaml/qea/validation/validator_registry.rb', line 60

def registered?(name)
  @validators.key?(name)
end

#unregister(name) ⇒ Class?

Unregisters a validator

Parameters:

  • name (Symbol)

    Validator name/key

Returns:

  • (Class, nil)

    The unregistered validator class



82
83
84
# File 'lib/lutaml/qea/validation/validator_registry.rb', line 82

def unregister(name)
  @validators.delete(name)
end

#validate(name, context = {}) ⇒ ValidationResult

Runs a validator and returns the result

Parameters:

  • name (Symbol)

    Validator name/key

  • context (Hash) (defaults to: {})

    Validation context (must include :result key)

Returns:

Raises:

  • (KeyError)

    if validator not found



110
111
112
113
114
# File 'lib/lutaml/qea/validation/validator_registry.rb', line 110

def validate(name, context = {})
  validator = create(name, context)
  validator.call
  validator.result
end

#validate_all(names, context = {}) ⇒ ValidationResult

Runs multiple validators and merges their results

Parameters:

  • names (Array<Symbol>)

    Validator names/keys

  • context (Hash) (defaults to: {})

    Validation context

Returns:



121
122
123
124
125
126
127
128
129
130
# File 'lib/lutaml/qea/validation/validator_registry.rb', line 121

def validate_all(names, context = {})
  result = context[:result] || ValidationResult.new
  context[:result] = result

  names.each do |name|
    validate(name, context)
  end

  result
end