Module: SC::TaskManager
- Included in:
- Buildfile
- Defined in:
- lib/sproutcore/buildfile/task_manager.rb
Overview
Manages a set of tasks. Borrowed from Rake 0.8.3
Instance Attribute Summary collapse
-
#last_description ⇒ Object
(also: #last_comment)
Track the last comment made in the Rakefile.
-
#last_task_options ⇒ Object
Returns the value of attribute last_task_options.
-
#tasks ⇒ Object
readonly
List of all defined tasks in this application.
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
-
#in_namespace(name) ⇒ Object
Evaluate the block in a nested namespace named
name
. - #initialize ⇒ Object
- #initialize_copy ⇒ 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.
Instance Attribute Details
#last_description ⇒ Object Also known as: last_comment
Track the last comment made in the Rakefile.
13 14 15 |
# File 'lib/sproutcore/buildfile/task_manager.rb', line 13 def last_description @last_description end |
#last_task_options ⇒ Object
Returns the value of attribute last_task_options.
16 17 18 |
# File 'lib/sproutcore/buildfile/task_manager.rb', line 16 def @last_task_options end |
#tasks ⇒ Object
List of all defined tasks in this application.
130 131 132 |
# File 'lib/sproutcore/buildfile/task_manager.rb', line 130 def tasks @tasks end |
Instance Method Details
#[](task_name, scopes = nil) ⇒ Object
Find a matching task for task_name
.
62 63 64 65 |
# File 'lib/sproutcore/buildfile/task_manager.rb', line 62 def [](task_name, scopes=nil) lookup(task_name, scopes) or raise "Don't know how to build task '#{task_name}'" end |
#clear ⇒ Object
Clear all tasks in this application.
135 136 137 138 |
# File 'lib/sproutcore/buildfile/task_manager.rb', line 135 def clear @tasks.clear @rules.clear end |
#create_rule(*args, &block) ⇒ Object
35 36 37 38 39 |
# File 'lib/sproutcore/buildfile/task_manager.rb', line 35 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.
178 179 180 |
# File 'lib/sproutcore/buildfile/task_manager.rb', line 178 def current_scope @scope.dup end |
#define_task(task_class, *args, &block) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/sproutcore/buildfile/task_manager.rb', line 41 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) task.(@last_task_options) @last_description = nil task.enhance(deps, &block) task end |
#in_namespace(name) ⇒ Object
Evaluate the block in a nested namespace named name
. Create an anonymous namespace if name
is nil.
184 185 186 187 188 189 190 191 192 |
# File 'lib/sproutcore/buildfile/task_manager.rb', line 184 def in_namespace(name) name ||= generate_name @scope.push(name) ns = NameSpace.new(self, @scope) yield(ns) ns ensure @scope.pop end |
#initialize ⇒ Object
21 22 23 24 25 26 27 28 |
# File 'lib/sproutcore/buildfile/task_manager.rb', line 21 def initialize super @task_cache = {} @tasks = {} @rules = [] @scope = [] @last_description = nil end |
#initialize_copy ⇒ Object
30 31 32 33 |
# File 'lib/sproutcore/buildfile/task_manager.rb', line 30 def initialize_copy(*) @task_cache = {} super end |
#intern(task_class, task_name) ⇒ Object
Lookup a task. Return an existing task if found, otherwise create a task of the current type.
57 58 59 |
# File 'lib/sproutcore/buildfile/task_manager.rb', line 57 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.
145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 |
# File 'lib/sproutcore/buildfile/task_manager.rb', line 145 def lookup(task_name, initial_scope=nil) @task_cache[initial_scope] ||= {} @task_cache[initial_scope][task_name] ||= begin 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 end |
#resolve_args(args) ⇒ Object
Resolve the arguments for a task/rule. Returns a triplet of [task_name, arg_name_list, prerequisites].
69 70 71 72 73 74 75 76 |
# File 'lib/sproutcore/buildfile/task_manager.rb', line 69 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 |