Class: Rake::RemoteTask::Action
- Inherits:
- 
      Object
      
        - Object
- Rake::RemoteTask::Action
 
- Defined in:
- lib/rake/remote_task.rb
Overview
Action is used to run a task’s remote_actions in parallel on each of its hosts. Actions are created automatically in Rake::RemoteTask#enhance.
Instance Attribute Summary collapse
- 
  
    
      #block  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    The block this action will execute. 
- 
  
    
      #task  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    The task this action is attached to. 
- 
  
    
      #workers  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    An Array of threads, one for each host this action executes on. 
Instance Method Summary collapse
- 
  
    
      #==(other)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    :nodoc:. 
- 
  
    
      #execute(hosts, task, args)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Execute this action on hostsin parallel.
- 
  
    
      #initialize(task, block)  ⇒ Action 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    Creates a new Action that will run blockfortask.
Constructor Details
#initialize(task, block) ⇒ Action
Creates a new Action that will run block for task.
| 672 673 674 675 676 | # File 'lib/rake/remote_task.rb', line 672 def initialize task, block @task = task @block = block @workers = ThreadGroup.new end | 
Instance Attribute Details
#block ⇒ Object (readonly)
The block this action will execute.
| 662 663 664 | # File 'lib/rake/remote_task.rb', line 662 def block @block end | 
#task ⇒ Object (readonly)
The task this action is attached to.
| 657 658 659 | # File 'lib/rake/remote_task.rb', line 657 def task @task end | 
#workers ⇒ Object (readonly)
An Array of threads, one for each host this action executes on.
| 667 668 669 | # File 'lib/rake/remote_task.rb', line 667 def workers @workers end | 
Instance Method Details
#==(other) ⇒ Object
:nodoc:
| 678 679 680 681 | # File 'lib/rake/remote_task.rb', line 678 def == other # :nodoc: return false unless Action === other block == other.block && task == other.task end | 
#execute(hosts, task, args) ⇒ Object
Execute this action on hosts in parallel. Returns when block has completed for each host.
| 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 | # File 'lib/rake/remote_task.rb', line 687 def execute hosts, task, args hosts.each do |host| t = task.clone t.target_host = host thread = Thread.new(t) do |task2| Thread.current[:task] = task2 case block.arity when 1 block.call task2 else block.call task2, args end Thread.current[:task] = nil end @workers.add thread end @workers.list.each { |thr| thr.join } end |