Represents a method on an object that may or may not be defined. The method may be an instance method on a module or a method on any object.
@private
A method is defined if we are able to get a `Method` object for it. In that case, we can assert against metadata like the arity.
# File lib/rspec/mocks/method_reference.rb, line 46 def defined? @object_reference.when_loaded do |m| method_defined?(m) end end
A method is implemented if sending the message does not result in a `NoMethodError`. It might be dynamically implemented by `method_missing`.
# File lib/rspec/mocks/method_reference.rb, line 23 def implemented? @object_reference.when_loaded do |m| method_implemented?(m) end end
Returns true if we definitively know that sending the method will result in a `NoMethodError`.
This is not simply the inverse of `implemented?`: there are cases when we don’t know if a method is implemented and both `implemented?` and `unimplemented?` will return false.
# File lib/rspec/mocks/method_reference.rb, line 35 def unimplemented? @object_reference.when_loaded do |_m| return !implemented? end # If it's not loaded, then it may be implemented but we can't check. false end
# File lib/rspec/mocks/method_reference.rb, line 57 def visibility @object_reference.when_loaded do |m| return visibility_from(m) end # When it's not loaded, assume it's public. We don't want to # wrongly treat the method as private. :public end
# File lib/rspec/mocks/method_reference.rb, line 52 def with_signature return unless (original = original_method) yield Support::MethodSignature.new(original) end
# File lib/rspec/mocks/method_reference.rb, line 11 def self.for(object_reference, method_name) new(object_reference, method_name) end
# File lib/rspec/mocks/method_reference.rb, line 15 def initialize(object_reference, method_name) @object_reference = object_reference @method_name = method_name end