Skip to content

Commit 1dc2f18

Browse files
committed
abstract some code into methods for mock
1 parent 152db81 commit 1dc2f18

File tree

1 file changed

+18
-12
lines changed

1 file changed

+18
-12
lines changed

lib/spy/mock.rb

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -55,21 +55,14 @@ def new(klass)
5555
end
5656

5757
def included(mod)
58-
method_classes = mod.ancestors
59-
method_classes.shift
60-
method_classes.delete(self)
61-
CLASSES_NOT_TO_OVERRIDE.each do |klass|
62-
index = method_classes.index(klass)
63-
method_classes.slice!(index..-1) if index
64-
end
58+
method_classes = classes_to_override_methods(mod)
6559

6660
[:public, :protected, :private].each do |visibility|
6761
get_inherited_methods(method_classes, visibility).each do |method_name|
68-
method_args = parameters_to_args(mod.instance_method(method_name).parameters)
69-
method_args << "&never_hooked"
62+
args = args_for_method(mod.instance_method(method_name))
7063

7164
mod.class_eval <<-DEF_METHOD, __FILE__, __LINE__+1
72-
def #{method_name}(#{method_args.join(",")})
65+
def #{method_name}(#{args})
7366
raise ::Spy::NeverHookedError, "'#{method_name}' was never hooked on mock spy."
7467
end
7568
@@ -81,6 +74,17 @@ def #{method_name}(#{method_args.join(",")})
8174

8275
private
8376

77+
def classes_to_override_methods(mod)
78+
method_classes = mod.ancestors
79+
method_classes.shift
80+
method_classes.delete(self)
81+
CLASSES_NOT_TO_OVERRIDE.each do |klass|
82+
index = method_classes.index(klass)
83+
method_classes.slice!(index..-1) if index
84+
end
85+
method_classes
86+
end
87+
8488
def get_inherited_methods(klass_ancestors, visibility)
8589
get_methods_method = "#{visibility}_instance_methods".to_sym
8690
instance_methods = klass_ancestors.map(&get_methods_method)
@@ -89,8 +93,8 @@ def get_inherited_methods(klass_ancestors, visibility)
8993
instance_methods - Object.send(get_methods_method)
9094
end
9195

92-
def parameters_to_args(params)
93-
params.map do |type,name|
96+
def args_for_method(method)
97+
args = method.parameters.map do |type,name|
9498
name ||= :args
9599
case type
96100
when :req
@@ -101,6 +105,8 @@ def parameters_to_args(params)
101105
"*#{name}"
102106
end
103107
end.compact
108+
args << "&never_hooked"
109+
args.join(",")
104110
end
105111
end
106112
end

0 commit comments

Comments
 (0)