Skip to content

Commit 85c2c4a

Browse files
committed
fix: allow applications to override templates
Note that developers can override by placing templates in either: - lib/templates/tailwindcss/{scaffold,mailer,controller} - lib/templates/erb/{scaffold,mailer,controller}
1 parent 8f0cd50 commit 85c2c4a

File tree

7 files changed

+87
-4
lines changed

7 files changed

+87
-4
lines changed

Diff for: CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
* Update to [Tailwind CSS v3.4.1](https://github.com/tailwindlabs/tailwindcss/releases/tag/v3.4.1) from v3.4.0 by @flavorjones
44
* Fix `password` form field styling in generated scaffold forms. (#304, #307) @flavorjones
55
* Fix namespaced mailer generation. (#272, #308) @flavorjones
6+
* Allow overriding the generator templates by placing application templates in either `lib/templates/tailwindcss/{scaffold,mailer,controller}` or `lib/templates/erb/{scaffold,mailer,controller}`. (#164, #314) @flavorjones
67

78

89
## v2.2.0 / 2023-01-04

Diff for: lib/generators/tailwindcss/controller/controller_generator.rb

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ module Tailwindcss
44
module Generators
55
class ControllerGenerator < Erb::Generators::ControllerGenerator
66
source_root File.expand_path("templates", __dir__)
7+
source_paths << "lib/templates/erb/controller"
78
end
89
end
910
end

Diff for: lib/generators/tailwindcss/mailer/mailer_generator.rb

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ module Tailwindcss
44
module Generators
55
class MailerGenerator < Erb::Generators::MailerGenerator
66
source_root File.expand_path("templates", __dir__)
7+
source_paths << "lib/templates/erb/mailer"
78
end
89
end
910
end

Diff for: lib/generators/tailwindcss/scaffold/scaffold_generator.rb

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ class ScaffoldGenerator < Erb::Generators::ScaffoldGenerator
77
include Rails::Generators::ResourceHelpers
88

99
source_root File.expand_path("templates", __dir__)
10+
source_paths << "lib/templates/erb/scaffold"
1011

1112
argument :attributes, type: :array, default: [], banner: "field:type field:type"
1213

Diff for: test/lib/generators/tailwindcss/controller_generator_test.rb

+34-3
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,39 @@ class Tailwindcss::Generators::ControllerGeneratorTest < Rails::Generators::Test
99

1010
test "generates correct view templates" do
1111
run_generator
12-
assert_file "app/views/messages/index.html.erb"
13-
assert_file "app/views/messages/show.html.erb"
12+
13+
["index", "show"].each do |view|
14+
assert_file "app/views/messages/#{view}.html.erb"
15+
end
16+
end
17+
18+
test "generates correct view templates when namespaced" do
19+
run_generator ["admin/messages", "index", "show"]
20+
21+
["index", "show"].each do |view|
22+
assert_file "app/views/admin/messages/#{view}.html.erb"
23+
end
1424
end
15-
end
1625

26+
[
27+
"lib/templates/erb/controller",
28+
"lib/templates/tailwindcss/controller",
29+
].each do |templates_path|
30+
test "overriding generator templates in #{templates_path}" do
31+
override_dir = File.join(destination_root, templates_path)
32+
FileUtils.mkdir_p override_dir
33+
File.open(File.join(override_dir, "view.html.erb"), "w") { |f| f.puts "This is a custom template" }
34+
35+
# change directory because the generator adds a relative path to source_paths
36+
Dir.chdir(destination_root) do
37+
run_generator
38+
end
39+
40+
["index", "show"].each do |view|
41+
assert_file "app/views/messages/#{view}.html.erb" do |body|
42+
assert_match("This is a custom template", body, "index custom template should be used")
43+
end
44+
end
45+
end
46+
end
47+
end

Diff for: test/lib/generators/tailwindcss/mailer_generator_test.rb

+25-1
Original file line numberDiff line numberDiff line change
@@ -51,5 +51,29 @@ class Tailwindcss::Generators::MailerGeneratorTest < Rails::Generators::TestCase
5151
assert_match("<%= yield %>", view)
5252
end
5353
end
54-
end
5554

55+
[
56+
"lib/templates/erb/mailer",
57+
"lib/templates/tailwindcss/mailer",
58+
].each do |templates_path|
59+
test "overriding generator templates in #{templates_path}" do
60+
override_dir = File.join(destination_root, templates_path)
61+
FileUtils.mkdir_p override_dir
62+
File.open(File.join(override_dir, "view.html.erb"), "w") { |f| f.puts "This is a custom template" }
63+
File.open(File.join(override_dir, "layout.html.erb"), "w") { |f| f.puts "This is a custom layout" }
64+
65+
# change directory because the generator adds a relative path to source_paths
66+
Dir.chdir(destination_root) do
67+
run_generator
68+
end
69+
70+
assert_file "app/views/notifications_mailer/invoice.html.erb" do |view|
71+
assert_match("This is a custom template", view)
72+
end
73+
74+
assert_file "app/views/layouts/mailer.html.erb" do |view|
75+
assert_match("This is a custom layout", view)
76+
end
77+
end
78+
end
79+
end

Diff for: test/lib/generators/tailwindcss/scaffold_generator_test.rb

+24
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,28 @@ class Tailwindcss::Generators::ScaffoldGeneratorTest < Rails::Generators::TestCa
2222
assert_file "app/views/admin/roles/#{view}.html.erb"
2323
end
2424
end
25+
26+
[
27+
"lib/templates/tailwindcss/scaffold",
28+
"lib/templates/erb/scaffold",
29+
].each do |templates_path|
30+
test "overriding generator templates in #{templates_path}" do
31+
override_dir = File.join(destination_root, templates_path)
32+
FileUtils.mkdir_p override_dir
33+
File.open(File.join(override_dir, "index.html.erb"), "w") { |f| f.puts "This is a custom template" }
34+
35+
# change directory because the generator adds a relative path to source_paths
36+
Dir.chdir(destination_root) do
37+
run_generator
38+
end
39+
40+
%w(edit new show _form _message).each do |view|
41+
assert_file "app/views/messages/#{view}.html.erb"
42+
end
43+
44+
assert_file "app/views/messages/index.html.erb" do |body|
45+
assert_match("This is a custom template", body, "index custom template should be used")
46+
end
47+
end
48+
end
2549
end

0 commit comments

Comments
 (0)