Module: Rake::TaskManager
- Included in:
- Application
- Defined in:
- lib/rake.rb
Overview
The TaskManager module is a mixin for managing tasks.
Instance Attribute Summary collapse
-
#last_description ⇒ Object
(also: #last_comment)
Track the last comment made in the Rakefile.
Instance Method Summary collapse
-
#[](task_name, scopes = nil) ⇒ Object
Find a matching task for
task_name. -
#clear ⇒ Object
Clear all tasks in this application.
- #create_rule(*args, &block) ⇒ Object
-
#current_scope ⇒ Object
Return the list of scope names currently active in the task manager.
- #define_task(task_class, *args, &block) ⇒ Object
-
#enhance_with_matching_rule(task_name, level = 0) ⇒ Object
If a rule can be found that matches the task name, enhance the task with the prerequisites and actions from the rule.
-
#in_namespace(name) ⇒ Object
Evaluate the block in a nested namespace named
name. - #initialize ⇒ Object
-
#intern(task_class, task_name) ⇒ Object
Lookup a task.
-
#lookup(task_name, initial_scope = nil) ⇒ Object
Lookup a task, using scope and the scope hints in the task name.
-
#resolve_args(args) ⇒ Object
Resolve the arguments for a task/rule.
- #synthesize_file_task(task_name) ⇒ Object
-
#tasks ⇒ Object
List of all defined tasks in this application.
-
#tasks_in_scope(scope) ⇒ Object
List of all the tasks defined in the given scope (and its sub-scopes).
Instance Attribute Details
#last_description ⇒ Object Also known as: last_comment
Track the last comment made in the Rakefile.
1682 1683 1684 |
# File 'lib/rake.rb', line 1682 def last_description @last_description end |
Instance Method Details
#[](task_name, scopes = nil) ⇒ Object
Find a matching task for task_name.
1719 1720 1721 1722 1723 1724 1725 |
# File 'lib/rake.rb', line 1719 def [](task_name, scopes=nil) task_name = task_name.to_s self.lookup(task_name, scopes) or enhance_with_matching_rule(task_name) or synthesize_file_task(task_name) or fail "Don't know how to build task '#{task_name}'" end |
#clear ⇒ Object
Clear all tasks in this application.
1828 1829 1830 1831 |
# File 'lib/rake.rb', line 1828 def clear @tasks.clear @rules.clear end |
#create_rule(*args, &block) ⇒ Object
1693 1694 1695 1696 1697 |
# File 'lib/rake.rb', line 1693 def create_rule(*args, &block) pattern, arg_names, deps = resolve_args(args) pattern = Regexp.new(Regexp.quote(pattern) + '$') if String === pattern @rules << [pattern, deps, block] end |
#current_scope ⇒ Object
Return the list of scope names currently active in the task manager.
1868 1869 1870 |
# File 'lib/rake.rb', line 1868 def current_scope @scope.dup end |
#define_task(task_class, *args, &block) ⇒ Object
1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 |
# File 'lib/rake.rb', line 1699 def define_task(task_class, *args, &block) task_name, arg_names, deps = resolve_args(args) task_name = task_class.scope_name(@scope, task_name) deps = [deps] unless deps.respond_to?(:to_ary) deps = deps.collect {|d| d.to_s } task = intern(task_class, task_name) task.set_arg_names(arg_names) unless arg_names.empty? task.add_description(@last_description) @last_description = nil task.enhance(deps, &block) task end |
#enhance_with_matching_rule(task_name, level = 0) ⇒ Object
If a rule can be found that matches the task name, enhance the task with the prerequisites and actions from the rule. Set the source attribute of the task appropriately for the rule. Return the enhanced task or nil of no rule was found.
1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 |
# File 'lib/rake.rb', line 1798 def enhance_with_matching_rule(task_name, level=0) fail Rake::RuleRecursionOverflowError, "Rule Recursion Too Deep" if level >= 16 @rules.each do |pattern, extensions, block| if md = pattern.match(task_name) task = attempt_rule(task_name, extensions, block, level) return task if task end end nil rescue Rake::RuleRecursionOverflowError => ex ex.add_target(task_name) fail ex end |
#in_namespace(name) ⇒ Object
Evaluate the block in a nested namespace named name. Create an anonymous namespace if name is nil.
1874 1875 1876 1877 1878 1879 1880 1881 1882 |
# File 'lib/rake.rb', line 1874 def in_namespace(name) name ||= generate_name @scope.push(name) ns = NameSpace.new(self, @scope) yield(ns) ns ensure @scope.pop end |
#initialize ⇒ Object
1685 1686 1687 1688 1689 1690 1691 |
# File 'lib/rake.rb', line 1685 def initialize super @tasks = Hash.new @rules = Array.new @scope = Array.new @last_description = nil end |
#intern(task_class, task_name) ⇒ Object
Lookup a task. Return an existing task if found, otherwise create a task of the current type.
1714 1715 1716 |
# File 'lib/rake.rb', line 1714 def intern(task_class, task_name) @tasks[task_name.to_s] ||= task_class.new(task_name, self) end |
#lookup(task_name, initial_scope = nil) ⇒ Object
Lookup a task, using scope and the scope hints in the task name. This method performs straight lookups without trying to synthesize file tasks or rules. Special scope names (e.g. ‘^’) are recognized. If no scope argument is supplied, use the current scope. Return nil if the task cannot be found.
1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 |
# File 'lib/rake.rb', line 1838 def lookup(task_name, initial_scope=nil) initial_scope ||= @scope task_name = task_name.to_s if task_name =~ /^rake:/ scopes = [] task_name = task_name.sub(/^rake:/, '') elsif task_name =~ /^(\^+)/ scopes = initial_scope[0, initial_scope.size - $1.size] task_name = task_name.sub(/^(\^+)/, '') else scopes = initial_scope end lookup_in_scope(task_name, scopes) end |
#resolve_args(args) ⇒ Object
Resolve the arguments for a task/rule. Returns a triplet of [task_name, arg_name_list, prerequisites].
1734 1735 1736 1737 1738 1739 1740 1741 |
# File 'lib/rake.rb', line 1734 def resolve_args(args) if args.last.is_a?(Hash) deps = args.pop resolve_args_with_dependencies(args, deps) else resolve_args_without_dependencies(args) end end |
#synthesize_file_task(task_name) ⇒ Object
1727 1728 1729 1730 |
# File 'lib/rake.rb', line 1727 def synthesize_file_task(task_name) return nil unless File.exist?(task_name) define_task(Rake::FileTask, task_name) end |
#tasks ⇒ Object
List of all defined tasks in this application.
1814 1815 1816 |
# File 'lib/rake.rb', line 1814 def tasks @tasks.values.sort_by { |t| t.name } end |
#tasks_in_scope(scope) ⇒ Object
List of all the tasks defined in the given scope (and its sub-scopes).
1820 1821 1822 1823 1824 1825 |
# File 'lib/rake.rb', line 1820 def tasks_in_scope(scope) prefix = scope.join(":") tasks.select { |t| /^#{prefix}:/ =~ t.name } end |