Skip to content

Commit 55e2933

Browse files
committed
Refactor RDoc::Task so RDoc::TagsTask can reuse it better
1 parent 2d8a466 commit 55e2933

File tree

3 files changed

+83
-25
lines changed

3 files changed

+83
-25
lines changed

History.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
* Minor enhancements
44
* RDoc generator authors may now suppress updating the output dir (creating
55
a created.rid file) by setting RDoc::Options#update_output_dir to false.
6+
* RDoc::Task has been refactored to ease creating subclasses.
67
* Bug fixes
78
* RDoc's gitignore now ignores .DS_Store files. Pull Request #3 by Shane
89
Becker.

lib/rdoc/task.rb

Lines changed: 57 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -149,32 +149,58 @@ class RDoc::Task < Rake::TaskLib
149149
# Create an RDoc task with the given name. See the RDoc::Task class overview
150150
# for documentation.
151151

152-
def initialize(name = :rdoc) # :yield: self
153-
if name.is_a? Hash then
154-
invalid_options = name.keys.map { |k| k.to_sym } -
155-
[:rdoc, :clobber_rdoc, :rerdoc]
156-
157-
unless invalid_options.empty? then
158-
raise ArgumentError, "invalid options: #{invalid_options.join(", ")}"
159-
end
160-
end
152+
def initialize name = :rdoc # :yield: self
153+
defaults
154+
155+
check_names name
161156

162157
@name = name
158+
159+
yield self if block_given?
160+
161+
define
162+
end
163+
164+
##
165+
# Ensures that +names+ only includes names for the :rdoc, :clobber_rdoc and
166+
# :rerdoc. If other names are given an ArgumentError is raised.
167+
168+
def check_names names
169+
return unless Hash === names
170+
171+
invalid_options =
172+
names.keys.map { |k| k.to_sym } - [:rdoc, :clobber_rdoc, :rerdoc]
173+
174+
unless invalid_options.empty? then
175+
raise ArgumentError, "invalid options: #{invalid_options.join ', '}"
176+
end
177+
end
178+
179+
##
180+
# Task description for the clobber rdoc task or its renamed equivalent
181+
182+
def clobber_task_description
183+
"Remove RDoc HTML files"
184+
end
185+
186+
##
187+
# Sets default task values
188+
189+
def defaults
190+
@name = :rdoc
163191
@rdoc_files = Rake::FileList.new
164192
@rdoc_dir = 'html'
165193
@main = nil
166194
@title = nil
167195
@template = nil
168196
@generator = nil
169197
@options = []
170-
yield self if block_given?
171-
define
172198
end
173199

174200
##
175201
# All source is inline now. This method is deprecated
176202

177-
def inline_source() # :nodoc:
203+
def inline_source # :nodoc:
178204
warn "RDoc::Task#inline_source is deprecated"
179205
true
180206
end
@@ -190,13 +216,13 @@ def inline_source=(value) # :nodoc:
190216
# Create the tasks defined by this task lib.
191217

192218
def define
193-
desc "Build RDoc HTML files"
219+
desc rdoc_task_description
194220
task rdoc_task_name
195221

196-
desc "Rebuild RDoc HTML files"
222+
desc rerdoc_task_description
197223
task rerdoc_task_name => [clobber_task_name, rdoc_task_name]
198224

199-
desc "Remove RDoc HTML files"
225+
desc clobber_task_description
200226
task clobber_task_name do
201227
rm_r @rdoc_dir rescue nil
202228
end
@@ -215,11 +241,9 @@ def define
215241
@before_running_rdoc.call if @before_running_rdoc
216242
args = option_list + @rdoc_files
217243

218-
if Rake.application.options.trace then
219-
$stderr.puts "rdoc #{args.join ' '}"
220-
end
244+
$stderr.puts "rdoc #{args.join ' '}" if Rake.application.options.trace
221245
require 'rdoc/rdoc'
222-
RDoc::RDoc.new.document(args)
246+
RDoc::RDoc.new.document args
223247
end
224248

225249
self
@@ -247,6 +271,20 @@ def before_running_rdoc(&block)
247271
@before_running_rdoc = block
248272
end
249273

274+
##
275+
# Task description for the rdoc task or its renamed equivalent
276+
277+
def rdoc_task_description
278+
'Build RDoc HTML files'
279+
end
280+
281+
##
282+
# Task description for the rerdoc task or its renamed description
283+
284+
def rerdoc_task_description
285+
"Rebuild RDoc HTML files"
286+
end
287+
250288
private
251289

252290
def rdoc_target

test/test_rdoc_task.rb

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,25 +6,29 @@ class TestRDocTask < MiniTest::Unit::TestCase
66

77
def setup
88
Rake::Task.clear
9+
10+
@t = RDoc::Task.new
911
end
1012

11-
def test_inline_source
12-
t = RDoc::Task.new
13+
def test_clobber_task_description
14+
assert_equal 'Remove RDoc HTML files', @t.clobber_task_description
15+
end
1316

17+
def test_inline_source
1418
_, err = capture_io do
15-
assert t.inline_source
19+
assert @t.inline_source
1620
end
1721

1822
assert_equal "RDoc::Task#inline_source is deprecated\n", err
1923

2024
_, err = capture_io do
21-
t.inline_source = false
25+
@t.inline_source = false
2226
end
2327

2428
assert_equal "RDoc::Task#inline_source is deprecated\n", err
2529

2630
capture_io do
27-
assert t.inline_source
31+
assert @t.inline_source
2832
end
2933
end
3034

@@ -51,6 +55,14 @@ def test_generator_option
5155
assert_equal %w[-o html -f ri], rdoc_task.option_list
5256
end
5357

58+
def test_rdoc_task_description
59+
assert_equal 'Build RDoc HTML files', @t.rdoc_task_description
60+
end
61+
62+
def test_rerdoc_task_description
63+
assert_equal 'Rebuild RDoc HTML files', @t.rerdoc_task_description
64+
end
65+
5466
def test_tasks_creation_with_custom_name_string
5567
rd = RDoc::Task.new("rdoc_dev")
5668
assert Rake::Task[:rdoc_dev]
@@ -60,7 +72,14 @@ def test_tasks_creation_with_custom_name_string
6072
end
6173

6274
def test_tasks_creation_with_custom_name_hash
63-
options = { :rdoc => "rdoc", :clobber_rdoc => "rdoc:clean", :rerdoc => "rdoc:force" }
75+
options = {
76+
:rdoc => "rdoc",
77+
:clobber_rdoc => "rdoc:clean",
78+
:rerdoc => "rdoc:force"
79+
}
80+
81+
Rake::Task.clear
82+
6483
rd = RDoc::Task.new(options)
6584
assert Rake::Task[:"rdoc"]
6685
assert Rake::Task[:"rdoc:clean"]

0 commit comments

Comments
 (0)