class Belzebuth::Process
Constants
- DEFAULT_OPTIONS
Public Class Methods
new(command, options = {})
click to toggle source
# File lib/belzebuth/process.rb, line 40 def initialize(command, options = {}) @command = command @options = DEFAULT_OPTIONS.merge(options) @wait_condition = Belzebuth::WaitCondition(@options.fetch(:wait_condition, WaitCondition::Blocking.new)) end
Public Instance Methods
run()
click to toggle source
# File lib/belzebuth/process.rb, line 46 def run Bundler.with_clean_env do child_process = Response.new(ChildProcess.new(*Shellwords.split(@command))) child_process.cwd = @options[:directory] child_process.io.stdout = create_tempfile("stdout") child_process.io.stderr = create_tempfile("stderr") started_at = Time.now child_process.start @wait_condition.start(child_process) while !@wait_condition.call(child_process) sleep(@wait_condition.sleep_time_between_condition(child_process)) if can_timeout? && Time.now - started_at > @options[:timeout] child_process.stop raise ExecutionTimeout, "`#{@command}` took too much time to execute (timeout: #{@options[:timeout]}) #{child_process}" end end @wait_condition.complete(child_process) child_process end end
Private Instance Methods
can_timeout?()
click to toggle source
# File lib/belzebuth/process.rb, line 74 def can_timeout? @options[:timeout] != -1 end
create_tempfile(name)
click to toggle source
# File lib/belzebuth/process.rb, line 78 def create_tempfile(name) io = Tempfile.new("#{name}") io.sync = true io end