如何将 ruby 代码文件按原样包含到 RDoc 中?
我有一个 example.rb 文件,它记录了如何使用我的 gem,我想将它作为 README.rdoc 和 HISTORY.rdoc 之类的文件之一包含在内。
我已经想出了如何使用语法 gem将 ruby 源代码转换为 HTML,但我不知道如何在不解析文件的情况下让 RDoc 包含该文件。
当我告诉 RDoc 包含 html 文件时,它没有被列出,如果我通过使用 rdoc 或 txt 作为文件扩展名来伪造它,它不会正确显示(文件实际上仍然是 html)。
我有一个可行的解决方案,它非常丑陋。必须有一种更好的方法来做到这一点,它是 rdoc 原生的,但我没有看到。
这是我的 Rakefile 中的内容:
# Build rdocs
require 'rake/rdoctask'
require 'syntax/convertors/html'
rdoc_dir = 'rdoc'
# This is rdoc1 but it doesn't work unless you DON'T wrap it in a task
# Generate html files from example ruby files
convertor = Syntax::Convertors::HTML.for_syntax "ruby"
replacement_key = "REPLACE_THIS_TEXT_WITH_PROPER_HTML"
# Create dummy files
Dir.glob('examples/*.rb').each do |file|
File.open("#{file}.txt", "w") do |dummy_file|
dummy_file.write(replacement_key)
end
end
# Call the rdoc task
Rake::RDocTask.new(:rdoc2) do |rdoc|
rdoc.rdoc_dir = rdoc_dir
rdoc.title = "pickled_optparse #{version}"
rdoc.rdoc_files.include('README*')
rdoc.rdoc_files.include('HISTORY*')
rdoc.rdoc_files.include('examples/*.txt')
rdoc.rdoc_files.include('lib/**/*.rb')
end
task :rdoc3 do
# Now use a hammer to replace the dummy text with the
# html we want to use in our ruby example code file.
html_header = File.read('rake_reqs/html_header.html')
Dir.glob('examples/*.rb').each do |file|
html_ruby = convertor.convert(File.read(file))
rdoc_file = "#{rdoc_dir}/examples/#{File.basename(file,".rb")}_rb_txt.html"
fixed_html = File.read(rdoc_file).gsub!(replacement_key, "#{html_header}#{html_ruby}")
File.open(rdoc_file, "w") {|f| f.write(fixed_html)}
File.delete("#{file}.txt")
end
end
task :rdoc => [:rdoc2, :rdoc3]