Module: ResourcesController::NamedRouteHelper
- Defined in:
- lib/resources_controller/named_route_helper.rb
Overview
This module provides methods are provided to aid in writing inheritable controllers.
When writing an action that redirects to the list of resources, you may use resources_url and the controller will call the url_writer method appropriate to what the controller is a resources controller for.
If the route specified requires a member argument and you don’t provide it, the current resource is used.
In general you may subsitute ‘resource’ for the current (maybe polymorphic) resource. e.g.
You may also substitute ‘enclosing_resource’ to get urls for the enclosing resource
(in attachable/attachments where attachable is a Post)
resources_path # => post_attachments_path
formatted_edit_resource_path('js') # => formatted_post_attachments_path(<current post>, <current attachment>, 'js')
resource_tags_path # => post_attachments_tags_paths(<current post>, <current attachment>)
resource_tags_path(foo) # => post_attachments_tags_paths(<current post>, foo)
enclosing_resource_path # => post_path(<current post>)
enclosing_resources_path # => posts_path
enclosing_resource_tags_path # => post_tags_path(<current post>)
enclosing_resource_path(2) # => post_path(2)
The enclosing_resource stuff works with deep nesting if you’re into that.
These methods are defined as they are used. The ActionView Helper module delegates to the current controller to access these methods
Class Method Summary collapse
Instance Method Summary collapse
- #method_missing_with_named_route_helper(method, *args, &block) ⇒ Object
-
#resource_named_route_helper_method?(resource_method, raise_error = false) ⇒ Boolean
return true if the passed method (e.g. ‘resources_path’) corresponds to a defined named route helper method.
- #respond_to_with_named_route_helper?(*args) ⇒ Boolean
Class Method Details
.included(base) ⇒ Object
34 35 36 37 38 39 40 41 |
# File 'lib/resources_controller/named_route_helper.rb', line 34 def self.included(base) base.class_eval do alias_method_chain :method_missing, :named_route_helper alias_method_chain :respond_to?, :named_route_helper end base.hide_action *instance_methods base.hide_action :method_missing_without_named_route_helper, :respond_to_without_named_route_helper?, :respond_to? end |
Instance Method Details
#method_missing_with_named_route_helper(method, *args, &block) ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/resources_controller/named_route_helper.rb', line 43 def method_missing_with_named_route_helper(method, *args, &block) # TODO: test that methods are only defined once if resource_named_route_helper_method?(method, raise_error = true) define_resource_named_route_helper_method(method) send(method, *args) elsif resource_named_route_helper_method_for_name_prefix?(method) define_resource_named_route_helper_method_for_name_prefix(method) send(method, *args) else method_missing_without_named_route_helper(method, *args, &block) end end |
#resource_named_route_helper_method?(resource_method, raise_error = false) ⇒ Boolean
return true if the passed method (e.g. ‘resources_path’) corresponds to a defined named route helper method
62 63 64 65 66 67 68 69 70 71 |
# File 'lib/resources_controller/named_route_helper.rb', line 62 def resource_named_route_helper_method?(resource_method, raise_error = false) if resource_method.to_s =~ /_(path|url)$/ && resource_method.to_s =~ /(^|^.*_)enclosing_resource(s)?_/ _, route_method = *route_and_method_from_enclosing_resource_method_and_name_prefix(resource_method, name_prefix) elsif resource_method.to_s =~ /_(path|url)$/ && resource_method.to_s =~ /(^|^.*_)resource(s)?_/ _, route_method = *route_and_method_from_resource_method_and_name_prefix(resource_method, name_prefix) else return false end respond_to_without_named_route_helper?(route_method) || (raise_error && raise_resource_url_mapping_error(resource_method, route_method)) end |
#respond_to_with_named_route_helper?(*args) ⇒ Boolean
56 57 58 |
# File 'lib/resources_controller/named_route_helper.rb', line 56 def respond_to_with_named_route_helper?(*args) respond_to_without_named_route_helper?(*args) || resource_named_route_helper_method?(args.first) end |