class RSpec::Mocks::Matchers::HaveReceived

@private

def apply_constraints_to(expectation)

def apply_constraints_to(expectation)
  @constraints.each do |constraint|
    expectation.send(*constraint)
  end
end

def count_constraint

def count_constraint
  @constraints.map(&:first).detect do |constraint|
    COUNT_CONSTRAINTS.include?(constraint)
  end
end

def description

def description
  expect.description
end

def does_not_match?(subject)

def does_not_match?(subject)
  @subject = subject
  ensure_count_unconstrained
  @expectation = expect.never
  mock_proxy.ensure_implemented(@method_name)
  expected_messages_received_in_order?
end

def ensure_count_unconstrained

def ensure_count_unconstrained
  if count_constraint
    raise RSpec::Mocks::MockExpectationError,
      "can't use #{count_constraint} when negative"
  end
end

def expect

def expect
  @expectation ||= begin
    expectation = mock_proxy.build_expectation(@method_name)
    apply_constraints_to expectation
    expectation
  end
end

def expected_messages_received_in_order?

def expected_messages_received_in_order?
  mock_proxy.replay_received_message_on @expectation, &@block
  @expectation.expected_messages_received? && @expectation.ensure_expected_ordering_received!
end

def failure_message

def failure_message
  generate_failure_message
end

def failure_message_when_negated

def failure_message_when_negated
  generate_failure_message
end

def generate_failure_message

def generate_failure_message
  mock_proxy.check_for_unexpected_arguments(@expectation)
  @expectation.generate_error
rescue RSpec::Mocks::MockExpectationError => error
  error.message
end

def initialize(method_name, &block)

def initialize(method_name, &block)
  @method_name = method_name
  @block = block
  @constraints = []
  @subject = nil
end

def matches?(subject, &block)

def matches?(subject, &block)
  @block ||= block
  @subject = subject
  @expectation = expect
  mock_proxy.ensure_implemented(@method_name)
  expected_messages_received_in_order?
end

def mock_proxy

def mock_proxy
  RSpec::Mocks.space.proxy_for(@subject)
end

def name

def name
  "have_received"
end