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) ⇒ Object
Execute this action on
hosts
in parallel. -
#initialize(task, block) ⇒ Action
constructor
Creates a new Action that will run
block
fortask
.
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
#block ⇒ Object (readonly)
The block this action will execute.
499 500 501 |
# File 'lib/rake_remote_task.rb', line 499 def block @block end |
#task ⇒ Object (readonly)
The task this action is attached to.
494 495 496 |
# File 'lib/rake_remote_task.rb', line 494 def task @task end |
#workers ⇒ Object (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 |