diff options
author | Hiroshi SHIBATA <[email protected]> | 2023-06-05 10:09:52 +0900 |
---|---|---|
committer | git <[email protected]> | 2023-06-05 01:10:26 +0000 |
commit | 3a4302c742622dda9fbaeeb90fd42364badc423d () | |
tree | 88df20abfbb3e439950d2d166d0546ace6a30203 | |
parent | 068672cfe82eb283a1bdbce1d870afa3e9ff1053 (diff) |
[ruby/singleton] Revert "Simplify the implementation
(https://.com/ruby/singleton/pull/7)" This reverts commit https://.com/ruby/singleton/commit/545b6b61a40d. This change break Rails CI: https://bugs.ruby-lang.org/issues/19711 https://.com/ruby/singleton/commit/911531d508
-rw-r--r-- | lib/singleton.rb | 26 | ||||
-rw-r--r-- | test/test_singleton.rb | 11 |
2 files changed, 17 insertions, 20 deletions
@@ -112,7 +112,7 @@ module Singleton module SingletonClassMethods # :nodoc: def clone # :nodoc: - super.include(Singleton) 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 } end private def inherited(sub_klass) super - sub_klass.include(Singleton) end end class << Singleton # :nodoc: 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 - } end end @@ -94,13 +94,6 @@ class TestSingleton < Test::Unit::TestCase assert_same a, b end - def test_inheritance_creates_separate_singleton - a = SingletonTest.instance - b = Class.new(SingletonTest).instance - - assert_not_same a, b - end - def test_class_level_cloning_preserves_singleton_behavior klass = SingletonTest.clone @@ -108,8 +101,4 @@ class TestSingleton < Test::Unit::TestCase b = klass.instance assert_same a, b end - - def test_class_level_cloning_creates_separate_singleton - assert_not_same SingletonTest.instance, SingletonTest.clone.instance - end end |