Class: Rocco::Task
Overview
Rocco::Task.new takes a task name, the destination directory docs
should be built under, and a source file pattern or file list.
Instance Method Summary collapse
-
#define_directory_task(path) ⇒ Object
Define the destination directory task and make the
:roccotask depend on it. -
#define_file_task(source_file, dest_file) ⇒ Object
Setup a
filetask for a single Rocco output file (dest_file). -
#initialize(task_name, dest = 'docs/', sources = 'lib/**/*.rb', options = {}) ⇒ Task
constructor
A new instance of Task.
-
#rocco_source_files ⇒ Object
Return a
FileListthat includes all of Roccos source files.
Constructor Details
#initialize(task_name, dest = 'docs/', sources = 'lib/**/*.rb', options = {}) ⇒ Task
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/rocco/tasks.rb', line 63 def initialize(task_name, dest='docs/', sources='lib/**/*.rb', ={}) @name = task_name @dest = dest[-1] == ?/ ? dest : "#{dest}/" @sources = FileList[sources] = # Make sure there's a `directory` task defined for our destination. define_directory_task @dest # Run over the source file list, constructing destination filenames # and defining file tasks. @sources.each do |source_file| dest_file = source_file.sub(Regexp.new("#{File.extname(source_file)}$"), ".html") define_file_task source_file, "#{@dest}#{dest_file}" # If `rake/clean` was required, add the generated files to the list. # That way all Rocco generated are removed when running `rake clean`. CLEAN.include "#{@dest}#{dest_file}" if defined? CLEAN end end |
Instance Method Details
#define_directory_task(path) ⇒ Object
Define the destination directory task and make the :rocco task depend
on it. This causes the destination directory to be created if it doesn't
already exist.
87 88 89 90 |
# File 'lib/rocco/tasks.rb', line 87 def define_directory_task(path) directory path task @name => path end |
#define_file_task(source_file, dest_file) ⇒ Object
Setup a file task for a single Rocco output file (dest_file). It
depends on the source file, the destination directory, and all of Rocco's
internal source code, so that the destination file is rebuilt when any of
those changes.
You can run these tasks directly with Rake:
rake docs/foo.html docs/.html
... would generate the foo.html and bar.html files but only if they
don't already exist or one of their dependencies was changed.
103 104 105 106 107 108 109 110 111 112 |
# File 'lib/rocco/tasks.rb', line 103 def define_file_task(source_file, dest_file) prerequisites = [@dest, source_file] + rocco_source_files file dest_file => prerequisites do |f| verbose { puts "rocco: #{source_file} -> #{dest_file}" } rocco = Rocco.new(source_file, @sources.to_a, ) FileUtils.mkdir_p(File.dirname(dest_file)) File.open(dest_file, 'wb') { |fd| fd.write(rocco.to_html) } end task @name => dest_file end |
#rocco_source_files ⇒ Object
Return a FileList that includes all of Roccos source files. This causes
output files to be regenerated properly when someone upgrades the Rocco
library.
117 118 119 120 |
# File 'lib/rocco/tasks.rb', line 117 def rocco_source_files libdir = File.('../..', __FILE__) FileList["#{libdir}/rocco.rb", "#{libdir}/rocco/**"] end |