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