module EventuallyHelper
  # Waits until a block passes (stops raising an error)
  def self.eventually(timeout: 10, delay: 0.2)
    wait_until = Time.now + timeout
    begin
      yield
    rescue StandardError, RSpec::Expectations::ExpectationNotMetError => e
      raise e if Time.now >= wait_until
      sleep delay
      print '.'.yellow
      retry
    end
  end

  # Waits for a block to be true
  def self.eventually_true(timeout: 10, delay: 0.2)
    wait_until = Time.now + timeout
    until yield
      return false if Time.now >= wait_until
      sleep delay
      print '.'.yellow
    end
    yield
  end
end
