diff options
author | Joshua Peek <josh@joshpeek.com> | 2010-01-17 22:06:28 -0600 |
---|---|---|
committer | Joshua Peek <josh@joshpeek.com> | 2010-01-17 22:06:28 -0600 |
commit | c29bb8857e637e77a8cf10f10c049d20fea3228a (patch) | |
tree | 7a7f0d8b29c71b12637e97dce4292f645762fc68 /actionpack/lib/abstract_controller | |
parent | 58fe3295feba782ba0a76b9315b962b1d33e8586 (diff) | |
download | rails-c29bb8857e637e77a8cf10f10c049d20fea3228a.tar.gz rails-c29bb8857e637e77a8cf10f10c049d20fea3228a.tar.bz2 rails-c29bb8857e637e77a8cf10f10c049d20fea3228a.zip |
Clear out AS callback method pollution in AC::Base.action_methods
Diffstat (limited to 'actionpack/lib/abstract_controller')
-rw-r--r-- | actionpack/lib/abstract_controller/base.rb | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/actionpack/lib/abstract_controller/base.rb b/actionpack/lib/abstract_controller/base.rb index 816412d97e..3119ee498b 100644 --- a/actionpack/lib/abstract_controller/base.rb +++ b/actionpack/lib/abstract_controller/base.rb @@ -62,15 +62,19 @@ module AbstractController # Array[String]:: A list of all methods that should be considered # actions. def action_methods - @action_methods ||= + @action_methods ||= begin # All public instance methods of this class, including ancestors - public_instance_methods(true).map { |m| m.to_s }.to_set - - # Except for public instance methods of Base and its ancestors - internal_methods.map { |m| m.to_s } + - # Be sure to include shadowed public instance methods of this class - public_instance_methods(false).map { |m| m.to_s } - - # And always exclude explicitly hidden actions - hidden_actions + methods = public_instance_methods(true).map { |m| m.to_s }.to_set - + # Except for public instance methods of Base and its ancestors + internal_methods.map { |m| m.to_s } + + # Be sure to include shadowed public instance methods of this class + public_instance_methods(false).map { |m| m.to_s } - + # And always exclude explicitly hidden actions + hidden_actions + + # Clear out AS callback method pollution + methods.reject { |method| method =~ /_one_time_conditions/ } + end end # Returns the full controller name, underscored, without the ending Controller. |