Class: IceNine::RecursionGuard

Inherits:
Object
  • Object
show all
Defined in:
lib/ice_nine/support/recursion_guard.rb

Overview

Protect against infinite recursion

Instance Method Summary collapse

Constructor Details

#initializeundefined

Initialize a recursion guard



13
14
15
# File 'lib/ice_nine/support/recursion_guard.rb', line 13

def initialize
  @object_ids = {}
end

Instance Method Details

#guard(caller_object_id) ⇒ Object

Guard against recursively calling a block with the same object

Examples:

recursion_guard = IceNine::RecursionGuard.new
recursion_guard.guard(object_id) do
  logic_which_may_be_recursively_called_with_object_id(recursion_guard)
end

Parameters:

  • caller_object_id (Integer)

Returns:

  • (Object)


30
31
32
33
34
# File 'lib/ice_nine/support/recursion_guard.rb', line 30

def guard(caller_object_id)
  return if @object_ids.key?(caller_object_id)
  @object_ids[caller_object_id] = nil
  yield
end