Class: Tasker::Events::CustomRegistry

Inherits:
Object
  • Object
show all
Includes:
Singleton
Defined in:
lib/tasker/events/custom_registry.rb

Overview

CustomRegistry manages registration and validation of developer-defined custom events

This registry provides a safe way for developers to define their own events alongside Tasker's system events, with conflict prevention and namespace validation.

Usage: registry = Tasker::Events::CustomRegistry.instance registry.register_event('order.fulfilled', description: 'Order completed', fired_by: ['OrderService'])

Or through the Events module: Tasker::Events.register_custom_event('order.fulfilled', description: 'Order completed')

Instance Method Summary collapse

Constructor Details

#initializeCustomRegistry

Returns a new instance of CustomRegistry.



21
22
23
# File 'lib/tasker/events/custom_registry.rb', line 21

def initialize
  @custom_events = {}
end

Instance Method Details

#clear!void Also known as: clear_all_events

This method returns an undefined value.

Clear all registered custom events (useful for testing)



75
76
77
# File 'lib/tasker/events/custom_registry.rb', line 75

def clear!
  @custom_events.clear
end

#custom_eventsHash

Get all registered custom events

Returns:

  • (Hash)

    Custom events with metadata



52
53
54
# File 'lib/tasker/events/custom_registry.rb', line 52

def custom_events
  @custom_events.dup
end

#event_info(name) ⇒ Hash?

Get event information by name

Parameters:

  • name (String)

    Event name

Returns:

  • (Hash, nil)

    Event information or nil if not found



93
94
95
# File 'lib/tasker/events/custom_registry.rb', line 93

def event_info(name)
  @custom_events[name]
end

#event_metadata(name) ⇒ Hash?

Get metadata for a specific custom event

Parameters:

  • name (String)

    Event name

Returns:

  • (Hash, nil)

    Event metadata or nil if not found



68
69
70
# File 'lib/tasker/events/custom_registry.rb', line 68

def (name)
  @custom_events[name]
end

#register_event(name, description: 'Custom event', fired_by: []) ⇒ void

This method returns an undefined value.

Register a custom event with metadata

Parameters:

  • name (String)

    Event name (must contain namespace, e.g., 'order.fulfilled')

  • description (String) (defaults to: 'Custom event')

    Human-readable description

  • fired_by (Array<String>) (defaults to: [])

    Components that fire this event

Raises:

  • (ArgumentError)

    If event name is invalid or conflicts with system events



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/tasker/events/custom_registry.rb', line 32

def register_event(name, description: 'Custom event', fired_by: [])
  validate_event_name!(name)

  @custom_events[name] = {
    name: name,
    category: 'custom',
    description: description,
    fired_by: Array(fired_by),
    registered_at: Time.current
  }

  # Register with dry-events publisher so subscribers can listen
  Tasker::Events::Publisher.instance.register_event(name)

  Rails.logger.debug { "Registered custom event: #{name}" }
end

#registered?(name) ⇒ Boolean

Check if an event is registered as a custom event

Parameters:

  • name (String)

    Event name

Returns:

  • (Boolean)

    Whether the event is registered



60
61
62
# File 'lib/tasker/events/custom_registry.rb', line 60

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

#registered_eventsArray<String>

Get all registered custom event names

Returns:

  • (Array<String>)

    Array of registered event names



85
86
87
# File 'lib/tasker/events/custom_registry.rb', line 85

def registered_events
  @custom_events.keys
end