module Redwood::Singleton::ClassMethods

Public Instance Methods

deinstantiate!() click to toggle source
# File lib/sup/util.rb, line 639
def deinstantiate!; @instance = nil; end
init(*args) click to toggle source
# File lib/sup/util.rb, line 659
def init *args
  raise "there can be only one! (instance)" if instantiated?
  @instance = new(*args)
end
instance() click to toggle source
# File lib/sup/util.rb, line 637
def instance; @instance; end
instantiated?() click to toggle source
# File lib/sup/util.rb, line 638
def instantiated?; defined?(@instance) && !@instance.nil?; end
method_missing(meth, *a, &b) click to toggle source
# File lib/sup/util.rb, line 640
def method_missing meth, *a, &b
  raise "no #{name} instance defined in method call to #{meth}!" unless defined? @instance

  ## if we've been deinstantiated, just drop all calls. this is
  ## useful because threads that might be active during the
  ## cleanup process (e.g. polling) would otherwise have to
  ## special-case every call to a Singleton object
  return nil if @instance.nil?

  # Speed up further calls by defining a shortcut around method_missing
  if meth.to_s[-1,1] == '='
    # Argh! Inconsistency! Setters do not work like all the other methods.
    class_eval "def self.#{meth}(a); @instance.send :#{meth}, a; end"
  else
    class_eval "def self.#{meth}(*a, &b); @instance.send :#{meth}, *a, &b; end"
  end

  @instance.send meth, *a, &b
end