class RSpec::Matchers::BuiltIn::YieldControl

Public Class Methods

new() click to toggle source
# File lib/rspec/matchers/built_in/yield.rb, line 68
def initialize
  @expectation_type = nil
  @expected_yields_count = nil
end

Public Instance Methods

at_least(number) click to toggle source
# File lib/rspec/matchers/built_in/yield.rb, line 103
def at_least(number)
  set_expected_yields_count(:>=, number)
  self
end
at_most(number) click to toggle source
# File lib/rspec/matchers/built_in/yield.rb, line 98
def at_most(number)
  set_expected_yields_count(:<=, number)
  self
end
exactly(number) click to toggle source
# File lib/rspec/matchers/built_in/yield.rb, line 93
def exactly(number)
  set_expected_yields_count(:==, number)
  self
end
failure_message_for_should() click to toggle source
# File lib/rspec/matchers/built_in/yield.rb, line 112
def failure_message_for_should
  'expected given block to yield control'.tap do |failure_message|
    failure_message << relativity_failure_message
  end
end
failure_message_for_should_not() click to toggle source
# File lib/rspec/matchers/built_in/yield.rb, line 118
def failure_message_for_should_not
  'expected given block not to yield control'.tap do |failure_message|
    failure_message << relativity_failure_message
  end
end
matches?(block) click to toggle source
# File lib/rspec/matchers/built_in/yield.rb, line 73
def matches?(block)
  probe = YieldProbe.probe(block)

  if @expectation_type
    probe.num_yields.send(@expectation_type, @expected_yields_count)
  else
    probe.yielded_once?(:yield_control)
  end
end
once() click to toggle source
# File lib/rspec/matchers/built_in/yield.rb, line 83
def once
  exactly(1)
  self
end
times() click to toggle source
# File lib/rspec/matchers/built_in/yield.rb, line 108
def times
  self
end
twice() click to toggle source
# File lib/rspec/matchers/built_in/yield.rb, line 88
def twice
  exactly(2)
  self
end

Private Instance Methods

human_readable_count() click to toggle source
# File lib/rspec/matchers/built_in/yield.rb, line 148
def human_readable_count
  case @expected_yields_count
  when 1 then "once"
  when 2 then "twice"
  else "#{@expected_yields_count} times"
  end
end
human_readable_expecation_type() click to toggle source
# File lib/rspec/matchers/built_in/yield.rb, line 140
def human_readable_expecation_type
  case @expectation_type
  when :<= then 'at most '
  when :>= then 'at least '
  else ''
  end
end
relativity_failure_message() click to toggle source
# File lib/rspec/matchers/built_in/yield.rb, line 135
def relativity_failure_message
  return '' unless @expected_yields_count
  " #{human_readable_expecation_type}#{human_readable_count}"
end
set_expected_yields_count(relativity, n) click to toggle source
# File lib/rspec/matchers/built_in/yield.rb, line 126
def set_expected_yields_count(relativity, n)
  @expectation_type = relativity
  @expected_yields_count = case n
                           when Numeric then n
                           when :once then 1
                           when :twice then 2
                           end
end