mirror of
https://github.com/github/rails.git
synced 2026-04-26 03:00:59 -04:00
When custom resource actions are specified using strings add the default name and action if the string is a valid ruby method name.
[#5431 state:resolved] Signed-off-by: José Valim <jose.valim@gmail.com>
This commit is contained in:
@@ -736,8 +736,12 @@ module ActionDispatch
|
||||
end
|
||||
elsif resource_method_scope?
|
||||
path = path_for_custom_action
|
||||
options[:action] ||= action
|
||||
options[:as] = name_for_action(options[:as]) if options[:as]
|
||||
if action =~ /^[a-zA-Z][_a-zA-Z0-9]*$/
|
||||
options[:action] ||= action
|
||||
options[:as] = name_for_action(action, options[:as])
|
||||
else
|
||||
options[:as] = name_for_action(options[:as]) if options[:as]
|
||||
end
|
||||
args.push(options)
|
||||
|
||||
with_exclusive_scope do
|
||||
|
||||
@@ -212,11 +212,15 @@ class TestRoutingMapper < ActionDispatch::IntegrationTest
|
||||
get "overdue", :to => :overdue, :on => :collection
|
||||
get "print" => "invoices#print", :as => :print, :on => :member
|
||||
post "preview" => "invoices#preview", :as => :preview, :on => :new
|
||||
get "aged/:months", :on => :collection, :action => :aged, :as => :aged
|
||||
end
|
||||
resources :notes, :shallow => true do
|
||||
get "preview" => "notes#preview", :as => :preview, :on => :new
|
||||
get "print" => "notes#print", :as => :print, :on => :member
|
||||
end
|
||||
get "inactive", :on => :collection
|
||||
post "deactivate", :on => :member
|
||||
get "old", :on => :collection, :as => :stale
|
||||
end
|
||||
|
||||
namespace :api do
|
||||
@@ -2034,6 +2038,24 @@ class TestRoutingMapper < ActionDispatch::IntegrationTest
|
||||
verify_redirect 'http://www.example.com/countries/all/cities'
|
||||
end
|
||||
|
||||
def test_custom_resource_actions_defined_using_string
|
||||
get '/customers/inactive'
|
||||
assert_equal 'customers#inactive', @response.body
|
||||
assert_equal '/customers/inactive', inactive_customers_path
|
||||
|
||||
post '/customers/1/deactivate'
|
||||
assert_equal 'customers#deactivate', @response.body
|
||||
assert_equal '/customers/1/deactivate', deactivate_customer_path(:id => '1')
|
||||
|
||||
get '/customers/old'
|
||||
assert_equal 'customers#old', @response.body
|
||||
assert_equal '/customers/old', stale_customers_path
|
||||
|
||||
get '/customers/1/invoices/aged/3'
|
||||
assert_equal 'invoices#aged', @response.body
|
||||
assert_equal '/customers/1/invoices/aged/3', aged_customer_invoices_path(:customer_id => '1', :months => '3')
|
||||
end
|
||||
|
||||
private
|
||||
def with_test_routes
|
||||
yield
|
||||
|
||||
Reference in New Issue
Block a user