Included Modules

Files

Multiton::MetaMethods

Public Instance Methods

initialized?(*e, &b) click to toggle source
# File lib/facets/supplemental/facets/multiton.rb, line 230
def initialized?(*e, &b)
  multiton_instance.key?(multiton_id(*e, &b))
end
instance(*e, &b) click to toggle source
# File lib/facets/supplemental/facets/multiton.rb, line 215
def instance(*e, &b)
  arg = multiton_id(*e, &b)
  multiton_instance.fetch(arg) do
    multiton_mutex[arg].synchronize do
      multiton_instance.fetch(arg) do
        val = multiton_instance[arg] = new!(*e, &b) #new(*e, &b)
        val.instance_variable_set(:@multiton_initializer, e, &b)
        multiton_mutex.initialized(arg)
        val
      end
    end
  end
end
Also aliased as: new
new(*e, &b) click to toggle source
Alias for: instance

Protected Instance Methods

_load(str) click to toggle source
# File lib/facets/supplemental/facets/multiton.rb, line 249
def _load(str)
  instance(*Marshal.load(str))
end
multiton_instance() click to toggle source
# File lib/facets/supplemental/facets/multiton.rb, line 236
def multiton_instance
  @multiton_instance ||= Hash.new
end
multiton_mutex() click to toggle source
# File lib/facets/supplemental/facets/multiton.rb, line 240
def multiton_mutex
  @multiton_mutex ||= InstanceMutex.new
end
reinitialize() click to toggle source
# File lib/facets/supplemental/facets/multiton.rb, line 244
def reinitialize
  multiton_instance.clear
  multiton_mutex.clear
end

Private Instance Methods

multiton_id(*e, &b) click to toggle source

Default method to to create a key to cache already constructed instances. In the use case MultitonClass.new(e), MultiClass.new(f) must be semantically equal if multiton_id(e).eql?(multiton_id(f)) evaluates to true.

# File lib/facets/supplemental/facets/multiton.rb, line 259
def multiton_id(*e, &b)
  e
end
singleton_method_added(sym) click to toggle source
# File lib/facets/supplemental/facets/multiton.rb, line 263
def singleton_method_added(sym)
  super
  if (sym == :marshal_dump) & singleton_methods.include?('marshal_dump')
    raise TypeError, "Don't use marshal_dump - rely on _dump and _load instead"
  end
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.