class Rspec::Eventually::Eventually

Attributes

pause[R]
suppress_errors[R]
timeout[R]

Public Class Methods

new(target, custom_msg = nil) click to toggle source
# File lib/rspec/eventually.rb, line 21
def initialize(target, custom_msg = nil)
  @target = target
  @tries = 0
  @negative = false
  @custom_msg = custom_msg
  @timeout = Rspec::Eventually.timeout
  @pause = Rspec::Eventually.pause
  @suppress_errors = false
end

Public Instance Methods

by_suppressing_errors() click to toggle source
# File lib/rspec/eventually.rb, line 17
def by_suppressing_errors
  tap { @suppress_errors = true }
end
does_not_match?() click to toggle source
# File lib/rspec/eventually.rb, line 38
def does_not_match?
  raise 'Use eventually_not instead of expect(...).to_not'
end
failure_message() click to toggle source
# File lib/rspec/eventually.rb, line 42
def failure_message
  msg = @custom_msg || @target.failure_message
  "After #{@tries} tries, the last failure message was:\n#{msg}"
end
matches?(expected_block) click to toggle source
# File lib/rspec/eventually.rb, line 31
def matches?(expected_block)
  Timeout.timeout(timeout) { eventually_matches? expected_block }
rescue Timeout::Error
  @tries.zero? && raise('Timeout before first evaluation, use a longer `eventually` timeout \
    or shorter `eventually` pause')
end
not() click to toggle source
# File lib/rspec/eventually.rb, line 47
def not
  tap { @negative = true }
end
pause_for(pause) click to toggle source
# File lib/rspec/eventually.rb, line 59
def pause_for(pause)
  tap { @pause = pause }
end
supports_block_expectations?() click to toggle source
# File lib/rspec/eventually.rb, line 51
def supports_block_expectations?
  true
end
within(timeout) click to toggle source
# File lib/rspec/eventually.rb, line 55
def within(timeout)
  tap { @timeout = timeout }
end

Private Instance Methods

eventually_matches?(expected_block) click to toggle source
# File lib/rspec/eventually.rb, line 65
def eventually_matches?(expected_block)
  target_matches?(expected_block) || raise(FailedMatcherError)
rescue StandardError => e
  raise if !e.is_a?(FailedMatcherError) && !suppress_errors
  sleep pause
  @tries += 1
  retry
end
target_matches?(expected_block) click to toggle source
# File lib/rspec/eventually.rb, line 74
def target_matches?(expected_block)
  result = @target.matches? expected_block.call
  @negative ? !result : result
end