class AbstractController::Base

def action_methods

* array - A list of all methods that should be considered actions.
==== Returns

itself. Finally, #hidden_actions are removed.
any methods that are internal, but still exist on the class
any internal methods (see #internal_methods), adding back in
includes all public instance methods on a controller, less
A list of method names that should be considered actions. This
def action_methods
  @action_methods ||= begin
    # All public instance methods of this class, including ancestors
    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