Parent

RSpec::Mocks::MethodDouble

Attributes

method_name[R]

Public Class Methods

new(object, method_name, proxy) click to toggle source
# File lib/rspec/mocks/method_double.rb, line 6
def initialize(object, method_name, proxy)
  @method_name = method_name
  @object = object
  @proxy = proxy
  @stashed = false
  store(:expectations, [])
  store(:stubs, [])
end

Public Instance Methods

add_expectation(error_generator, expectation_ordering, expected_from, opts, &block) click to toggle source
# File lib/rspec/mocks/method_double.rb, line 116
def add_expectation(error_generator, expectation_ordering, expected_from, opts, &block)
  configure_method
  expectation = if existing_stub = stubs.first
    existing_stub.build_child(expected_from, block, 1, opts)
  else
    MessageExpectation.new(error_generator, expectation_ordering, expected_from, @method_name, block, 1, opts)
  end
  expectations << expectation
  expectation
end
add_negative_expectation(error_generator, expectation_ordering, expected_from, &implementation) click to toggle source
# File lib/rspec/mocks/method_double.rb, line 127
def add_negative_expectation(error_generator, expectation_ordering, expected_from, &implementation)
  configure_method
  expectation = NegativeMessageExpectation.new(error_generator, expectation_ordering, expected_from, @method_name, implementation)
  expectations.unshift expectation
  expectation
end
add_stub(error_generator, expectation_ordering, expected_from, opts={}, &implementation) click to toggle source
# File lib/rspec/mocks/method_double.rb, line 134
def add_stub(error_generator, expectation_ordering, expected_from, opts={}, &implementation)
  configure_method
  stub = MessageExpectation.new(error_generator, expectation_ordering, expected_from, @method_name, nil, :any, opts, &implementation)
  stubs.unshift stub
  stub
end
clear() click to toggle source
# File lib/rspec/mocks/method_double.rb, line 111
def clear
  expectations.clear
  stubs.clear
end
configure_method() click to toggle source
# File lib/rspec/mocks/method_double.rb, line 57
def configure_method
  RSpec::Mocks::space.add(@object) if RSpec::Mocks::space
  warn_if_nil_class
  unless @stashed
    stash_original_method
    define_proxy_method
  end
end
define_proxy_method() click to toggle source
# File lib/rspec/mocks/method_double.rb, line 75
def define_proxy_method
  method_name = @method_name
  visibility_for_method = "#{visibility} :#{method_name}"
  object_singleton_class.class_eval(          def #{method_name}(*args, &block)            __mock_proxy.message_received :#{method_name}, *args, &block          end          #{visibility_for_method}, __FILE__, __LINE__)
end
expectations() click to toggle source
# File lib/rspec/mocks/method_double.rb, line 15
def expectations
  self[:expectations]
end
obfuscate(method_name) click to toggle source
# File lib/rspec/mocks/method_double.rb, line 39
def obfuscate(method_name)
  "obfuscated_by_rspec_mocks__#{method_name}"
end
object_responds_to?(method_name) click to toggle source
# File lib/rspec/mocks/method_double.rb, line 47
def object_responds_to?(method_name)
  if @proxy.already_proxied_respond_to?
    @object.__send__(obfuscate(:respond_to?), method_name)
  elsif method_name == :respond_to?
    @proxy.already_proxied_respond_to
  else
    @object.respond_to?(method_name, true)
  end
end
object_singleton_class() click to toggle source
# File lib/rspec/mocks/method_double.rb, line 35
def object_singleton_class
  class << @object; self; end
end
proxy_for_nil_class?() click to toggle source
# File lib/rspec/mocks/method_double.rb, line 146
def proxy_for_nil_class?
  @object.nil?
end
raise_method_not_stubbed_error() click to toggle source
# File lib/rspec/mocks/method_double.rb, line 156
def raise_method_not_stubbed_error
  raise MockExpectationError, "The method `#{method_name}` was not stubbed or was already unstubbed" 
end
remove_stub() click to toggle source
# File lib/rspec/mocks/method_double.rb, line 141
def remove_stub
  raise_method_not_stubbed_error if stubs.empty?
  expectations.empty? ? reset : stubs.clear
end
reset() click to toggle source
# File lib/rspec/mocks/method_double.rb, line 105
def reset
  reset_nil_expectations_warning
  restore_original_method
  clear
end
reset_nil_expectations_warning() click to toggle source
# File lib/rspec/mocks/method_double.rb, line 160
def reset_nil_expectations_warning
  RSpec::Mocks::Proxy.warn_about_expectations_on_nil = true if proxy_for_nil_class?
end
restore_original_method() click to toggle source
# File lib/rspec/mocks/method_double.rb, line 86
def restore_original_method
  if @stashed
    method_name = @method_name
    stashed_method_name = self.stashed_method_name
    object_singleton_class.instance_eval do
      remove_method method_name
      if method_defined?(stashed_method_name) || private_method_defined?(stashed_method_name)
        alias_method method_name, stashed_method_name
        remove_method stashed_method_name
      end
    end
    @stashed = false
  end
end
stash_original_method() click to toggle source
# File lib/rspec/mocks/method_double.rb, line 66
def stash_original_method
  stashed = stashed_method_name
  orig = @method_name
  object_singleton_class.class_eval do
    alias_method(stashed, orig) if method_defined?(orig) || private_method_defined?(orig)
  end
  @stashed = true
end
stashed_method_name() click to toggle source
# File lib/rspec/mocks/method_double.rb, line 43
def stashed_method_name
  obfuscate(method_name)
end
stubs() click to toggle source
# File lib/rspec/mocks/method_double.rb, line 19
def stubs
  self[:stubs]
end
verify() click to toggle source
# File lib/rspec/mocks/method_double.rb, line 101
def verify
  expectations.each {|e| e.verify_messages_received}
end
visibility() click to toggle source
# File lib/rspec/mocks/method_double.rb, line 23
def visibility
  if Mock === @object
    'public'
  elsif object_singleton_class.private_method_defined?(@method_name)
    'private'
  elsif object_singleton_class.protected_method_defined?(@method_name)
    'protected'
  else
    'public'
  end
end
warn_if_nil_class() click to toggle source
# File lib/rspec/mocks/method_double.rb, line 150
def warn_if_nil_class
  if proxy_for_nil_class? & RSpec::Mocks::Proxy.warn_about_expectations_on_nil
    Kernel.warn("An expectation of :#{@method_name} was set on nil. Called from #{caller[4]}. Use allow_message_expectations_on_nil to disable warnings.")
  end
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.