From 3a4302c742622dda9fbaeeb90fd42364badc423d Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Mon, 5 Jun 2023 10:09:52 +0900 Subject: [ruby/singleton] Revert "Simplify the implementation (https://github.com/ruby/singleton/pull/7)" This reverts commit https://github.com/ruby/singleton/commit/545b6b61a40d. This change break Rails CI: https://bugs.ruby-lang.org/issues/19711 https://github.com/ruby/singleton/commit/911531d508 --- lib/singleton.rb | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) (limited to 'lib/singleton.rb') diff --git a/lib/singleton.rb b/lib/singleton.rb index 757b77eba3..07420d2ea2 100644 --- a/lib/singleton.rb +++ b/lib/singleton.rb @@ -112,7 +112,7 @@ module Singleton module SingletonClassMethods # :nodoc: def clone # :nodoc: - super.include(Singleton) + Singleton.__init__(super) end # By default calls instance(). Override to retain singleton state. @@ -121,18 +121,31 @@ module Singleton end def instance # :nodoc: - @singleton__instance__ || @singleton__mutex__.synchronize { @singleton__instance__ ||= new } + 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) super - sub_klass.include(Singleton) + Singleton.__init__(sub_klass) end end class << Singleton # :nodoc: + def __init__(klass) # :nodoc: + klass.instance_eval { + @singleton__instance__ = nil + @singleton__mutex__ = Thread::Mutex.new + } + klass + end + private # extending an object with Singleton is a bad idea @@ -143,19 +156,14 @@ module Singleton unless mod.instance_of?(Class) raise TypeError, "Inclusion of the OO-Singleton module in module #{mod}" end - super end def included(klass) super - klass.private_class_method :new, :allocate klass.extend SingletonClassMethods - klass.instance_eval { - @singleton__instance__ = nil - @singleton__mutex__ = Thread::Mutex.new - } + Singleton.__init__(klass) end end -- cgit v1.2.3