[ruby/rdoc] Add attribute :force to RDoc::RubygemsHook just like

RDoc::RubyGemsHook
(https://github.com/ruby/rdoc/pull/1244)

Rubygems creates an instance of RDoc::RubygemsHook, sets `doc.force = overwrite`, then calls `doc.generate` the document.
RDoc::RubygemsHook needs attribute `:force` just like RDoc::RubyGemsHook.

https://github.com/ruby/rdoc/commit/01bdbcdd4d
This commit is contained in:
tomoya ishida 2024-12-16 20:32:39 +09:00 committed by git
parent a3991599fa
commit 784bd9c42e
2 changed files with 24 additions and 2 deletions

View File

@ -271,7 +271,7 @@ end
module RDoc module RDoc
class RubygemsHook class RubygemsHook
attr_accessor :generate_rdoc, :generate_ri attr_accessor :generate_rdoc, :generate_ri, :force
def self.default_gem? def self.default_gem?
!File.exist?(File.join(__dir__, "..", "rubygems_plugin.rb")) !File.exist?(File.join(__dir__, "..", "rubygems_plugin.rb"))
@ -281,6 +281,7 @@ module RDoc
@spec = spec @spec = spec
@generate_rdoc = generate_rdoc @generate_rdoc = generate_rdoc
@generate_ri = generate_ri @generate_ri = generate_ri
@force = false
end end
def generate def generate
@ -288,7 +289,9 @@ module RDoc
return unless self.class.default_gem? return unless self.class.default_gem?
# Generate document for compatibility if this is a default gem. # Generate document for compatibility if this is a default gem.
RubyGemsHook.new(@spec, @generate_rdoc, @generate_ri).generate hook = RubyGemsHook.new(@spec, @generate_rdoc, @generate_ri)
hook.force = @force
hook.generate
end end
def remove def remove

View File

@ -200,6 +200,25 @@ class TestRDocRubyGemsHook < Test::Unit::TestCase
assert_path_exist File.join(@a.doc_dir('ri'), 'cache.ri') assert_path_exist File.join(@a.doc_dir('ri'), 'cache.ri')
end end
def test_generate_rubygems_compatible
original_default_gem_method = RDoc::RubygemsHook.method(:default_gem?)
RDoc::RubygemsHook.singleton_class.remove_method(:default_gem?)
RDoc::RubygemsHook.define_singleton_method(:default_gem?) { true }
FileUtils.mkdir_p @a.doc_dir 'ri'
FileUtils.mkdir_p @a.doc_dir 'rdoc'
FileUtils.mkdir_p File.join(@a.gem_dir, 'lib')
# rubygems/lib/rubygems/commands/rdoc_command.rb calls this
hook = RDoc::RubygemsHook.new @a, true, true
hook.force = true
hook.generate
assert_path_exist File.join(@a.doc_dir('rdoc'), 'index.html')
ensure
RDoc::RubygemsHook.singleton_class.remove_method(:default_gem?)
RDoc::RubygemsHook.define_singleton_method(:default_gem?, &original_default_gem_method)
end
def test_generate_no_overwrite def test_generate_no_overwrite
FileUtils.mkdir_p @a.doc_dir 'ri' FileUtils.mkdir_p @a.doc_dir 'ri'
FileUtils.mkdir_p @a.doc_dir 'rdoc' FileUtils.mkdir_p @a.doc_dir 'rdoc'