From 8326a15784550f8a909e140f828dc0b1c83d617c Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Fri, 27 Apr 2007 16:58:36 +0000 Subject: Added map.namespace to deal with the common situation of admin sections and the like [DHH] git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@6594 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/lib/action_controller/resources.rb | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'actionpack/lib/action_controller/resources.rb') diff --git a/actionpack/lib/action_controller/resources.rb b/actionpack/lib/action_controller/resources.rb index 63f2b67755..6a2280a6d3 100644 --- a/actionpack/lib/action_controller/resources.rb +++ b/actionpack/lib/action_controller/resources.rb @@ -18,7 +18,7 @@ module ActionController end def controller - @controller ||= (options[:controller] || plural).to_s + @controller ||= "#{options[:namespace]}#{(options[:controller] || plural).to_s}" end def requirements(with_id = false) @@ -301,6 +301,22 @@ module ActionController entities.each { |entity| map_singleton_resource(entity, options.dup, &block) } end + # Enables the use of resources in a module by setting the name_prefix, path_prefix, and namespace for the model. + # Example: + # + # map.namespace(:admin) do |admin| + # admin.resources :products, + # :has_many => [ :tags, :images, :variants ] + # end + # + # This will create admin_products_url pointing to "admin/products", which will look for an Admin::ProductsController. + # It'll also create admin_product_tags_url pointing to "admin/products/#{product_id}/tags", which will look for + # Admin::TagsController. + def namespace(name, options = {}, &block) + with_options({ :path_prefix => name, :name_prefix => "#{name}_", :namespace => "#{name}/" }.merge(options), &block) + end + + private def map_resource(entities, options = {}, &block) resource = Resource.new(entities, options) -- cgit v1.2.3