Skip to content

Commit 085546d

Browse files
committed
Fix generator command for nested (namespaced) rails engine
If we create nested (namespaced) rails engine such like bukkits-admin, `bin/rails g scaffold User name:string age:integer` will create `bukkits-admin/app/controllers/bukkits/users_controller.rb` but it should create `bukkits-admin/app/controllers/bukkits/admin/users_controller.rb`. In rails#6643, we changed `namespaced_path` as root path because we supposed application_controller is always in root but nested rails engine's application_controller will not.
1 parent 33e6051 commit 085546d

File tree

9 files changed

+29
-9
lines changed

9 files changed

+29
-9
lines changed

actionmailer/lib/rails/generators/mailer/mailer_generator.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def file_name # :doc:
2626

2727
def application_mailer_file_name
2828
@_application_mailer_file_name ||= if mountable_engine?
29-
"app/mailers/#{namespaced_path}/application_mailer.rb"
29+
File.join("app/mailers", namespaced_path, "application_mailer.rb")
3030
else
3131
"app/mailers/application_mailer.rb"
3232
end

activejob/lib/rails/generators/job/job_generator.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ def create_job_file
2828
private
2929
def application_job_file_name
3030
@application_job_file_name ||= if mountable_engine?
31-
"app/jobs/#{namespaced_path}/application_job.rb"
31+
File.join("app/jobs", namespaced_path, "application_job.rb")
3232
else
3333
"app/jobs/application_job.rb"
3434
end

activerecord/lib/rails/generators/active_record/model/model_generator.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ def application_record_exist?
5959

6060
def application_record_file_name
6161
@application_record_file_name ||= if mountable_engine?
62-
"app/models/#{namespaced_path}/application_record.rb"
62+
File.join("app/models", namespaced_path, "application_record.rb")
6363
else
6464
"app/models/application_record.rb"
6565
end

railties/lib/rails/generators/named_base.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,11 +95,11 @@ def regular_class_path # :doc:
9595
end
9696

9797
def namespaced_class_path # :doc:
98-
@namespaced_class_path ||= [namespaced_path] + @class_path
98+
@namespaced_class_path ||= namespaced_path + @class_path
9999
end
100100

101101
def namespaced_path # :doc:
102-
@namespaced_path ||= namespace.name.split("::").first.underscore
102+
@namespaced_path ||= namespace.name.split("::").map(&:underscore)
103103
end
104104

105105
def class_name # :doc:

railties/lib/rails/generators/rails/controller/templates/controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<% if namespaced? -%>
2-
require_dependency "<%= namespaced_path %>/application_controller"
2+
require_dependency "<%= File.join(namespaced_path) %>/application_controller"
33
44
<% end -%>
55
<% module_namespacing do -%>

railties/lib/rails/generators/rails/scaffold_controller/templates/api_controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<% if namespaced? -%>
2-
require_dependency "<%= namespaced_path %>/application_controller"
2+
require_dependency "<%= File.join(namespaced_path) %>/application_controller"
33
44
<% end -%>
55
<% module_namespacing do -%>

railties/lib/rails/generators/rails/scaffold_controller/templates/controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<% if namespaced? -%>
2-
require_dependency "<%= namespaced_path %>/application_controller"
2+
require_dependency "<%= File.join(namespaced_path) %>/application_controller"
33
44
<% end -%>
55
<% module_namespacing do -%>

railties/lib/rails/generators/test_unit/scaffold/scaffold_generator.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def create_test_files
2222
def fixture_name
2323
@fixture_name ||=
2424
if mountable_engine?
25-
"%s_%s" % [namespaced_path, table_name]
25+
"%s_%s" % [namespaced_path.join("_"), table_name]
2626
else
2727
table_name
2828
end

railties/test/generators/scaffold_generator_test.rb

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -492,6 +492,26 @@ def test_scaffold_tests_pass_by_default_inside_mountable_engine
492492
end
493493
end
494494

495+
def test_scaffold_tests_pass_by_default_inside_namespaced_mountable_engine
496+
Dir.chdir(destination_root) { `bundle exec rails plugin new bukkits-admin --mountable` }
497+
498+
engine_path = File.join(destination_root, "bukkits-admin")
499+
500+
Dir.chdir(engine_path) do
501+
quietly do
502+
`bin/rails g scaffold User name:string age:integer;
503+
bin/rails db:migrate`
504+
end
505+
506+
assert_file "bukkits-admin/app/controllers/bukkits/admin/users_controller.rb" do |content|
507+
assert_match(/module Bukkits::Admin/, content)
508+
assert_match(/class UsersController < ApplicationController/, content)
509+
end
510+
511+
assert_match(/8 runs, 10 assertions, 0 failures, 0 errors/, `bin/rails test 2>&1`)
512+
end
513+
end
514+
495515
def test_scaffold_tests_pass_by_default_inside_full_engine
496516
Dir.chdir(destination_root) { `bundle exec rails plugin new bukkits --full` }
497517

0 commit comments

Comments
 (0)