Method: Mock.install_method

Defined in:
lib/extensions/mspec/mspec/mocks/mock.rb

.install_method(obj, sym, type = nil) ⇒ Object



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/extensions/mspec/mspec/mocks/mock.rb', line 55

def self.install_method(obj, sym, type=nil)
  meta = obj.singleton_class

  key = replaced_key obj, sym
  sym = sym.to_sym

  if (sym == :respond_to? or mock_respond_to?(obj, sym)) and !replaced?(key.first)
    meta.__send__ :alias_method, key.first, sym
  end

  meta.class_eval <<-END
    def #{sym}(*args, &block)
      Mock.verify_call self, :#{sym}, *args, &block
    end
  END

  proxy = MockProxy.new type

  if proxy.mock?
    MSpec.expectation
    MSpec.actions :expectation, MSpec.current.state
  end

  if proxy.stub?
    stubs[key].unshift proxy
  else
    mocks[key] << proxy
  end
  objects[key] = obj

  proxy
end