mirror of https://github.com/rails/rails
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 #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.
This commit is contained in:
parent
33e60514ae
commit
085546df45
|
@ -26,7 +26,7 @@ module Rails
|
||||||
|
|
||||||
def application_mailer_file_name
|
def application_mailer_file_name
|
||||||
@_application_mailer_file_name ||= if mountable_engine?
|
@_application_mailer_file_name ||= if mountable_engine?
|
||||||
"app/mailers/#{namespaced_path}/application_mailer.rb"
|
File.join("app/mailers", namespaced_path, "application_mailer.rb")
|
||||||
else
|
else
|
||||||
"app/mailers/application_mailer.rb"
|
"app/mailers/application_mailer.rb"
|
||||||
end
|
end
|
||||||
|
|
|
@ -28,7 +28,7 @@ module Rails # :nodoc:
|
||||||
private
|
private
|
||||||
def application_job_file_name
|
def application_job_file_name
|
||||||
@application_job_file_name ||= if mountable_engine?
|
@application_job_file_name ||= if mountable_engine?
|
||||||
"app/jobs/#{namespaced_path}/application_job.rb"
|
File.join("app/jobs", namespaced_path, "application_job.rb")
|
||||||
else
|
else
|
||||||
"app/jobs/application_job.rb"
|
"app/jobs/application_job.rb"
|
||||||
end
|
end
|
||||||
|
|
|
@ -59,7 +59,7 @@ module ActiveRecord
|
||||||
|
|
||||||
def application_record_file_name
|
def application_record_file_name
|
||||||
@application_record_file_name ||= if mountable_engine?
|
@application_record_file_name ||= if mountable_engine?
|
||||||
"app/models/#{namespaced_path}/application_record.rb"
|
File.join("app/models", namespaced_path, "application_record.rb")
|
||||||
else
|
else
|
||||||
"app/models/application_record.rb"
|
"app/models/application_record.rb"
|
||||||
end
|
end
|
||||||
|
|
|
@ -95,11 +95,11 @@ module Rails
|
||||||
end
|
end
|
||||||
|
|
||||||
def namespaced_class_path # :doc:
|
def namespaced_class_path # :doc:
|
||||||
@namespaced_class_path ||= [namespaced_path] + @class_path
|
@namespaced_class_path ||= namespaced_path + @class_path
|
||||||
end
|
end
|
||||||
|
|
||||||
def namespaced_path # :doc:
|
def namespaced_path # :doc:
|
||||||
@namespaced_path ||= namespace.name.split("::").first.underscore
|
@namespaced_path ||= namespace.name.split("::").map(&:underscore)
|
||||||
end
|
end
|
||||||
|
|
||||||
def class_name # :doc:
|
def class_name # :doc:
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<% if namespaced? -%>
|
<% if namespaced? -%>
|
||||||
require_dependency "<%= namespaced_path %>/application_controller"
|
require_dependency "<%= File.join(namespaced_path) %>/application_controller"
|
||||||
|
|
||||||
<% end -%>
|
<% end -%>
|
||||||
<% module_namespacing do -%>
|
<% module_namespacing do -%>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<% if namespaced? -%>
|
<% if namespaced? -%>
|
||||||
require_dependency "<%= namespaced_path %>/application_controller"
|
require_dependency "<%= File.join(namespaced_path) %>/application_controller"
|
||||||
|
|
||||||
<% end -%>
|
<% end -%>
|
||||||
<% module_namespacing do -%>
|
<% module_namespacing do -%>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<% if namespaced? -%>
|
<% if namespaced? -%>
|
||||||
require_dependency "<%= namespaced_path %>/application_controller"
|
require_dependency "<%= File.join(namespaced_path) %>/application_controller"
|
||||||
|
|
||||||
<% end -%>
|
<% end -%>
|
||||||
<% module_namespacing do -%>
|
<% module_namespacing do -%>
|
||||||
|
|
|
@ -22,7 +22,7 @@ module TestUnit # :nodoc:
|
||||||
def fixture_name
|
def fixture_name
|
||||||
@fixture_name ||=
|
@fixture_name ||=
|
||||||
if mountable_engine?
|
if mountable_engine?
|
||||||
"%s_%s" % [namespaced_path, table_name]
|
"%s_%s" % [namespaced_path.join("_"), table_name]
|
||||||
else
|
else
|
||||||
table_name
|
table_name
|
||||||
end
|
end
|
||||||
|
|
|
@ -492,6 +492,26 @@ class ScaffoldGeneratorTest < Rails::Generators::TestCase
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_scaffold_tests_pass_by_default_inside_namespaced_mountable_engine
|
||||||
|
Dir.chdir(destination_root) { `bundle exec rails plugin new bukkits-admin --mountable` }
|
||||||
|
|
||||||
|
engine_path = File.join(destination_root, "bukkits-admin")
|
||||||
|
|
||||||
|
Dir.chdir(engine_path) do
|
||||||
|
quietly do
|
||||||
|
`bin/rails g scaffold User name:string age:integer;
|
||||||
|
bin/rails db:migrate`
|
||||||
|
end
|
||||||
|
|
||||||
|
assert_file "bukkits-admin/app/controllers/bukkits/admin/users_controller.rb" do |content|
|
||||||
|
assert_match(/module Bukkits::Admin/, content)
|
||||||
|
assert_match(/class UsersController < ApplicationController/, content)
|
||||||
|
end
|
||||||
|
|
||||||
|
assert_match(/8 runs, 10 assertions, 0 failures, 0 errors/, `bin/rails test 2>&1`)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def test_scaffold_tests_pass_by_default_inside_full_engine
|
def test_scaffold_tests_pass_by_default_inside_full_engine
|
||||||
Dir.chdir(destination_root) { `bundle exec rails plugin new bukkits --full` }
|
Dir.chdir(destination_root) { `bundle exec rails plugin new bukkits --full` }
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue