Module: Agentic::Observable

Included in:
Task
Defined in:
lib/agentic/observable.rb

Overview

Custom implementation of the Observer pattern Provides a thread-safe way for objects to notify observers of state changes

Instance Method Summary collapse

Instance Method Details

#add_observer(observer) ⇒ void

This method returns an undefined value.

Add an observer to this object

Parameters:

  • observer (Object)

    The observer object



10
11
12
13
# File 'lib/agentic/observable.rb', line 10

def add_observer(observer)
  @_observers ||= []
  @_observers << observer unless @_observers.include?(observer)
end

#count_observersInteger

Return the number of observers

Returns:

  • (Integer)

    The number of observers



30
31
32
# File 'lib/agentic/observable.rb', line 30

def count_observers
  @_observers ? @_observers.size : 0
end

#delete_observer(observer) ⇒ void

This method returns an undefined value.

Remove an observer from this object

Parameters:

  • observer (Object)

    The observer object



18
19
20
# File 'lib/agentic/observable.rb', line 18

def delete_observer(observer)
  @_observers&.delete(observer)
end

#delete_observersvoid

This method returns an undefined value.

Remove all observers from this object



24
25
26
# File 'lib/agentic/observable.rb', line 24

def delete_observers
  @_observers = []
end

#notify_observers(event_type, *args) ⇒ void

This method returns an undefined value.

Notify all observers of an event

Parameters:

  • event_type (Symbol)

    The type of event

  • *args

    Arguments to pass to the observers



38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/agentic/observable.rb', line 38

def notify_observers(event_type, *args)
  return unless @_observers

  # Make a thread-safe copy of the observers array
  observers = @_observers.dup

  observers.each do |observer|
    if observer.respond_to?(:update)
      observer.update(event_type, self, *args)
    end
  end
end