Class: EasyTalk::ValidationAdapters::Registry

Inherits:
Object
  • Object
show all
Defined in:
lib/easy_talk/validation_adapters/registry.rb

Overview

Registry for validation adapters.

The registry allows adapters to be registered with symbolic names and resolved from various input types (symbols, classes, or nil for default).

Examples:

Registering an adapter

EasyTalk::ValidationAdapters::Registry.register(:custom, MyCustomAdapter)

Resolving an adapter

adapter = EasyTalk::ValidationAdapters::Registry.resolve(:active_model)
adapter.build_validations(klass, :name, String, {})

Class Method Summary collapse

Class Method Details

.adaptersHash{Symbol => Class}

Get the hash of registered adapters.

Returns:

  • (Hash{Symbol => Class})

    The registered adapters



22
23
24
# File 'lib/easy_talk/validation_adapters/registry.rb', line 22

def adapters
  @adapters ||= {}
end

.register(name, adapter_class)

This method returns an undefined value.

Register an adapter with a symbolic name.

Parameters:

  • name (Symbol, String)

    The adapter identifier

  • adapter_class (Class)

    The adapter class (must respond to .build_validations)

Raises:

  • (ArgumentError)

    if the adapter does not respond to .build_validations



32
33
34
35
36
# File 'lib/easy_talk/validation_adapters/registry.rb', line 32

def register(name, adapter_class)
  raise ArgumentError, "Adapter must respond to .build_validations" unless adapter_class.respond_to?(:build_validations)

  adapters[name.to_sym] = adapter_class
end

.register_default_adapters

This method returns an undefined value.

Register the default validation adapters. This is called during gem initialization and after reset!



80
81
82
83
# File 'lib/easy_talk/validation_adapters/registry.rb', line 80

def register_default_adapters
  register(:active_model, ActiveModelAdapter)
  register(:none, NoneAdapter)
end

.registered?(name) ⇒ Boolean

Check if an adapter is registered with the given name.

Parameters:

  • name (Symbol, String)

    The adapter name to check

Returns:

  • (Boolean)

    true if the adapter is registered



63
64
65
# File 'lib/easy_talk/validation_adapters/registry.rb', line 63

def registered?(name)
  adapters.key?(name.to_sym)
end

.reset!

This method returns an undefined value.

Reset the registry (useful for testing). Re-registers the default adapters after clearing.



71
72
73
74
# File 'lib/easy_talk/validation_adapters/registry.rb', line 71

def reset!
  @adapters = nil
  register_default_adapters
end

.resolve(adapter) ⇒ Class

Resolve an adapter from various input types.

Parameters:

  • adapter (Symbol, Class, nil)

    The adapter identifier or class

    • nil: returns the default :active_model adapter
    • Symbol: looks up the adapter by name in the registry
    • Class: returns the class directly (assumes it implements the adapter interface)

Returns:

  • (Class)

    The adapter class

Raises:

  • (ArgumentError)

    if the adapter symbol is not registered or type is invalid



46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/easy_talk/validation_adapters/registry.rb', line 46

def resolve(adapter)
  case adapter
  when nil
    adapters[:active_model] || raise(ArgumentError, "No default adapter registered")
  when Symbol
    adapters[adapter] || raise(ArgumentError, "Unknown validation adapter: #{adapter.inspect}")
  when Class
    adapter
  else
    raise ArgumentError, "Invalid adapter type: #{adapter.class}. Expected Symbol, Class, or nil."
  end
end