Sha256: ddade26e4fbe05ab9923963a8535a0eefd3400693661d5cdde0160eb64c0d658

Contents?: true

Size: 809 Bytes

Versions: 1

Compression:

Stored size: 809 Bytes

Contents

# encoding: utf-8

module IceNine

  # Protect against infinite recursion
  class RecursionGuard

    # Initialize a recursion guard
    #
    # @return [undefined]
    #
    # @api public
    def initialize
      @object_ids = {}
    end

    # 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
    def guard(caller_object_id)
      return if @object_ids.key?(caller_object_id)
      @object_ids[caller_object_id] = nil
      yield
    end

  end # RecursionGuard
end # module IceNine

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ice_nine-0.10.0 lib/ice_nine/support/recursion_guard.rb