Class: CallbacksAttachable::AllInstancesCallback

Inherits:
Object
  • Object
show all
Defined in:
lib/callbacks_attachable/all_instances_callback.rb

Instance Method Summary collapse

Constructor Details

#initialize(klass, skip: 0, &callback) ⇒ AllInstancesCallback

Returns a new instance of AllInstancesCallback.



3
4
5
6
7
8
# File 'lib/callbacks_attachable/all_instances_callback.rb', line 3

def initialize(klass, skip: 0, &callback)
  @class = klass
  @skip = skip
  @callback = callback
  @call_counts = {}
end

Instance Method Details

#call(*args, **opts) ⇒ Object



10
11
12
13
14
15
16
# File 'lib/callbacks_attachable/all_instances_callback.rb', line 10

def call(*args, **opts)
  if instance = opts[:instance]
    call_for_instance(instance, *args)
  else
    ObjectSpace.each_object(@class).all?{ |inst| call_for_instance(inst, *args) }
  end
end

#call_for_instance(instance, *args) ⇒ Object



18
19
20
21
22
# File 'lib/callbacks_attachable/all_instances_callback.rb', line 18

def call_for_instance(instance, *args)
  @call_counts[instance.__id__] = @call_counts[instance.__id__].to_i + 1
  return true if @call_counts[instance.__id__] <= @skip
  false != instance.instance_exec(*args, &@callback)
end