Bug #499

RubyGems の CommandManager が singleton になっていない

Added by okkez _ almost 7 years ago. Updated about 4 years ago.

[ruby-dev:35979]
Status:Rejected
Priority:Normal
Assignee:-
ruby -v: Backport:

Description

=begin
okkez です。

lib/rubygems/command_manager.rb で定義されている
Gem::CommandManager クラスですが、ソースコードを読んでみた限りでは
singleton にしたかったのじゃないかと思うのですがいかがでしょうか?

元のコードだと Gem::CommandManager.instance で毎回新しいインスタンス
が生成されます。
修正にあわせてテストも修正してみました。

よろしくお願いします。

Index: lib/rubygems/command_manager.rb
===================================================================
--- lib/rubygems/command_manager.rb (revision 18866)
+++ lib/rubygems/command_manager.rb (working copy)
@@ -4,6 +4,7 @@
# See LICENSE.txt for permissions.
#++

+require 'singleton'
require 'timeout'
require 'rubygems/command'
require 'rubygems/user_interaction'
@@ -15,12 +16,8 @@
# sub-commands supported by the gem command.
class CommandManager
include UserInteraction
+ include Singleton

  • # Return the authoritative instance of the command manager.
  • def self.instance
  • @command_manager ||= CommandManager.new
  • end

    # Register all the subcommands supported by the gem command.
    def initialize
    @commands = {}

    Index: test/rubygems/test_gem_command_manager.rb

    --- test/rubygems/test_gem_command_manager.rb (revision 18866)
    +++ test/rubygems/test_gem_command_manager.rb (working copy)
    @@ -25,7 +25,7 @@
    def setup
    super

  • @command_manager = Gem::CommandManager.new

  • @command_manager = Gem::CommandManager.instance
    end

    def test_run_interrupt

    Index: test/rubygems/functional.rb

    --- test/rubygems/functional.rb (revision 18866)
    +++ test/rubygems/functional.rb (working copy)
    @@ -47,7 +47,7 @@
    end

    def test_all_command_helps

  • mgr = Gem::CommandManager.new

  • mgr = Gem::CommandManager.instance
    mgr.command_names.each do |cmdname|
    gem_nossl "help #{cmdname}"
    assert_match(/Usage: gem #{cmdname}/, @out,

--
okkez
okkez000@gmail.com
=end

History

#1 Updated by okkez _ almost 7 years ago

=begin
これなんですが、取り下げさせていただきます。

class A
def self.instance
@a ||= new # ここで @a は Class クラスのインスタンス A のインスタンス変数
end
end
A.instance # => #
A.instance # => #
A.instance_variables # => ["@a"]

という風になっているので私の間違いですね。
# 限りなく組み込みに近いライブラリ内で標準添付ライブラリを使用するというのも筋が悪すぎますしね。

ただ、ソースコードにコメントは必要無いでしょうか?
# 私のような粗忽ものが読み間違えないために。。。
## 学べば学ぶほど知らないことが出てくるなぁ。

よろしくお願いします。

=end

#2 Updated by Koichi Sasada almost 7 years ago

  • Status changed from Open to Rejected

=begin

=end

Also available in: Atom PDF