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
|
# 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:
==
68
69
70
71
|
# File 'lib/mocha/class_method.rb', line 68
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
58
59
60
61
62
63
64
65
66
|
# File 'lib/mocha/class_method.rb', line 58
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
79
80
81
82
83
|
# File 'lib/mocha/class_method.rb', line 79
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
43
44
45
|
# File 'lib/mocha/class_method.rb', line 43
def remove_new_method
stubbee.__metaclass__.send(:remove_method, method)
end
|
#restore_original_method ⇒ Object
47
48
49
50
51
52
53
54
55
56
|
# File 'lib/mocha/class_method.rb', line 47
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
|
75
76
77
|
# File 'lib/mocha/class_method.rb', line 75
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
|