Sha256: b601e9b6f79cfa9a15b4d2384ef90b98f261268a55f3b0103de484f035bc9b7c

Contents?: true

Size: 1.03 KB

Versions: 1

Compression:

Stored size: 1.03 KB

Contents

require 'registrable/version'

# Allow a class to hold a registry of instances
module Registrable

  # All registered instances
  #
  # @return [Hash]
  def registry
    @registry ||= {}.freeze
  end

  # Register an instance
  #
  # @param [Object] identifier
  # @param [Array] arguments The arguments to pass to #initialize
  # @param [Proc] block The block to pass to #initialize
  # @return [Object] The instance
  def register(identifier, *arguments, &block)
    @registry = @registry ? registry.dup : {}

    instance = new(*arguments, &block)

    @registry[identifier] = instance
    @registry.freeze

    instance
  end

  # Unregister an instance
  #
  # @param [Object] identifier
  # @return [Object] The instance
  def unregister(identifier)
    @registry = @registry ? registry.dup : {}

    instance = @registry.delete(identifier)
    @registry.freeze

    instance
  end

  # Get whether an instance is registered
  #
  # @param [Object] identifier
  # @return [Boolean]
  def registered?(identifier)
    registry.key?(identifier)
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
registrable-0.1.0 lib/registrable.rb