Project

General

Profile

Actions

Bug #499

closed

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

Added by okkez (okkez _) over 14 years ago. Updated over 11 years ago.

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

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

=end

Actions #1

Updated by okkez (okkez _) over 14 years ago

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

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

という風になっているので私の間違いですね。

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

ただ、ソースコードにコメントは必要無いでしょうか?

私のような粗忽ものが読み間違えないために。。。

学べば学ぶほど知らないことが出てくるなぁ。

よろしくお願いします。

=end

Actions #2

Updated by ko1 (Koichi Sasada) over 14 years ago

  • Status changed from Open to Rejected

=begin

=end

Actions

Also available in: Atom PDF

Like0
Like0Like0