Permalink
Browse files

remove_possible_method: test if method exists

This speeds up remove_possible_method substantially since it doesn't
have to rescue a NameError in the common case.

Closes #2346.
  • Loading branch information...
1 parent 3d2bda9 commit e1b546464ecf20466fb38a93eea9769945774eee @bradediger bradediger committed with fxn Jul 31, 2011
Showing with 7 additions and 2 deletions.
  1. +7 −2 activesupport/lib/active_support/core_ext/module/remove_method.rb
View
9 activesupport/lib/active_support/core_ext/module/remove_method.rb
@@ -1,11 +1,16 @@
class Module
def remove_possible_method(method)
- remove_method(method)
+ if method_defined?(method) || private_method_defined?(method)
+ remove_method(method)
+ end
rescue NameError
+ # If the requested method is defined on a superclass or included module,
+ # method_defined? returns true but remove_method throws a NameError.
+ # Ignore this.
end
def redefine_method(method, &block)
remove_possible_method(method)
define_method(method, &block)
end
-end
+end

0 comments on commit e1b5464

Please sign in to comment.