module Crew::Util
Public Instance Methods
assert(value, message = nil)
click to toggle source
# File lib/crew/util.rb, line 8 def assert(value, message = nil) value or begin message ||= "expected #{value.inspect} to be true at #{caller.first}" raise AssertionError, message end end
escape(*words)
click to toggle source
# File lib/crew/util.rb, line 66 def escape(*words) Shellwords.shelljoin(words) end
logger()
click to toggle source
# File lib/crew/util.rb, line 37 def logger @home ? @home.logger : @logger end
poll(name, opts = {}) { || ... }
click to toggle source
# File lib/crew/util.rb, line 41 def poll(name, opts = {}) interval = opts[:interval] || 1 timeout = opts[:timeout] spinner = logger.spinner(name) val = nil begin logger.muted do Timeout::timeout(timeout) do begin val = yield rescue spinner[false] sleep interval retry else spinner[true] end end end rescue Timeout::Error assert false, "timeout of #{timeout} exceeded" end val end
retryable(opts = {}) { || ... }
click to toggle source
# File lib/crew/util.rb, line 15 def retryable(opts = {}) intervals = 10.times.map { 0.1 }.to_a timeout = opts[:timeout] max = opts[:max] || 1.0 out = nil begin Timeout::timeout(max) do begin Timeout::timeout(timeout) { out = yield } end end rescue if intervals.empty? raise else sleep intervals.shift retry end end out end