[ruby-dev:39838] [Bug #2439] gem_prelude.rbとlib/rubygems.rbでKernel#gemの可視性が異なる

From: Sho Hashimoto <redmine@...>
Date: 2009-12-04 15:19:48 UTC
List: ruby-dev #39838
Bug #2439: gem_prelude.rbとlib/rubygems.rbでKernel#gemの可視性が異なる
http://redmine.ruby-lang.org/issues/show/2439

起票者: Sho Hashimoto
ステータス: Open, 優先度: Normal
ruby -v: ruby 1.9.2dev (2009-12-04 trunk 25993) [i686-linux]

lib/rubygems.rbではKernel#gemがprivateになっていますが、gem_prelude.rbではそうではないため、以下のような事ができてしまいます。

$ irb
irb(main):001:0> 1.gem "minitest", "1.4.2"
=> true

irb(main):002:0> 1.gem "rake", "0.8.7"
NoMethodError: private method `gem' called for 1:Fixnum
	from (irb):2
	from /usr/local/bin/irb1.9.2-trunk:12:in `<main>'

irb(main):003:0> gem "rake", "0.8.7"
=> true

rubygemsに詳しくないので嬉しくない修正かもしれませんが、以下のようにすると1度目の1.gemから「NoMethodError: private method `gem' called ...」となりました。

--- gem_prelude.rb      (revision 25993)
+++ gem_prelude.rb      (working copy)
@@ -16,6 +16,8 @@
       Gem.push_gem_version_on_load_path(gem_name, *version_requirements)
     end
 
+    private :gem
+
   end
 
   module Gem


----------------------------------------
http://redmine.ruby-lang.org

In This Thread

Prev Next