@private
# File lib/rspec/mocks/targets.rb, line 18 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
# File lib/rspec/mocks/targets.rb, line 9 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
# File lib/rspec/mocks/targets.rb, line 32 def self.disallow_negation(method_name) define_method(method_name) do |matcher, *args| raise_negation_unsupported(method_name, matcher) end end
# File lib/rspec/mocks/targets.rb, line 5 def initialize(target) @target = target end
# File lib/rspec/mocks/targets.rb, line 44 def define_matcher(matcher, name, &block) matcher.__send__(name, @target, &block) end
# File lib/rspec/mocks/targets.rb, line 60 def expression self.class::EXPRESSION end
# File lib/rspec/mocks/targets.rb, line 40 def matcher_allowed?(matcher) matcher.class.name.start_with?("RSpec::Mocks::Matchers".freeze) end
# File lib/rspec/mocks/targets.rb, line 54 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
# File lib/rspec/mocks/targets.rb, line 48 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