Class: Rake::RemoteTask::Action

Inherits:
Object
  • Object
show all
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

Instance Method Summary collapse

Constructor Details

#initialize(task, block) ⇒ Action

Creates a new Action that will run block for task.



509
510
511
512
513
# File 'lib/rake_remote_task.rb', line 509

def initialize task, block
  @task  = task
  @block = block
  @workers = []
end

Instance Attribute Details

#blockObject (readonly)

The block this action will execute.



499
500
501
# File 'lib/rake_remote_task.rb', line 499

def block
  @block
end

#taskObject (readonly)

The task this action is attached to.



494
495
496
# File 'lib/rake_remote_task.rb', line 494

def task
  @task
end

#workersObject (readonly)

An Array of threads, one for each host this action executes on.



504
505
506
# File 'lib/rake_remote_task.rb', line 504

def workers
  @workers
end

Instance Method Details

#==(other) ⇒ Object

:nodoc:



515
516
517
518
# File 'lib/rake_remote_task.rb', line 515

def == other # :nodoc:
  return false unless Action === other
  block == other.block && task == other.task
end

#execute(hosts) ⇒ Object

Execute this action on hosts in parallel. Returns when block has completed for each host.



524
525
526
527
528
529
530
531
532
533
534
535
# File 'lib/rake_remote_task.rb', line 524

def execute hosts
  hosts.each do |host|
    t = task.clone
    t.target_host = host
    thread = Thread.new(t) do |task|
      Thread.current[:task] = task
      block.call
    end
    @workers << thread
  end
  @workers.each { |w| w.join }
end