summaryrefslogtreecommitdiff
path: root/lib/singleton.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/singleton.rb')
-rw-r--r--lib/singleton.rb37
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