Sha256: 0cce70599ed1d4847c08e89185d72a28f1de0f4b633714c86f25474927044b8d

Contents?: true

Size: 817 Bytes

Versions: 10

Compression:

Stored size: 817 Bytes

Contents

# encoding: UTF-8

require 'fiber'

module Spontaneous::Plugins::Application
  module System
    extend Spontaneous::Concern

    module ClassMethods
      def async?
        defined?(::EM) && ::EM.reactor_running?
      end

      def system(cmd, timeout = 10, &callback)
        if async?
          async_system(cmd, &callback)
        else
          result = super(cmd)
          callback.call(result) if callback
        end
      end

      # Invokes an asynchronous system call
      def async_system(cmd, timeout = 10, &callback)
        deferrable = EM::DefaultDeferrable.new
        EM.system cmd do |output, status|
          deferrable.succeed(output, status)
        end
        deferrable.timeout timeout
        deferrable.errback {  }
        deferrable.callback(&callback)
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
spontaneous-0.2.0.beta10 lib/spontaneous/plugins/application/system.rb
spontaneous-0.2.0.beta9 lib/spontaneous/plugins/application/system.rb
spontaneous-0.2.0.beta8 lib/spontaneous/plugins/application/system.rb
spontaneous-0.2.0.beta7 lib/spontaneous/plugins/application/system.rb
spontaneous-0.2.0.beta6 lib/spontaneous/plugins/application/system.rb
spontaneous-0.2.0.beta5 lib/spontaneous/plugins/application/system.rb
spontaneous-0.2.0.beta4 lib/spontaneous/plugins/application/system.rb
spontaneous-0.2.0.beta3 lib/spontaneous/plugins/application/system.rb
spontaneous-0.2.0.beta2 lib/spontaneous/plugins/application/system.rb
spontaneous-0.2.0.beta1 lib/spontaneous/plugins/application/system.rb