diff options
author | Prathamesh Sonpatki <csonpatki@gmail.com> | 2013-07-21 20:36:35 +0530 |
---|---|---|
committer | Prathamesh Sonpatki <csonpatki@gmail.com> | 2013-08-14 08:53:38 +0530 |
commit | 53c5794a4bb7a1bc8b3cbe9bae86c35de06c5088 (patch) | |
tree | b7663dc0ca824ca3115b8156c9caef7a4bda2c57 /railties | |
parent | 4934f19a7812b08a369c775c724410057daeb151 (diff) | |
download | rails-53c5794a4bb7a1bc8b3cbe9bae86c35de06c5088.tar.gz rails-53c5794a4bb7a1bc8b3cbe9bae86c35de06c5088.tar.bz2 rails-53c5794a4bb7a1bc8b3cbe9bae86c35de06c5088.zip |
Generate namespaced routes correctly for generators. Fix for #11532
Diffstat (limited to 'railties')
-rw-r--r-- | railties/CHANGELOG.md | 18 | ||||
-rw-r--r-- | railties/lib/rails/generators/rails/controller/controller_generator.rb | 36 | ||||
-rw-r--r-- | railties/test/generators/controller_generator_test.rb | 5 |
3 files changed, 58 insertions, 1 deletions
diff --git a/railties/CHANGELOG.md b/railties/CHANGELOG.md index 7a89e5c219..2f41d92f55 100644 --- a/railties/CHANGELOG.md +++ b/railties/CHANGELOG.md @@ -1,3 +1,21 @@ +* Generate nested route for namespaced controller generated using + `rails g controller`. + Fixes #11532. + + Example: + + rails g controller admin/dashboard index + + # Before: + get "dashboard/index" + + # After: + namespace :admin do + get "dashboard/index" + end + + *Prathamesh Sonpatki* + * Fix the event name of action_dispatch requests. *Rafael Mendonça França* 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 diff --git a/railties/test/generators/controller_generator_test.rb b/railties/test/generators/controller_generator_test.rb index 5205deafd9..9c664a903a 100644 --- a/railties/test/generators/controller_generator_test.rb +++ b/railties/test/generators/controller_generator_test.rb @@ -82,4 +82,9 @@ class ControllerGeneratorTest < Rails::Generators::TestCase assert_instance_method :bar, controller end end + + def test_namespaced_routes_are_created_in_routes + run_generator ["admin/dashboard", "index"] + assert_file "config/routes.rb", /namespace :admin do\n\s+get "dashboard\/index"\n/ + end end |