Sha256: 35daaa3cfe5b528fe7afd66fc354ea8526db1a42af87fd0d1985497b0ac07a3d

Contents?: true

Size: 922 Bytes

Versions: 14

Compression:

Stored size: 922 Bytes

Contents

module R10K

  # R10K::Registry implements a generic object memoization container. It caches
  # new objects and returns cached objects based on the instantiation arguments.
  class Registry

    # Initialize a new registry with a given class
    #
    # @param klass [Class] The class to memoize
    # @param method [Symbol] The method name to use when creating objects.
    #                        Defaults to :new.
    def initialize(klass, method = :new)
      @klass  = klass
      @method = method
      @instances = {}
    end

    # Create a new object, or return a memoized object.
    #
    # @param args [*Object] The arguments to pass to the initialize method
    #
    # @return [Object] A memoized instance of the registered class
    def generate(*args)
      @instances[args] ||= @klass.send(@method, *args)
    end

    # Clear all memoized objects
    def clear!
      @instances = {}
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
r10k-1.2.4 lib/r10k/registry.rb
r10k-1.2.3 lib/r10k/registry.rb
r10k-1.2.2 lib/r10k/registry.rb
r10k-1.2.1 lib/r10k/registry.rb
r10k-1.2.0 lib/r10k/registry.rb
r10k-1.2.0rc2 lib/r10k/registry.rb
r10k-1.1.4 lib/r10k/registry.rb
r10k-1.2.0rc1 lib/r10k/registry.rb
r10k-1.1.3 lib/r10k/registry.rb
r10k-1.1.2 lib/r10k/registry.rb
r10k-1.1.1 lib/r10k/registry.rb
r10k-1.1.1rc1 lib/r10k/registry.rb
r10k-1.1.0 lib/r10k/registry.rb
r10k-1.1.0rc1 lib/r10k/registry.rb