Sha256: 02f9a9397512568a76ca8714edfa3d3bc3c8ca6866f65dd665857b01ff836fdb

Contents?: true

Size: 807 Bytes

Versions: 4

Compression:

Stored size: 807 Bytes

Contents

require 'singleton'
require 'escape'
require 'fileutils'
require 'posix/spawn'

class RemoteTable
  class Executor
    include ::Singleton
    def bang(path, cmd)
      srand # in case this was forked by resque
      tmp_path = "#{path}.bang.#{rand}"
      backtick_with_reporting "cat #{::Escape.shell_single_word path} | #{cmd} > #{::Escape.shell_single_word tmp_path}"
      ::FileUtils.mv tmp_path, path
    end

    def backtick_with_reporting(cmd, raise_on_error = false)
      cmd = cmd.gsub /\n/m, ' '
      pid = ::POSIX::Spawn.spawn({ 'PATH' => '/usr/local/bin:/usr/bin:/bin' }, cmd)
      stat = ::Process::waitpid pid
      if raise_on_error and not stat.success?
        raise %{
From the remote_table gem...

Command failed:
#{cmd}

Exit code:
#{stat.exitstatus}
}
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
remote_table-1.1.8 lib/remote_table/executor.rb
remote_table-1.1.7 lib/remote_table/executor.rb
remote_table-1.1.6 lib/remote_table/executor.rb
remote_table-1.1.4 lib/remote_table/executor.rb