Module Multiton::MetaMethods
In: lib/more/facets/multiton.rb

Methods

Included Modules

Inclusive

Public Instance methods

[Source]

     # File lib/more/facets/multiton.rb, line 230
230:     def initialized?(*e, &b)
231:       multiton_instance.key?(multiton_id(*e, &b))
232:     end

[Source]

     # File lib/more/facets/multiton.rb, line 215
215:     def instance(*e, &b)
216:       arg = multiton_id(*e, &b)
217:       multiton_instance.fetch(arg) do
218:         multiton_mutex[arg].synchronize do
219:           multiton_instance.fetch(arg) do
220:             val = multiton_instance[arg] = new!(*e, &b) #new(*e, &b)
221:             val.instance_variable_set(:@multiton_initializer, e, &b)
222:             multiton_mutex.initialized(arg)
223:             val
224:           end
225:         end
226:       end
227:     end
new(*e, &b)

Alias for instance

Protected Instance methods

[Source]

     # File lib/more/facets/multiton.rb, line 249
249:     def _load(str)
250:       instance(*Marshal.load(str))
251:     end

[Source]

     # File lib/more/facets/multiton.rb, line 236
236:     def multiton_instance
237:       @multiton_instance ||= Hash.new
238:     end

[Source]

     # File lib/more/facets/multiton.rb, line 240
240:     def multiton_mutex
241:       @multiton_mutex ||= InstanceMutex.new
242:     end

[Source]

     # File lib/more/facets/multiton.rb, line 244
244:     def reinitialize
245:       multiton_instance.clear
246:       multiton_mutex.clear
247:     end

Private Instance methods

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.

[Source]

     # File lib/more/facets/multiton.rb, line 259
259:     def multiton_id(*e, &b)
260:       e
261:     end

[Source]

     # File lib/more/facets/multiton.rb, line 263
263:     def singleton_method_added(sym)
264:       super
265:       if (sym == :marshal_dump) & singleton_methods.include?('marshal_dump')
266:         raise TypeError, "Don't use marshal_dump - rely on _dump and _load instead"
267:       end
268:     end

[Validate]