Skip to content

Commit 48941d7

Browse files
committed
feat(ServerRendering) generate an initializer to precompile the manifest; support --skip-server-rendering
1 parent 6495458 commit 48941d7

File tree

3 files changed

+28
-3
lines changed

3 files changed

+28
-3
lines changed

lib/generators/react/install_generator.rb

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,16 @@ class InstallGenerator < ::Rails::Generators::Base
1111
default: false,
1212
desc: 'Skip Git keeps'
1313

14+
class_option :skip_server_rendering,
15+
type: :boolean,
16+
default: false,
17+
desc: "Don't generate server_rendering.js or config/initializers/react_server_rendering.rb"
18+
1419
def create_directory
1520
empty_directory 'app/assets/javascripts/components'
16-
create_file 'app/assets/javascripts/components/.gitkeep' unless options[:skip_git]
21+
if !options[:skip_git]
22+
create_file 'app/assets/javascripts/components/.gitkeep'
23+
end
1724
end
1825

1926
def inject_react
@@ -49,8 +56,11 @@ def create_components
4956
end
5057

5158
def create_server_rendering
52-
file_path = 'app/assets/javascripts/server_rendering.js'
53-
template("server_rendering.js", file_path)
59+
return if options[:skip_server_rendering]
60+
manifest_path = "app/assets/javascripts/server_rendering.js"
61+
template("server_rendering.js", manifest_path)
62+
initializer_path = "config/initializers/react_server_rendering.rb"
63+
template("react_server_rendering.rb", initializer_path)
5464
end
5565

5666
private
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# To render React components in production, precompile the server rendering manifest:
2+
Rails.application.config.assets.precompile += ["server_rendering.js"]

test/generators/install_generator_test.rb

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
class InstallGeneratorTest < Rails::Generators::TestCase
55
destination File.join(Rails.root, 'tmp', 'generator_test_output')
66
tests React::Generators::InstallGenerator
7+
setup :prepare_destination
78

89
def copy_directory(dir)
910
source = Rails.root.join(dir)
@@ -71,6 +72,18 @@ def copy_directory(dir)
7172
assert_file server_rendering_file_path, %r{//= require ./components\n}
7273
end
7374

75+
test "creates server rendering initializer" do
76+
run_generator
77+
initializer_path = "config/initializers/react_server_rendering.rb"
78+
assert_file(initializer_path, %r{Rails.application.config.assets.precompile \+= \["server_rendering.js"\]})
79+
end
80+
81+
test "skipping server rendering" do
82+
run_generator %w(--skip-server-rendering)
83+
assert_no_file "config/initializers/react_server_rendering.rb"
84+
assert_no_file "app/assets/javascripts/server_rendering.js"
85+
end
86+
7487
def init_application_js(content)
7588
FileUtils.mkdir_p destination_root + '/app/assets/javascripts/'
7689
File.write destination_root + '/app/assets/javascripts/application.js', content

0 commit comments

Comments
 (0)