Class: Mocha::ClassMethod
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
#initialize(stubbee, method) ⇒ ClassMethod
Returns a new instance of ClassMethod.
9
10
11
12
|
# File 'lib/mocha/class_method.rb', line 9
def initialize(stubbee, method)
@stubbee = stubbee
@method = RUBY_VERSION < '1.9' ? method.to_s : method.to_sym
end
|
Instance Attribute Details
Returns the value of attribute method.
7
8
9
|
# File 'lib/mocha/class_method.rb', line 7
def method
@method
end
|
Returns the value of attribute stubbee.
7
8
9
|
# File 'lib/mocha/class_method.rb', line 7
def stubbee
@stubbee
end
|
Instance Method Details
#define_new_method ⇒ Object
46
47
48
49
50
51
52
|
# File 'lib/mocha/class_method.rb', line 46
def define_new_method
stubbee.__metaclass__.class_eval(%{
def #{method}(*args, &block)
mocha.method_missing(:#{method}, *args, &block)
end
}, __FILE__, __LINE__)
end
|
#hidden_method ⇒ Object
69
70
71
72
73
74
75
76
77
|
# File 'lib/mocha/class_method.rb', line 69
def hidden_method
if RUBY_VERSION < '1.9'
method_name = method.to_s.gsub(/\W/) { |s| "_substituted_character_#{s[0]}_" }
else
method_name = method.to_s.gsub(/\W/) { |s| "_substituted_character_#{s.ord}_" }
end
hidden_method = "__stubba__#{method_name}__stubba__"
RUBY_VERSION < '1.9' ? hidden_method.to_s : hidden_method.to_sym
end
|
#hide_original_method ⇒ Object
36
37
38
39
40
41
42
43
44
|
# File 'lib/mocha/class_method.rb', line 36
def hide_original_method
if method_exists?(method)
begin
stubbee.__metaclass__.send(:alias_method, hidden_method, method)
rescue NameError
end
end
end
|
#matches?(other) ⇒ Boolean
79
80
81
82
|
# File 'lib/mocha/class_method.rb', line 79
def matches?(other)
return false unless (other.class == self.class)
(stubbee.object_id == other.stubbee.object_id) and (method == other.method)
end
|
#method_exists?(method) ⇒ Boolean
90
91
92
93
94
|
# File 'lib/mocha/class_method.rb', line 90
def method_exists?(method)
symbol = method.to_sym
__metaclass__ = stubbee.__metaclass__
__metaclass__.public_method_defined?(symbol) || __metaclass__.protected_method_defined?(symbol) || __metaclass__.private_method_defined?(symbol)
end
|
28
29
30
|
# File 'lib/mocha/class_method.rb', line 28
def mock
stubbee.mocha
end
|
#remove_new_method ⇒ Object
54
55
56
|
# File 'lib/mocha/class_method.rb', line 54
def remove_new_method
stubbee.__metaclass__.send(:remove_method, method)
end
|
#reset_mocha ⇒ Object
32
33
34
|
# File 'lib/mocha/class_method.rb', line 32
def reset_mocha
stubbee.reset_mocha
end
|
#restore_original_method ⇒ Object
58
59
60
61
62
63
64
65
66
67
|
# File 'lib/mocha/class_method.rb', line 58
def restore_original_method
if method_exists?(hidden_method)
begin
stubbee.__metaclass__.send(:alias_method, method, hidden_method)
stubbee.__metaclass__.send(:remove_method, hidden_method)
rescue NameError
end
end
end
|
14
15
16
17
|
# File 'lib/mocha/class_method.rb', line 14
def stub
hide_original_method
define_new_method
end
|
86
87
88
|
# File 'lib/mocha/class_method.rb', line 86
def to_s
"#{stubbee}.#{method}"
end
|
19
20
21
22
23
24
25
26
|
# File 'lib/mocha/class_method.rb', line 19
def unstub
remove_new_method
restore_original_method
mock.unstub(method.to_sym)
unless mock.any_expectations?
reset_mocha
end
end
|