def resources(name, options = {})
namespace = options[:namespace] || merged_params[:namespace]
next_level = match "/#{name}"
name_prefix = options.delete :name_prefix
matched_keys = options[:keys] ? options.delete(:keys).map{|k| ":#{k}"}.join("/") : ":id"
if name_prefix.nil? && !namespace.nil?
name_prefix = namespace_to_name_prefix namespace
end
unless @@parent_resource.empty?
parent_resource = namespace_to_name_prefix @@parent_resource.join('_')
end
options[:controller] ||= merged_params[:controller] || name.to_s
singular = name.to_s.singularize
route_plural_name = "#{name_prefix}#{parent_resource}#{name}"
route_singular_name = "#{name_prefix}#{parent_resource}#{singular}"
behaviors = []
if member = options.delete(:member)
member.each_pair do |action, methods|
behaviors << Behavior.new(
{ :path => %r{^/#{matched_keys}[/;]#{action}(\.:format)?$}, :method => /^(#{[methods].flatten * '|'})$/ },
{ :action => action.to_s }, next_level
)
next_level.match("/#{matched_keys}/#{action}").to_route.name("#{action}_#{route_singular_name}""#{action}_#{route_singular_name}")
end
end
if collection = options.delete(:collection)
collection.each_pair do |action, methods|
behaviors << Behavior.new(
{ :path => %r{^[/;]#{action}(\.:format)?$}, :method => /^(#{[methods].flatten * '|'})$/ },
{ :action => action.to_s }, next_level
)
next_level.match("/#{action}").to_route.name("#{action}_#{route_plural_name}""#{action}_#{route_plural_name}")
end
end
routes = many_behaviors_to(behaviors + next_level.send(:resources_behaviors, matched_keys), options)
[['', "#{route_plural_name}""#{route_plural_name}"],
["/#{matched_keys}", "#{route_singular_name}""#{route_singular_name}"],
['/new', "new_#{route_singular_name}""new_#{route_singular_name}"],
["/#{matched_keys}/edit", "edit_#{route_singular_name}""edit_#{route_singular_name}"],
["/#{matched_keys}/delete", "delete_#{route_singular_name}""delete_#{route_singular_name}"]
].each do |path,name|
next_level.match(path).to_route.name(name)
end
parent_keys = (matched_keys == ":id") ? ":#{singular}_id" : matched_keys
if block_given?
@@parent_resource.push(singular)
yield next_level.match("/#{parent_keys}")
@@parent_resource.pop
end
routes
end