PDOC-77: Add a new rake task which can be configured
This commit is contained in:
parent
2fa33621d5
commit
9f349dca9e
|
@ -0,0 +1,88 @@
|
|||
require 'rake'
|
||||
require 'rake/tasklib'
|
||||
require 'puppet_x/puppetlabs/strings/util'
|
||||
|
||||
module PuppetStrings
|
||||
module RakeTasks
|
||||
# A configurable rake task to generate documentation using puppet-strings.
|
||||
#
|
||||
# @attr [String] name the name of the rake task.
|
||||
# @attr [Array<String>] module_resourcefiles globs used to specify which files to document.
|
||||
# Defaults to {PuppetX::PuppetLabs::Strings::Util::MODULE_SOURCEFILES}
|
||||
# @attr [Array<String>] excludes a list of paths or patterns of files and directories to ignore.
|
||||
# @attr [Array<String>, nil] paths list of paths to generate documentation for.
|
||||
# If this value is nil, uses the default paths for puppet strings.
|
||||
# @attr [Hash] options a hash with options passed through to yardoc.
|
||||
class Generate < ::Rake::TaskLib
|
||||
attr_accessor :name
|
||||
attr_accessor :module_resourcefiles
|
||||
attr_accessor :paths
|
||||
attr_accessor :excludes
|
||||
attr_accessor :options
|
||||
|
||||
# Creates a new instance of the Generate Rake task.
|
||||
# Defaults the name to 'strings:generate which overrides
|
||||
# the namespaced generates task. Also default other attributes to
|
||||
# mimic the current default behaviour.
|
||||
def initialize(*args, &task_block)
|
||||
@name = args.shift || 'strings:generate'
|
||||
@module_sourcefiles = PuppetX::PuppetLabs::Strings::Util::MODULE_SOURCEFILES
|
||||
@paths = nil
|
||||
@options = {emit_json: 'strings.json'}
|
||||
@excludes = []
|
||||
define(args, &task_block)
|
||||
end
|
||||
|
||||
# Creates the actual rake task after calling the task_block.
|
||||
#
|
||||
# @param [Array<String>] args arguments passed to the rake task.
|
||||
# @param [Proc] task_block block to configure the task.
|
||||
# @yield [self, args] configure this rake task.
|
||||
def define(args, &task_block)
|
||||
Rake::Task[@name].clear if Rake::Task.task_defined?(@name)
|
||||
yield(*[self, args].slice(0, task_block.arity)) if task_block
|
||||
|
||||
|
||||
desc 'Generate Puppet documentation with YARD.' unless ::Rake.application.last_description
|
||||
task @name do
|
||||
execute_task(generate_task_args)
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
# Converts all attributes and options to an arguments array that can be passed
|
||||
# through to {PuppetX::PuppetLabs::Strings::Util #generate}.
|
||||
#
|
||||
# If paths is not nil, we expand them with the module_sourcefiles patterns.
|
||||
def generate_task_args
|
||||
@paths = [*@paths] unless @paths.nil?
|
||||
@module_sourcefiles = [*@module_sourcefiles]
|
||||
@excludes = [*@excludes]
|
||||
|
||||
exclude_args = @excludes.map {|x| ["--exclude", x]}.flatten
|
||||
pattern_args = @paths.nil? ? [] : expand_paths(@paths, @module_sourcefiles)
|
||||
|
||||
exclude_args + pattern_args + [@options]
|
||||
end
|
||||
|
||||
# Combine each prefix_path with each pattern with '/**/' glue.
|
||||
#
|
||||
# @example
|
||||
# expand_paths(['a','b'], ['*.rb','*.pp'])
|
||||
# => ["a/**/*.rb", "a/**/*.pp", "b/**/*.rb", "b/**/*.pp"]
|
||||
#
|
||||
# @param [Array<String>] prefix_paths an array with paths
|
||||
# @param [Array<String>] patterns an array with patterns.
|
||||
def expand_paths(prefix_paths, patterns)
|
||||
prefix_paths.map {|path| patterns.map {|p| "#{path}/**/#{p}" } }.flatten
|
||||
end
|
||||
|
||||
# call {PuppetX::PuppetLabs::Strings::Util #generate}
|
||||
# @param [Array<String, Hash>] args Arguments. Last element should be a Hash.
|
||||
def execute_task(args)
|
||||
PuppetX::PuppetLabs::Strings::Util.generate(args)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue