lib/cistern/wait_for.rb
# frozen_string_literal: true
require 'timeout'
module Cistern
module WaitFor
def timeout
@timeout || Cistern.timeout
end
def timeout=(timeout)
@timeout = timeout
end
def poll_interval
@poll_interval || Cistern.poll_interval
end
def poll_interval=(poll_interval)
@poll_interval = poll_interval
end
def timeout_error=(timeout_error)
@timeout_error = timeout_error
end
def timeout_error
@timeout_error || self.const_defined?(:Timeout) && const_get(:Timeout) || ::Timeout::Error
end
def wait_for(timeout = self.timeout, interval = poll_interval, &_block)
duration = 0
start = Time.now
until yield || duration > timeout
sleep(interval.to_f)
duration = Time.now - start
end
duration > timeout ? false : duration
end
def wait_for!(timeout = self.timeout, interval = poll_interval, &block)
wait_for(timeout, interval, &block) || fail(timeout_error, "wait_for(#{timeout}) exceeded")
end
end
end