diff options
Diffstat (limited to 'lib/singleton.rb')
| -rw-r--r-- | lib/singleton.rb | 37 |
1 files changed, 21 insertions, 16 deletions
diff --git a/lib/singleton.rb b/lib/singleton.rb index be1f7ff6ca..07420d2ea2 100644 --- a/lib/singleton.rb +++ b/lib/singleton.rb @@ -1,4 +1,4 @@ -require 'thread' +# frozen_string_literal: false # The Singleton module implements the Singleton pattern. # @@ -13,7 +13,7 @@ require 'thread' # # This ensures that only one instance of Klass can be created. # -# a,b = Klass.instance, Klass.instance +# a,b = Klass.instance, Klass.instance # # a == b # # => true @@ -58,10 +58,9 @@ require 'thread' # == Singleton and Marshal # # By default Singleton's #_dump(depth) returns the empty string. Marshalling by -# default will strip state information, e.g. instance variables and taint -# state, from the instance. Classes using Singleton can provide custom -# _load(str) and _dump(depth) methods to retain some of the previous state of -# the instance. +# default will strip state information, e.g. instance variables from the instance. +# Classes using Singleton can provide custom _load(str) and _dump(depth) methods +# to retain some of the previous state of the instance. # # require 'singleton' # @@ -82,7 +81,6 @@ require 'thread' # a = Example.instance # a.keep = "keep this" # a.strip = "get rid of this" -# a.taint # # stored_state = Marshal.dump(a) # @@ -94,6 +92,8 @@ require 'thread' # p a.strip # => nil # module Singleton + VERSION = "0.1.1" + # Raises a TypeError to prevent cloning. def clone raise TypeError, "can't clone instance of singleton #{self.class}" @@ -120,6 +120,15 @@ module Singleton instance end + def instance # :nodoc: + return @singleton__instance__ if @singleton__instance__ + @singleton__mutex__.synchronize { + return @singleton__instance__ if @singleton__instance__ + @singleton__instance__ = new() + } + @singleton__instance__ + end + private def inherited(sub_klass) @@ -132,16 +141,8 @@ module Singleton def __init__(klass) # :nodoc: klass.instance_eval { @singleton__instance__ = nil - @singleton__mutex__ = Mutex.new + @singleton__mutex__ = Thread::Mutex.new } - def klass.instance # :nodoc: - return @singleton__instance__ if @singleton__instance__ - @singleton__mutex__.synchronize { - return @singleton__instance__ if @singleton__instance__ - @singleton__instance__ = new() - } - @singleton__instance__ - end klass end @@ -169,4 +170,8 @@ module Singleton ## # :singleton-method: _load # By default calls instance(). Override to retain singleton state. + + ## + # :singleton-method: instance + # Returns the singleton instance. end |
