aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_dispatch/routing
diff options
context:
space:
mode:
authorJoshua Peek <josh@joshpeek.com>2010-01-13 17:23:14 -0600
committerJoshua Peek <josh@joshpeek.com>2010-01-13 17:23:14 -0600
commitd01716731bd9c68de686d6ac85e3da5251305495 (patch)
treef08f308b1f5b86541abacc430a0e65e833fb8c31 /actionpack/lib/action_dispatch/routing
parent5d787590f25a592b85032f951fa5a3441b89eb1b (diff)
downloadrails-d01716731bd9c68de686d6ac85e3da5251305495.tar.gz
rails-d01716731bd9c68de686d6ac85e3da5251305495.tar.bz2
rails-d01716731bd9c68de686d6ac85e3da5251305495.zip
Add router support for resources :only and :except actions
Diffstat (limited to 'actionpack/lib/action_dispatch/routing')
-rw-r--r--actionpack/lib/action_dispatch/routing/mapper.rb54
1 files changed, 38 insertions, 16 deletions
diff --git a/actionpack/lib/action_dispatch/routing/mapper.rb b/actionpack/lib/action_dispatch/routing/mapper.rb
index 48fb7edd67..5009ed001c 100644
--- a/actionpack/lib/action_dispatch/routing/mapper.rb
+++ b/actionpack/lib/action_dispatch/routing/mapper.rb
@@ -324,7 +324,11 @@ module ActionDispatch
CRUD_ACTIONS = [:index, :show, :new, :edit, :create, :update, :destroy]
class Resource #:nodoc:
- attr_reader :plural, :singular
+ def self.default_actions
+ [:index, :create, :new, :show, :update, :destroy, :edit]
+ end
+
+ attr_reader :plural, :singular, :options
def initialize(entities, options = {})
entities = entities.to_s
@@ -334,8 +338,22 @@ module ActionDispatch
@singular = entities.singularize
end
+ def default_actions
+ self.class.default_actions
+ end
+
+ def actions
+ if only = options[:only]
+ only.map(&:to_sym)
+ elsif except = options[:except]
+ default_actions - except.map(&:to_sym)
+ else
+ default_actions
+ end
+ end
+
def name
- @options[:as] || plural
+ options[:as] || plural
end
def controller
@@ -356,12 +374,16 @@ module ActionDispatch
end
class SingletonResource < Resource #:nodoc:
+ def self.default_actions
+ [:show, :create, :update, :destroy, :new, :edit]
+ end
+
def initialize(entity, options = {})
super
end
def name
- @options[:as] || singular
+ options[:as] || singular
end
end
@@ -387,12 +409,12 @@ module ActionDispatch
with_scope_level(:resource, resource) do
yield if block_given?
- get "(.:format)", :to => :show, :as => resource.member_name
- post "(.:format)", :to => :create
- put "(.:format)", :to => :update
- delete "(.:format)", :to => :destroy
- get "/new(.:format)", :to => :new, :as => "new_#{resource.singular}"
- get "/edit(.:format)", :to => :edit, :as => "edit_#{resource.singular}"
+ get "(.:format)", :to => :show, :as => resource.member_name if resource.actions.include?(:show)
+ post "(.:format)", :to => :create if resource.actions.include?(:create)
+ put "(.:format)", :to => :update if resource.actions.include?(:update)
+ delete "(.:format)", :to => :destroy if resource.actions.include?(:destroy)
+ get "/new(.:format)", :to => :new, :as => "new_#{resource.singular}" if resource.actions.include?(:new)
+ get "/edit(.:format)", :to => :edit, :as => "edit_#{resource.singular}" if resource.actions.include?(:edit)
end
end
@@ -422,22 +444,22 @@ module ActionDispatch
yield if block_given?
with_scope_level(:collection) do
- get "(.:format)", :to => :index, :as => resource.collection_name
- post "(.:format)", :to => :create
+ get "(.:format)", :to => :index, :as => resource.collection_name if resource.actions.include?(:index)
+ post "(.:format)", :to => :create if resource.actions.include?(:create)
with_exclusive_name_prefix :new do
- get "/new(.:format)", :to => :new, :as => resource.singular
+ get "/new(.:format)", :to => :new, :as => resource.singular if resource.actions.include?(:new)
end
end
with_scope_level(:member) do
scope("/:id") do
- get "(.:format)", :to => :show, :as => resource.member_name
- put "(.:format)", :to => :update
- delete "(.:format)", :to => :destroy
+ get "(.:format)", :to => :show, :as => resource.member_name if resource.actions.include?(:show)
+ put "(.:format)", :to => :update if resource.actions.include?(:update)
+ delete "(.:format)", :to => :destroy if resource.actions.include?(:destroy)
with_exclusive_name_prefix :edit do
- get "/edit(.:format)", :to => :edit, :as => resource.singular
+ get "/edit(.:format)", :to => :edit, :as => resource.singular if resource.actions.include?(:edit)
end
end
end