diff options
author | José Valim <jose.valim@gmail.com> | 2011-05-06 18:39:10 +0200 |
---|---|---|
committer | José Valim <jose.valim@gmail.com> | 2011-05-06 18:44:18 +0200 |
commit | 9c2c25c1a1343937e96eed81e38ef4f9fb06ce11 (patch) | |
tree | 270fa93813a380761257e33a36f6069058b03e51 /actionpack/lib/abstract_controller | |
parent | 6acb858d06fa0873135eea0957a4aa5ea2fd0d2b (diff) | |
download | rails-9c2c25c1a1343937e96eed81e38ef4f9fb06ce11.tar.gz rails-9c2c25c1a1343937e96eed81e38ef4f9fb06ce11.tar.bz2 rails-9c2c25c1a1343937e96eed81e38ef4f9fb06ce11.zip |
Revert to old semantics, use available_action? instead of action_method?.
Diffstat (limited to 'actionpack/lib/abstract_controller')
-rw-r--r-- | actionpack/lib/abstract_controller/base.rb | 38 | ||||
-rw-r--r-- | actionpack/lib/abstract_controller/callbacks.rb | 4 |
2 files changed, 27 insertions, 15 deletions
diff --git a/actionpack/lib/abstract_controller/base.rb b/actionpack/lib/abstract_controller/base.rb index 0951267fea..08a1273a39 100644 --- a/actionpack/lib/abstract_controller/base.rb +++ b/actionpack/lib/abstract_controller/base.rb @@ -130,27 +130,39 @@ module AbstractController self.class.action_methods end - # Returns true if the name can be considered an action. This can - # be overridden in subclasses to modify the semantics of what - # can be considered an action. + # Returns true if a method for the action is available and + # can be dispatched, false otherwise. # - # For instance, this is overriden by ActionController to add - # the implicit rendering feature. - # - # ==== Parameters - # * <tt>name</tt> - The name of an action to be tested - # - # ==== Returns - # * <tt>TrueClass</tt>, <tt>FalseClass</tt> - def action_method?(name) - self.class.action_methods.include?(name) + # Notice that action_methods.include?("foo") may return + # false and available_action?("foo") return true because + # available action consider actions that are also available + # through other means, for example, implicit render ones. + def available_action?(action_name) + method_for_action(action_name).present? end private + # Returns true if the name can be considered an action because + # it has a method defined in the controller. + # + # ==== Parameters + # * <tt>name</tt> - The name of an action to be tested + # + # ==== Returns + # * <tt>TrueClass</tt>, <tt>FalseClass</tt> + # + # :api: private + def action_method?(name) + self.class.action_methods.include?(name) + end + # Call the action. Override this in a subclass to modify the # behavior around processing an action. This, and not #process, # is the intended way to override action dispatching. + # + # Notice that the first argument is the method to be dispatched + # which is *not* necessarily the same as the action name. def process_action(method_name, *args) send_action(method_name, *args) end diff --git a/actionpack/lib/abstract_controller/callbacks.rb b/actionpack/lib/abstract_controller/callbacks.rb index f7b2b7ff53..e8426bc52b 100644 --- a/actionpack/lib/abstract_controller/callbacks.rb +++ b/actionpack/lib/abstract_controller/callbacks.rb @@ -13,8 +13,8 @@ module AbstractController # Override AbstractController::Base's process_action to run the # process_action callbacks around the normal behavior. - def process_action(method_name, *args) - run_callbacks(:process_action, method_name) do + def process_action(*args) + run_callbacks(:process_action, action_name) do super end end |