Class: Rake::Task
- Inherits:
-
Object
- Object
- Rake::Task
- Defined in:
- lib/rake.rb
Overview
######################################################################### A Task is the basic unit of work in a Rakefile. Tasks have associated actions (possibly more than one) and a list of prerequisites. When invoked, a task will first ensure that all of its prerequisites have an opportunity to run and then it will execute its own actions.
Tasks are not usually created directly using the new method, but rather use the file and task convenience methods.
Instance Attribute Summary collapse
-
#actions ⇒ Object
readonly
List of actions attached to a task.
-
#application ⇒ Object
Application owning this task.
-
#comment ⇒ Object
Comment for this task.
-
#full_comment ⇒ Object
readonly
Full text of the (possibly multi-line) comment.
-
#prerequisites ⇒ Object
readonly
List of prerequisites for a task.
-
#scope ⇒ Object
readonly
Array of nested namespaces names used for task lookup by this task.
- #sources ⇒ Object
Class Method Summary collapse
-
.[](task_name) ⇒ Object
Return a task with the given name.
-
.clear ⇒ Object
Clear the task list.
-
.create_rule(*args, &block) ⇒ Object
Define a rule for synthesizing tasks.
-
.define_task(*args, &block) ⇒ Object
Define a task given
argsand an option block. -
.scope_name(scope, task_name) ⇒ Object
Apply the scope to the task name according to the rules for this kind of task.
-
.task_defined?(task_name) ⇒ Boolean
TRUE if the task name is already defined.
-
.tasks ⇒ Object
List of all defined tasks.
Instance Method Summary collapse
-
#add_description(description) ⇒ Object
Add a description to the task.
-
#arg_description ⇒ Object
Argument description (nil if none).
-
#arg_names ⇒ Object
Name of arguments for this task.
-
#clear ⇒ Object
Clear the existing prerequisites and actions of a rake task.
-
#clear_actions ⇒ Object
Clear the existing actions on a rake task.
-
#clear_prerequisites ⇒ Object
Clear the existing prerequisites of a rake task.
-
#enhance(deps = nil, &block) ⇒ Object
Enhance a task with prerequisites or actions.
-
#execute(args = nil) ⇒ Object
Execute the actions associated with this task.
-
#initialize(task_name, app) ⇒ Task
constructor
Create a task named
task_namewith no actions or prerequisites. - #inspect ⇒ Object
-
#investigation ⇒ Object
Return a string describing the internal state of a task.
-
#invoke(*args) ⇒ Object
Invoke the task if it is needed.
-
#invoke_prerequisites(task_args, invocation_chain) ⇒ Object
Invoke all the prerequisites of a task.
-
#name ⇒ Object
Name of the task, including any namespace qualifiers.
-
#name_with_args ⇒ Object
Name of task with argument list description.
-
#needed? ⇒ Boolean
Is this task needed?.
-
#reenable ⇒ Object
Reenable the task, allowing its tasks to be executed if the task is invoked again.
-
#set_arg_names(args) ⇒ Object
Set the names of the arguments for this task.
-
#source ⇒ Object
First source from a rule (nil if no sources).
-
#timestamp ⇒ Object
Timestamp for this task.
-
#to_s ⇒ Object
Return task name.
Constructor Details
#initialize(task_name, app) ⇒ Task
Create a task named task_name with no actions or prerequisites. Use enhance to add actions and prerequisites.
511 512 513 514 515 516 517 518 519 520 521 522 |
# File 'lib/rake.rb', line 511 def initialize(task_name, app) @name = task_name.to_s @prerequisites = [] @actions = [] @already_invoked = false @full_comment = nil @comment = nil @lock = Monitor.new @application = app @scope = app.current_scope @arg_names = nil end |
Instance Attribute Details
#actions ⇒ Object (readonly)
List of actions attached to a task.
474 475 476 |
# File 'lib/rake.rb', line 474 def actions @actions end |
#application ⇒ Object
Application owning this task.
477 478 479 |
# File 'lib/rake.rb', line 477 def application @application end |
#comment ⇒ Object
Comment for this task. Restricted to a single line of no more than 50 characters.
481 482 483 |
# File 'lib/rake.rb', line 481 def comment @comment end |
#full_comment ⇒ Object (readonly)
Full text of the (possibly multi-line) comment.
484 485 486 |
# File 'lib/rake.rb', line 484 def full_comment @full_comment end |
#prerequisites ⇒ Object (readonly)
List of prerequisites for a task.
471 472 473 |
# File 'lib/rake.rb', line 471 def prerequisites @prerequisites end |
#scope ⇒ Object (readonly)
Array of nested namespaces names used for task lookup by this task.
487 488 489 |
# File 'lib/rake.rb', line 487 def scope @scope end |
#sources ⇒ Object
500 501 502 |
# File 'lib/rake.rb', line 500 def sources @sources ||= [] end |
Class Method Details
.[](task_name) ⇒ Object
Return a task with the given name. If the task is not currently known, try to synthesize one from the defined rules. If no rules are found, but an existing file matches the task name, assume it is a file task with no dependencies or actions.
728 729 730 |
# File 'lib/rake.rb', line 728 def [](task_name) Rake.application[task_name] end |
.clear ⇒ Object
Clear the task list. This cause rake to immediately forget all the tasks that have been assigned. (Normally used in the unit tests.)
715 716 717 |
# File 'lib/rake.rb', line 715 def clear Rake.application.clear end |
.create_rule(*args, &block) ⇒ Object
Define a rule for synthesizing tasks.
745 746 747 |
# File 'lib/rake.rb', line 745 def create_rule(*args, &block) Rake.application.create_rule(*args, &block) end |
.define_task(*args, &block) ⇒ Object
Define a task given args and an option block. If a rule with the given name already exists, the prerequisites and actions are added to the existing task. Returns the defined task.
740 741 742 |
# File 'lib/rake.rb', line 740 def define_task(*args, &block) Rake.application.define_task(self, *args, &block) end |
.scope_name(scope, task_name) ⇒ Object
Apply the scope to the task name according to the rules for this kind of task. Generic tasks will accept the scope as part of the name.
752 753 754 |
# File 'lib/rake.rb', line 752 def scope_name(scope, task_name) (scope + [task_name]).join(':') end |
.task_defined?(task_name) ⇒ Boolean
TRUE if the task name is already defined.
733 734 735 |
# File 'lib/rake.rb', line 733 def task_defined?(task_name) Rake.application.lookup(task_name) != nil end |
.tasks ⇒ Object
List of all defined tasks.
720 721 722 |
# File 'lib/rake.rb', line 720 def tasks Rake.application.tasks end |
Instance Method Details
#add_description(description) ⇒ Object
Add a description to the task. The description can consist of an option argument list (enclosed brackets) and an optional comment.
654 655 656 657 658 |
# File 'lib/rake.rb', line 654 def add_description(description) return if ! description comment = description.strip add_comment(comment) if comment && ! comment.empty? end |
#arg_description ⇒ Object
Argument description (nil if none).
546 547 548 |
# File 'lib/rake.rb', line 546 def arg_description # :nodoc: @arg_names ? "[#{(arg_names || []).join(',')}]" : nil end |
#arg_names ⇒ Object
Name of arguments for this task.
551 552 553 |
# File 'lib/rake.rb', line 551 def arg_names @arg_names || [] end |
#clear ⇒ Object
Clear the existing prerequisites and actions of a rake task.
562 563 564 565 566 |
# File 'lib/rake.rb', line 562 def clear clear_prerequisites clear_actions self end |
#clear_actions ⇒ Object
Clear the existing actions on a rake task.
575 576 577 578 |
# File 'lib/rake.rb', line 575 def clear_actions actions.clear self end |
#clear_prerequisites ⇒ Object
Clear the existing prerequisites of a rake task.
569 570 571 572 |
# File 'lib/rake.rb', line 569 def clear_prerequisites prerequisites.clear self end |
#enhance(deps = nil, &block) ⇒ Object
Enhance a task with prerequisites or actions. Returns self.
525 526 527 528 529 |
# File 'lib/rake.rb', line 525 def enhance(deps=nil, &block) @prerequisites |= deps if deps @actions << block if block_given? self end |
#execute(args = nil) ⇒ Object
Execute the actions associated with this task.
621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 |
# File 'lib/rake.rb', line 621 def execute(args=nil) args ||= EMPTY_TASK_ARGS if application..dryrun puts "** Execute (dry run) #{name}" return end if application..trace puts "** Execute #{name}" end application.enhance_with_matching_rule(name) if @actions.empty? @actions.each do |act| case act.arity when 1 act.call(self) else act.call(self, args) end end end |
#inspect ⇒ Object
494 495 496 |
# File 'lib/rake.rb', line 494 def inspect "<#{self.class} #{name} => [#{prerequisites.join(', ')}]>" end |
#investigation ⇒ Object
Return a string describing the internal state of a task. Useful for debugging.
690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 |
# File 'lib/rake.rb', line 690 def investigation result = "------------------------------\n" result << "Investigating #{name}\n" result << "class: #{self.class}\n" result << "task needed: #{needed?}\n" result << "timestamp: #{}\n" result << "pre-requisites: \n" prereqs = @prerequisites.collect {|name| application[name]} prereqs.sort! {|a,b| a. <=> b.} prereqs.each do |p| result << "--#{p.name} (#{p.})\n" end latest_prereq = @prerequisites.collect{|n| application[n].}.max result << "latest-prerequisite time: #{latest_prereq}\n" result << "................................\n\n" return result end |
#invoke(*args) ⇒ Object
Invoke the task if it is needed. Prerequites are invoked first.
581 582 583 584 |
# File 'lib/rake.rb', line 581 def invoke(*args) task_args = TaskArguments.new(arg_names, args) invoke_with_call_chain(task_args, InvocationChain::EMPTY) end |
#invoke_prerequisites(task_args, invocation_chain) ⇒ Object
Invoke all the prerequisites of a task.
603 604 605 606 607 608 609 |
# File 'lib/rake.rb', line 603 def invoke_prerequisites(task_args, invocation_chain) # :nodoc: @prerequisites.each { |n| prereq = application[n, @scope] prereq_args = task_args.new_scope(prereq.arg_names) prereq.invoke_with_call_chain(prereq_args, invocation_chain) } end |
#name ⇒ Object
Name of the task, including any namespace qualifiers.
532 533 534 |
# File 'lib/rake.rb', line 532 def name @name.to_s end |
#name_with_args ⇒ Object
Name of task with argument list description.
537 538 539 540 541 542 543 |
# File 'lib/rake.rb', line 537 def name_with_args # :nodoc: if arg_description "#{name}#{arg_description}" else name end end |
#needed? ⇒ Boolean
Is this task needed?
642 643 644 |
# File 'lib/rake.rb', line 642 def needed? true end |
#reenable ⇒ Object
Reenable the task, allowing its tasks to be executed if the task is invoked again.
557 558 559 |
# File 'lib/rake.rb', line 557 def reenable @already_invoked = false end |
#set_arg_names(args) ⇒ Object
Set the names of the arguments for this task. args should be an array of symbols, one for each argument name.
684 685 686 |
# File 'lib/rake.rb', line 684 def set_arg_names(args) @arg_names = args.map { |a| a.to_sym } end |
#source ⇒ Object
First source from a rule (nil if no sources)
505 506 507 |
# File 'lib/rake.rb', line 505 def source @sources.first if defined?(@sources) end |
#timestamp ⇒ Object
Timestamp for this task. Basic tasks return the current time for their time stamp. Other tasks can be more sophisticated.
648 649 650 |
# File 'lib/rake.rb', line 648 def @prerequisites.collect { |p| application[p]. }.max || Time.now end |
#to_s ⇒ Object
Return task name
490 491 492 |
# File 'lib/rake.rb', line 490 def to_s name end |