class IceNine::RecursionGuard

Protect against infinite recursion

Public Class Methods

new() click to toggle source

Initialize a recursion guard

@return [undefined]

@api public

# File lib/ice_nine/support/recursion_guard.rb, line 12
def initialize
  @object_ids = {}
end

Public Instance Methods

guard(caller_object_id) { || ... } click to toggle source

Guard against recursively calling a block with the same object

@example

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

@param [Integer] caller_object_id

@return [Object]

@api public

# File lib/ice_nine/support/recursion_guard.rb, line 29
def guard(caller_object_id)
  return if @object_ids.key?(caller_object_id)
  @object_ids[caller_object_id] = nil
  yield
end