module SC::TaskManager

Manages a set of tasks. Borrowed from Rake 0.8.3

Attributes

last_comment[RW]

Track the last comment made in the Rakefile.

last_description[RW]

Track the last comment made in the Rakefile.

last_task_options[RW]
tasks[RW]

Public Class Methods

new() click to toggle source
Calls superclass method
# File lib/sproutcore/buildfile/task_manager.rb, line 21
def initialize
  super
  @task_cache = {}
  @tasks = {}
  @rules = []
  @scope = []
  @last_description = nil
end

Public Instance Methods

[](task_name, scopes=nil) click to toggle source

Find a matching task for task_name.

# 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() click to toggle source

Clear all tasks in this application.

# File lib/sproutcore/buildfile/task_manager.rb, line 135
def clear
  @tasks.clear
  @rules.clear
end
create_rule(*args, &block) click to toggle source
# 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() click to toggle source

Return the list of scope names currently active in the task manager.

# File lib/sproutcore/buildfile/task_manager.rb, line 178
def current_scope
  @scope.dup
end
define_task(task_class, *args, &block) click to toggle source
# 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.add_options(@last_task_options)
  @last_description = nil
  task.enhance(deps, &block)
  task
end
in_namespace(name) { |ns| ... } click to toggle source

Evaluate the block in a nested namespace named name. Create an anonymous namespace if name is nil.

# 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_copy(*) click to toggle source
Calls superclass method
# File lib/sproutcore/buildfile/task_manager.rb, line 30
def initialize_copy(*)
  @task_cache = {}
  super
end
intern(task_class, task_name) click to toggle source

Lookup a task. Return an existing task if found, otherwise create a task of the current type.

# 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) click to toggle source

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.

# 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) click to toggle source

Resolve the arguments for a task/rule. Returns a triplet of [task_name, arg_name_list, prerequisites].

# 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

Private Instance Methods

generate_name() click to toggle source

Generate an anonymous namespace name.

# File lib/sproutcore/buildfile/task_manager.rb, line 197
def generate_name
  @seed ||= 0
  @seed += 1
  "_anon_#{@seed}"
end
lookup_in_scope(name, scope) click to toggle source

Lookup the task name

# File lib/sproutcore/buildfile/task_manager.rb, line 164
def lookup_in_scope(name, scope)
  n = scope.size
  while n >= 0
    tn = (scope[0,n] + [name]).join(':')
    task = @tasks[tn]
    return task if task
    n -= 1
  end
  nil
end
resolve_args_without_dependencies(args) click to toggle source

Resolve task arguments for a task or rule when there are no dependencies declared.

The patterns recognized by this argument resolving function are:

task :t
task :t, [:a]
task :t, :a                 (deprecated)
# File lib/sproutcore/buildfile/task_manager.rb, line 87
def resolve_args_without_dependencies(args)
  task_name = args.shift
  if args.size == 1 && args.first.respond_to?(:to_ary)
    arg_names = args.first.to_ary
  else
    arg_names = args
  end
  [task_name, arg_names, []]
end