From 04b1a0ea4aa9414ba20d519079cd140f5095ce3e Mon Sep 17 00:00:00 2001 From: Jose Galisteo Date: Mon, 8 Nov 2021 19:35:56 +0100 Subject: [PATCH 1/3] Fix scaffold controller generator with namespace For example: ``` bundle exec rails g scaffold_controller Admin::Post title:string content:text --model-name=Post ``` It fixes the code generated by jbuilder, other changes are required on railties gem. --- lib/generators/rails/templates/controller.rb | 4 ++-- test/scaffold_controller_generator_test.rb | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/generators/rails/templates/controller.rb b/lib/generators/rails/templates/controller.rb index c68338bc..13b79da9 100644 --- a/lib/generators/rails/templates/controller.rb +++ b/lib/generators/rails/templates/controller.rb @@ -30,7 +30,7 @@ def create respond_to do |format| if @<%= orm_instance.save %> - format.html { redirect_to @<%= singular_table_name %>, notice: <%= %("#{human_name} was successfully created.") %> } + format.html { redirect_to <%= show_helper %>, notice: <%= %("#{human_name} was successfully created.") %> } format.json { render :show, status: :created, location: <%= "@#{singular_table_name}" %> } else format.html { render :new, status: :unprocessable_entity } @@ -43,7 +43,7 @@ def create def update respond_to do |format| if @<%= orm_instance.update("#{singular_table_name}_params") %> - format.html { redirect_to @<%= singular_table_name %>, notice: <%= %("#{human_name} was successfully updated.") %> } + format.html { redirect_to <%= show_helper %>, notice: <%= %("#{human_name} was successfully updated.") %> } format.json { render :show, status: :ok, location: <%= "@#{singular_table_name}" %> } else format.html { render :edit, status: :unprocessable_entity } diff --git a/test/scaffold_controller_generator_test.rb b/test/scaffold_controller_generator_test.rb index 452ad842..6add68dd 100644 --- a/test/scaffold_controller_generator_test.rb +++ b/test/scaffold_controller_generator_test.rb @@ -31,14 +31,14 @@ class ScaffoldControllerGeneratorTest < Rails::Generators::TestCase assert_instance_method :create, content do |m| assert_match %r{@post = Post\.new\(post_params\)}, m assert_match %r{@post\.save}, m - assert_match %r{format\.html \{ redirect_to @post, notice: "Post was successfully created\." \}}, m + assert_match %r{format\.html \{ redirect_to post_url\(@post\), notice: "Post was successfully created\." \}}, m assert_match %r{format\.json \{ render :show, status: :created, location: @post \}}, m assert_match %r{format\.html \{ render :new, status: :unprocessable_entity \}}, m assert_match %r{format\.json \{ render json: @post\.errors, status: :unprocessable_entity \}}, m end assert_instance_method :update, content do |m| - assert_match %r{format\.html \{ redirect_to @post, notice: "Post was successfully updated\." \}}, m + assert_match %r{format\.html \{ redirect_to post_url\(@post\), notice: "Post was successfully updated\." \}}, m assert_match %r{format\.json \{ render :show, status: :ok, location: @post \}}, m assert_match %r{format\.html \{ render :edit, status: :unprocessable_entity \}}, m assert_match %r{format\.json \{ render json: @post.errors, status: :unprocessable_entity \}}, m From 1d387e01a34499ab4c6e80e8e77404cd7411333e Mon Sep 17 00:00:00 2001 From: Jose Galisteo Date: Mon, 8 Nov 2021 19:47:56 +0100 Subject: [PATCH 2/3] Specify main branch for rails-head --- Appraisals | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Appraisals b/Appraisals index cef201b0..cdbf059d 100644 --- a/Appraisals +++ b/Appraisals @@ -20,6 +20,6 @@ if RUBY_VERSION >= "2.5.0" end appraise "rails-head" do - gem "rails", github: "rails/rails" + gem "rails", github: "rails/rails", branch: "main" end end From 56d333be0ff347f9266f46b3d13fc40982d66dfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Galisteo?= Date: Mon, 8 Nov 2021 22:35:56 +0100 Subject: [PATCH 3/3] Add test for controller scaffold with namespace Only for Rails::VERSION::MAJOR >= 6 because the method `show_helper` doesn't handle well the namespaces on previous versions. --- test/scaffold_controller_generator_test.rb | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/test/scaffold_controller_generator_test.rb b/test/scaffold_controller_generator_test.rb index 6add68dd..288007e7 100644 --- a/test/scaffold_controller_generator_test.rb +++ b/test/scaffold_controller_generator_test.rb @@ -59,6 +59,25 @@ class ScaffoldControllerGeneratorTest < Rails::Generators::TestCase end end + if Rails::VERSION::MAJOR >= 6 + test 'controller with namespace' do + run_generator %w(Admin::Post --model-name=Post) + assert_file 'app/controllers/admin/posts_controller.rb' do |content| + assert_instance_method :create, content do |m| + assert_match %r{format\.html \{ redirect_to admin_post_url\(@post\), notice: "Post was successfully created\." \}}, m + end + + assert_instance_method :update, content do |m| + assert_match %r{format\.html \{ redirect_to admin_post_url\(@post\), notice: "Post was successfully updated\." \}}, m + end + + assert_instance_method :destroy, content do |m| + assert_match %r{format\.html \{ redirect_to admin_posts_url, notice: "Post was successfully destroyed\." \}}, m + end + end + end + end + test 'dont use require and permit if there are no attributes' do run_generator %w(Post)