class RSpec::Mocks::TargetBase
@private
def self.delegate_not_to(matcher_method, options = {})
def self.delegate_not_to(matcher_method, options = {}) method_name = options.fetch(:from) define_method(method_name) do |matcher, &block| case matcher when Matchers::Receive define_matcher(matcher, matcher_method, &block) when Matchers::ReceiveMessages, Matchers::ReceiveMessageChain raise_negation_unsupported(method_name, matcher) else raise_unsupported_matcher(method_name, matcher) end end end
def self.delegate_to(matcher_method)
def self.delegate_to(matcher_method) define_method(:to) do |matcher, &block| unless matcher_allowed?(matcher) raise_unsupported_matcher(:to, matcher) end define_matcher(matcher, matcher_method, &block) end end
def self.disallow_negation(method_name)
def self.disallow_negation(method_name) define_method(method_name) do |matcher, *args| raise_negation_unsupported(method_name, matcher) end end
def define_matcher(matcher, name, &block)
def define_matcher(matcher, name, &block) matcher.__send__(name, @target, &block) end
def expression
def expression self.class::EXPRESSION end
def initialize(target)
def initialize(target) @target = target end
def matcher_allowed?(matcher)
def matcher_allowed?(matcher) matcher.class.name.start_with?("RSpec::Mocks::Matchers".freeze) end
def raise_negation_unsupported(method_name, matcher)
def raise_negation_unsupported(method_name, matcher) raise NegationUnsupportedError, "`#{expression}(...).#{method_name} #{matcher.name}` is not supported since it " + "doesn't really make sense. What would it even mean?" end
def raise_unsupported_matcher(method_name, matcher)
def raise_unsupported_matcher(method_name, matcher) raise UnsupportedMatcherError, "only the `receive` or `receive_messages` matchers are supported " + "with `#{expression}(...).#{method_name}`, but you have provided: #{matcher}" end