aboutsummaryrefslogtreecommitdiffstats
path: root/railties/lib/rails
diff options
context:
space:
mode:
authorYves Senn <yves.senn@gmail.com>2013-08-14 02:14:54 -0700
committerYves Senn <yves.senn@gmail.com>2013-08-14 02:14:54 -0700
commit271d622a4ddc35c21bc8b853e4e2901a9ede43bd (patch)
tree06ae1f9b9f2883d8984fd073f8a26b20c8aa2790 /railties/lib/rails
parent77ba336080b4de15233f669bdeea5c9ac44a3941 (diff)
parent53c5794a4bb7a1bc8b3cbe9bae86c35de06c5088 (diff)
downloadrails-271d622a4ddc35c21bc8b853e4e2901a9ede43bd.tar.gz
rails-271d622a4ddc35c21bc8b853e4e2901a9ede43bd.tar.bz2
rails-271d622a4ddc35c21bc8b853e4e2901a9ede43bd.zip
Merge pull request #11544 from prathamesh-sonpatki/namespaced_routes_test
Generate namespaced routes correctly for generators. Fix for #11532
Diffstat (limited to 'railties/lib/rails')
-rw-r--r--railties/lib/rails/generators/rails/controller/controller_generator.rb36
1 files changed, 35 insertions, 1 deletions
diff --git a/railties/lib/rails/generators/rails/controller/controller_generator.rb b/railties/lib/rails/generators/rails/controller/controller_generator.rb
index bae54623c6..822f35fb42 100644
--- a/railties/lib/rails/generators/rails/controller/controller_generator.rb
+++ b/railties/lib/rails/generators/rails/controller/controller_generator.rb
@@ -10,11 +10,45 @@ module Rails
def add_routes
actions.reverse.each do |action|
- route %{get "#{file_name}/#{action}"}
+ route generate_routing_code(action)
end
end
hook_for :template_engine, :test_framework, :helper, :assets
+
+ private
+
+ # This method creates nested route entry for namespaced resources.
+ # For eg. rails g controller foo/bar/baz index
+ # Will generate -
+ # namespace :foo do
+ # namespace :bar do
+ # get "baz/index"
+ # end
+ # end
+ def generate_routing_code(action)
+ depth = class_path.length
+ # Create 'namespace' ladder
+ # namespace :foo do
+ # namespace :bar do
+ namespace_ladder = class_path.each_with_index.map do |ns, i|
+ %{#{" " * i * 2}namespace :#{ns} do\n }
+ end.join
+
+ # Create route
+ # get "baz/index"
+ route = %{#{" " * depth * 2}get "#{file_name}/#{action}"\n}
+
+ # Create `end` ladder
+ # end
+ # end
+ end_ladder = (1..depth).reverse_each.map do |i|
+ "#{" " * i * 2}end\n"
+ end.join
+
+ # Combine the 3 parts to generate complete route entry
+ namespace_ladder + route + end_ladder
+ end
end
end
end