Class: Belzebuth::Process
- Inherits:
-
Object
- Object
- Belzebuth::Process
- Defined in:
- lib/belzebuth/process.rb
Constant Summary collapse
- DEFAULT_OPTIONS =
{ :directory => Dir.pwd, :environment => {}, :timeout => -1 }
Instance Method Summary collapse
-
#initialize(command, options = {}) ⇒ Process
constructor
A new instance of Process.
- #run ⇒ Object
Constructor Details
#initialize(command, options = {}) ⇒ Process
Returns a new instance of Process.
40 41 42 43 44 |
# File 'lib/belzebuth/process.rb', line 40 def initialize(command, = {}) @command = command @options = DEFAULT_OPTIONS.merge() @wait_condition = Belzebuth::WaitCondition(@options.fetch(:wait_condition, WaitCondition::Blocking.new)) end |
Instance Method Details
#run ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# 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 |