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, args = nil) ⇒ 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.
543 544 545 546 547 |
# File 'lib/rake_remote_task.rb', line 543 def initialize task, block @task = task @block = block @workers = [] end |
Instance Attribute Details
#block ⇒ Object (readonly)
The block this action will execute.
533 534 535 |
# File 'lib/rake_remote_task.rb', line 533 def block @block end |
#task ⇒ Object (readonly)
The task this action is attached to.
528 529 530 |
# File 'lib/rake_remote_task.rb', line 528 def task @task end |
#workers ⇒ Object (readonly)
An Array of threads, one for each host this action executes on.
538 539 540 |
# File 'lib/rake_remote_task.rb', line 538 def workers @workers end |
Instance Method Details
#==(other) ⇒ Object
:nodoc:
549 550 551 552 |
# File 'lib/rake_remote_task.rb', line 549 def == other # :nodoc: return false unless Action === other block == other.block && task == other.task end |
#execute(hosts, args = nil) ⇒ Object
Execute this action on hosts in parallel. Returns when block has completed for each host.
558 559 560 561 562 563 564 565 566 567 568 569 |
# File 'lib/rake_remote_task.rb', line 558 def execute hosts, args = nil hosts.each do |host| t = task.clone t.target_host = host thread = Thread.new(t) do |task| Thread.current[:task] = task block.call args end @workers << thread end @workers.each { |w| w.join } end |