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
39
40
41
42
43
44
45
|
# File 'lib/mocha/class_method.rb', line 39
def define_new_method
stubbee.__metaclass__.class_eval(%{
def #{method}(*args, &block)
mocha.method_missing(:#{method}, *args, &block)
end
}, __FILE__, __LINE__)
end
|
#eql?(other) ⇒ Boolean
Also known as:
==
72
73
74
75
|
# File 'lib/mocha/class_method.rb', line 72
def eql?(other)
return false unless (other.class == self.class)
(stubbee.object_id == other.stubbee.object_id) and (method == other.method)
end
|
#hidden_method ⇒ Object
62
63
64
65
66
67
68
69
70
|
# File 'lib/mocha/class_method.rb', line 62
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
29
30
31
32
33
34
35
36
37
|
# File 'lib/mocha/class_method.rb', line 29
def hide_original_method
if method_exists?(method)
begin
stubbee.__metaclass__.send(:alias_method, hidden_method, method)
rescue NameError
end
end
end
|
#method_exists?(method) ⇒ Boolean
83
84
85
86
87
|
# File 'lib/mocha/class_method.rb', line 83
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
|
25
26
27
|
# File 'lib/mocha/class_method.rb', line 25
def mock
stubbee.mocha
end
|
#remove_new_method ⇒ Object
47
48
49
|
# File 'lib/mocha/class_method.rb', line 47
def remove_new_method
stubbee.__metaclass__.send(:remove_method, method)
end
|
#restore_original_method ⇒ Object
51
52
53
54
55
56
57
58
59
60
|
# File 'lib/mocha/class_method.rb', line 51
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
|
79
80
81
|
# File 'lib/mocha/class_method.rb', line 79
def to_s
"#{stubbee}.#{method}"
end
|
19
20
21
22
23
|
# File 'lib/mocha/class_method.rb', line 19
def unstub
remove_new_method
restore_original_method
stubbee.reset_mocha
end
|