# frozen_string_literal: true
require 'rspec/core/rake_task'
module DNote
# = Developmer's Notes Rake Task
#
class RakeTask < Rake::TaskLib
require 'rake/clean'
# Default note labels to looked for in source code.
DEFAULT_LABELS = %w(TODO FIXME OPTIMIZE DEPRECATE).freeze
# File paths to search.
attr_accessor :files
# Labels to document. Defaults are: TODO, FIXME, OPTIMIZE and DEPRECATE.
attr_accessor :labels
# Formats (xml, html, rdoc, rdoc/list and so on).
attr_accessor :formats
# Exclude paths.
attr_accessor :exclude
# Ignore paths based on any part of pathname.
attr_accessor :ignore
# Output directory to save notes file. Defaults to dnote/ under
# the project log directory (eg. log/dnote/).
attr_reader :output
# Title to use if temaplte can use it.
attr_accessor :title
def output=(path)
@output = Pathname.new(path)
end
def init
require 'dnote'
require 'dnote/format'
@files = '**/*.rb'
@output = 'log/dnote'
@formats = ['index']
@labels = nil
end
def define
desc "Collect Developer's Notes"
task 'dnote' do
document
end
task 'dnote:clobber' do
clean
end
task clobber: ['dnote:clobber']
end
# Generate notes document(s).
def document
abort "dnote: #{output} is not a directory" unless output.directory?
session = ::DNote::Session.new do |s|
s.paths = files
s.exclude = exclude
s.ignore = ignore
s.labels = labels
s.title = title
s.output = output
s.dryrun = application.options.dryrun # trial?
end
formats.each do |format|
if format == 'index'
session.format = 'html'
session.output = File.join(output, 'index.html')
else
session.format = format
end
session.run
report "Updated #{output.to_s.sub(Dir.pwd + '/', '')}" unless trial?
end
end
# Remove output files.
def clean
formats.each do |format|
if format == 'index'
file = (output + 'index.html').to_s
else
ext = ::DNote::Format::EXTENSIONS[format] || format
file = (output + "notes.#{ext}").to_s
end
rm(file)
report "Removed #{output}"
end
end
end
end