Object
@private
# File lib/shoulda/matchers/independent/delegate_matcher.rb, line 116 def initialize(delegating_method) @delegating_method = delegating_method @method_on_target = @delegating_method @target_double = Doublespeak::ObjectDouble.new @delegated_arguments = [] @target_method = nil @subject = nil @subject_double_collection = nil end
# File lib/shoulda/matchers/independent/delegate_matcher.rb, line 148 def as(method_on_target) @method_on_target = method_on_target self end
# File lib/shoulda/matchers/independent/delegate_matcher.rb, line 137 def description add_clarifications_to( "delegate method ##{delegating_method} to :#{target_method}" ) end
# File lib/shoulda/matchers/independent/delegate_matcher.rb, line 158 def failure_message base = "Expected #{formatted_delegating_method_name} to delegate to #{formatted_target_method_name}" add_clarifications_to(base) base << "\nCalls on #{formatted_target_method_name}:" base << formatted_calls_on_target base.strip end
# File lib/shoulda/matchers/independent/delegate_matcher.rb, line 167 def failure_message_when_negated base = "Expected #{formatted_delegating_method_name} not to delegate to #{formatted_target_method_name}" add_clarifications_to(base) base << ', but it did' end
# File lib/shoulda/matchers/independent/delegate_matcher.rb, line 127 def matches?(subject) @subject = subject ensure_target_method_is_present! subject_has_delegating_method? && subject_has_target_method? && subject_delegates_to_target_correctly? end
# File lib/shoulda/matchers/independent/delegate_matcher.rb, line 186 def add_clarifications_to(message) if delegated_arguments.any? message << " with arguments: #{delegated_arguments.inspect}" end if method_on_target != delegating_method message << " as ##{method_on_target}" end message end
# File lib/shoulda/matchers/independent/delegate_matcher.rb, line 265 def calls_on_target target_double.calls end
# File lib/shoulda/matchers/independent/delegate_matcher.rb, line 261 def calls_to_method_on_target target_double.calls_to(method_on_target) end
# File lib/shoulda/matchers/independent/delegate_matcher.rb, line 232 def ensure_target_method_is_present! if target_method.blank? raise TargetNotDefinedError end end
# File lib/shoulda/matchers/independent/delegate_matcher.rb, line 269 def formatted_calls_on_target string = "" if calls_on_target.any? string << "\n" calls_on_target.each_with_index do |call, i| name = call.method_name args = call.args.map { |arg| arg.inspect }.join(', ') string << "#{i+1}) #{name}(#{args})\n" end else string << " (none)" end string end
# File lib/shoulda/matchers/independent/delegate_matcher.rb, line 198 def formatted_delegating_method_name formatted_method_name_for(delegating_method) end
# File lib/shoulda/matchers/independent/delegate_matcher.rb, line 206 def formatted_method_name_for(method_name) if subject.is_a?(Class) subject.name + '.' + method_name.to_s else subject.class.name + '#' + method_name.to_s end end
# File lib/shoulda/matchers/independent/delegate_matcher.rb, line 202 def formatted_target_method_name formatted_method_name_for(target_method) end
# File lib/shoulda/matchers/independent/delegate_matcher.rb, line 252 def register_subject_double_collection double_collection = Doublespeak.double_collection_for(subject.singleton_class) double_collection.register_stub(target_method). to_return(target_double) @subject_double_collection = double_collection end
# File lib/shoulda/matchers/independent/delegate_matcher.rb, line 238 def subject_delegates_to_target_correctly? register_subject_double_collection Doublespeak.with_doubles_activated do subject.public_send(delegating_method, *delegated_arguments) end if delegated_arguments.any? target_received_method_with_delegated_arguments? else target_received_method? end end
# File lib/shoulda/matchers/independent/delegate_matcher.rb, line 224 def subject_has_delegating_method? subject.respond_to?(delegating_method) end
# File lib/shoulda/matchers/independent/delegate_matcher.rb, line 228 def subject_has_target_method? subject.respond_to?(target_method) end
Generated with the Darkfish Rdoc Generator 2.