def resource(name, *args, &block)
name = name.to_s
options = extract_options_from_args!(args) || {}
params = { :controller => options.delete(:controller) || name.pluralize }
member = { :new => :get, :edit => :get, :delete => :get }.merge(options.delete(:member) || {})
options[:name_prefix] ||= nil
options[:resource_prefix] ||= nil
options[:controller_prefix] ||= options.delete(:namespace)
self.namespace(name, options).to(params) do |resource|
resource.match("(.:format)", :method => :get).to(:action => "show").
name(name).register_resource(name)
resource.match("(.:format)", :method => :post).to(:action => "create")
resource.match("(.:format)", :method => :put).to(:action => "update")
resource.match("(.:format)", :method => :delete).to(:action => "destroy")
member.each_pair do |action, method|
action = action.to_s
resource.match("/#{action}(.:format)", :method => method).to(:action => action).
name(action, name).register_resource(name, action)
end
if block_given?
builders = {}
builders[:member] = lambda do |action, to, method|
resource.match("/#{action}(.:format)", :method => method).to(:action => to).
name(action, name).register_resource(name, action)
end
resource.options(:name_prefix => name, :resource_prefix => name).
resource_block(builders, &block)
end
end
end