class Shoulda::Matchers::Independent::DelegateMatcher
def add_clarifications_to(message)
def add_clarifications_to(message) if @delegated_arguments.present? message << " with arguments: #{@delegated_arguments.inspect}" end if @method_on_target.present? message << " as :#{@method_on_target}" end message end
def as(method_on_target)
def as(method_on_target) @method_on_target = method_on_target self end
def delegating_method_name
def delegating_method_name method_name_with_class(@delegating_method) end
def does_not_match?(subject)
def does_not_match?(subject) raise InvalidDelegateMatcher end
def ensure_target_method_is_present!
def ensure_target_method_is_present! if @target_method.blank? raise TargetNotDefinedError end end
def failure_message
def failure_message base = "Expected #{delegating_method_name} to delegate to #{target_method_name}" add_clarifications_to(base) end
def initialize(delegating_method)
def initialize(delegating_method) @delegating_method = delegating_method end
def matches?(subject)
def matches?(subject) @subject = subject ensure_target_method_is_present! begin extend Mocha::API stubbed_object = stub(method_on_target) subject.stubs(@target_method).returns(stubbed_object) subject.send(@delegating_method) stubbed_object.should have_received(method_on_target).with(*@delegated_arguments) rescue NoMethodError, RSpec::Expectations::ExpectationNotMetError, Mocha::ExpectationError false end end
def method_name_with_class(method)
def method_name_with_class(method) if Class === @subject @subject.name + '.' + method.to_s else @subject.class.name + '#' + method.to_s end end
def method_on_target
def method_on_target @method_on_target || @delegating_method end
def target_method_name
def target_method_name method_name_with_class(@target_method) end
def to(target_method)
def to(target_method) @target_method = target_method self end
def with_arguments(*arguments)
def with_arguments(*arguments) @delegated_arguments = arguments self end