Sha256: 75183b30e11513dfcce9716e57dea9ee834054a8bc21991639d9eca592708b6a

Contents?: true

Size: 1.33 KB

Versions: 1

Compression:

Stored size: 1.33 KB

Contents

require 'celluloid/autostart'
require_relative "../celluloid/rake_worker"
module CapistranoMulticonfigParallel
  class ExtensionHelper
    class << self
      def inside_job?
        job_id.present?
      end

      def job_id
        ENV[CapistranoMulticonfigParallel::ENV_KEY_JOB_ID]
      end
      

      def rake_actor_id
        ENV['count_rake'].present? ? "rake_worker_#{job_id}_count" : "rake_worker_#{job_id}"
      end

      def stdin_result
        Celluloid::Actor[rake_actor_id].stdin_result
      end

      def run_stdin_actor
        Celluloid::Actor[rake_actor_id].wait_execution('stdin') until stdin_result
        output = stdin_result.dup
        Celluloid::Actor[rake_actor_id].stdin_result = nil
        output
      end

      def run_the_actor(task)
        if Celluloid::Actor[rake_actor_id].blank?
          CapistranoMulticonfigParallel::RakeWorker.supervise_as rake_actor_id
          Celluloid::Actor[rake_actor_id].work(ENV, actor_id: rake_actor_id, job_id: job_id, task: task)
        else
          Celluloid::Actor[rake_actor_id].publish_new_work(ENV, task: task)
        end
        until Celluloid::Actor[rake_actor_id].task_approved
          Celluloid::Actor[rake_actor_id].wait_execution
        end
        yield Celluloid::Actor[rake_actor_id]  if Celluloid::Actor[rake_actor_id].task_approved
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
capistrano_multiconfig_parallel-0.8.3 lib/capistrano_multiconfig_parallel/extensions/extension_helper.rb