class RSpec::Mocks::TargetBase

def self.delegate_to(matcher_method, options = {})

def self.delegate_to(matcher_method, options = {})
  method_name = options.fetch(:from) { :to }
  class_eval(<<-RUBY)
  def #{method_name}(matcher, &block)
    unless Matchers::Receive === matcher
      raise UnsupportedMatcherError, "only the `receive` matcher is supported " +
        "with `\#{expression}(...).\#{#{method_name.inspect}}`, but you have provided: \#{matcher}"
    end
    matcher.__send__(#{matcher_method.inspect}, @target, &block)
  end
  RUBY
end

def self.disallow_negation(method)

def self.disallow_negation(method)
  define_method method do |*args|
    raise NegationUnsupportedError,
      "`#{expression}(...).#{method} receive` is not supported since it " +
      "doesn't really make sense. What would it even mean?"
  end
end

def expression

def expression
  self.class::EXPRESSION
end

def initialize(target)

def initialize(target)
  @target = target
end