class Concurrent::Collection::CopyOnWriteObserverSet

Experimental RBS support (using type sampling data from the type_fusion project).

# sig/concurrent-ruby/concurrent/collection/copy_on_write_observer_set.rbs

class Concurrent::Collection::CopyOnWriteObserverSet < Concurrent::Collection::Synchronization::LockableObject
  def clear_observers_and_return_old: () -> untyped
  def initialize: () -> void
  def notify_and_delete_observers: (*Array[] args, ) -> Concurrent::Collection::CopyOnWriteObserverSet
  def notify_to: (Hash observers, *Array[] args) -> untyped
  def ns_initialize: () -> untyped
end

@api private
duplicated and replaced with a new one.
every time an observer is added or removed the whole internal data structure is
A thread safe observer set implemented using copy-on-write approach:

def add_observer(observer = nil, func = :update, &block)

@!macro observable_add_observer
def add_observer(observer = nil, func = :update, &block)
  if observer.nil? && block.nil?
    raise ArgumentError, 'should pass observer as a first argument or block'
  elsif observer && block
    raise ArgumentError.new('cannot provide both an observer and a block')
  end
  if block
    observer = block
    func = :call
  end
  synchronize do
    new_observers = @observers.dup
    new_observers[observer] = func
    @observers = new_observers
    observer
  end
end

def clear_observers_and_return_old

Experimental RBS support (using type sampling data from the type_fusion project).

def clear_observers_and_return_old: () -> untyped

This signature was generated using 2 samples from 1 application.

def clear_observers_and_return_old
  synchronize do
    old_observers = @observers
    @observers = {}
    old_observers
  end
end

def count_observers

@!macro observable_count_observers
def count_observers
  observers.count
end

def delete_observer(observer)

@!macro observable_delete_observer
def delete_observer(observer)
  synchronize do
    new_observers = @observers.dup
    new_observers.delete(observer)
    @observers = new_observers
    observer
  end
end

def delete_observers

@!macro observable_delete_observers
def delete_observers
  self.observers = {}
  self
end

def initialize

Experimental RBS support (using type sampling data from the type_fusion project).

def initialize: () -> void

This signature was generated using 1 sample from 1 application.

def initialize
  super()
  synchronize { ns_initialize }
end

def notify_and_delete_observers(*args, &block)

Experimental RBS support (using type sampling data from the type_fusion project).

def notify_and_delete_observers: (* args, ) -> Concurrent::Collection::CopyOnWriteObserverSet

This signature was generated using 1 sample from 1 application.

Returns:
  • (CopyOnWriteObserverSet) - self

Parameters:
  • args (Object) -- arguments to be passed to each observer
def notify_and_delete_observers(*args, &block)
  old = clear_observers_and_return_old
  notify_to(old, *args, &block)
  self
end

def notify_observers(*args, &block)

Returns:
  • (CopyOnWriteObserverSet) - self

Parameters:
  • args (Object) -- arguments to be passed to each observer
def notify_observers(*args, &block)
  notify_to(observers, *args, &block)
  self
end

def notify_to(observers, *args)

Experimental RBS support (using type sampling data from the type_fusion project).

def notify_to: ( observers, * args) -> untyped

This signature was generated using 4 samples from 1 application.

def notify_to(observers, *args)
  raise ArgumentError.new('cannot give arguments and a block') if block_given? && !args.empty?
  observers.each do |observer, function|
    args = yield if block_given?
    observer.send(function, *args)
  end
end

def ns_initialize

Experimental RBS support (using type sampling data from the type_fusion project).

def ns_initialize: () -> untyped

This signature was generated using 1 sample from 1 application.

def ns_initialize
  @observers = {}
end

def observers

def observers
  synchronize { @observers }
end

def observers=(new_set)

def observers=(new_set)
  synchronize { @observers = new_set }
end