lib/generators/react/install_generator.rb in react-rails-2.7.1 vs lib/generators/react/install_generator.rb in react-rails-3.0.0.rc.0
- old
+ new
@@ -1,142 +1,120 @@
+# frozen_string_literal: true
+
module React
module Generators
class InstallGenerator < ::Rails::Generators::Base
- source_root File.expand_path '../../templates', __FILE__
+ source_root File.expand_path "../templates", __dir__
- desc 'Create default react.js folder layout and prep application.js'
+ desc "Create default react.js folder layout and prep application.js"
class_option :skip_git,
- type: :boolean,
- aliases: '-g',
- default: false,
- desc: 'Skip Git keeps'
+ type: :boolean,
+ aliases: "-g",
+ default: false,
+ desc: "Skip Git keeps"
class_option :skip_server_rendering,
- type: :boolean,
- default: false,
- desc: "Don't generate server_rendering.js or config/initializers/react_server_rendering.rb"
+ type: :boolean,
+ default: false,
+ desc: "Don't generate server_rendering.js or config/initializers/react_server_rendering.rb"
- # For Shakapacker below version 7, we need to set relative path for source_entry_path
- def modify_webpacker_yml
- webpacker_yml_path = 'config/webpacker.yml'
- if webpacker? && Pathname.new(webpacker_yml_path).exist?
- gsub_file(
- webpacker_yml_path,
- "source_entry_path: /\n",
- "source_entry_path: packs\n"
- )
- reloaded_webpacker_config
- end
- end
-
# Make an empty `components/` directory in the right place:
def create_directory
- components_dir = if webpacker?
- Pathname.new(javascript_dir).parent.to_s
- else
- javascript_dir
- end
- empty_directory File.join(components_dir, 'components')
- unless options[:skip_git]
- create_file File.join(components_dir, 'components/.keep')
- end
+ components_dir = if shakapacker?
+ Pathname.new(javascript_dir).parent.to_s
+ else
+ javascript_dir
+ end
+ empty_directory File.join(components_dir, "components")
+ return if options[:skip_git]
+
+ create_file File.join(components_dir, "components/.keep")
end
# Add requires, setup UJS
def setup_react
- if webpacker?
- setup_react_webpacker
+ if shakapacker?
+ setup_react_shakapacker
else
setup_react_sprockets
end
end
def create_server_rendering
if options[:skip_server_rendering]
- return
- elsif webpacker?
- ssr_manifest_path = File.join(javascript_dir, 'server_rendering.js')
- template('server_rendering_pack.js', ssr_manifest_path)
+ nil
+ elsif shakapacker?
+ ssr_manifest_path = File.join(javascript_dir, "server_rendering.js")
+ template("server_rendering_pack.js", ssr_manifest_path)
else
- ssr_manifest_path = File.join(javascript_dir, 'server_rendering.js')
- template('server_rendering.js', ssr_manifest_path)
- initializer_path = 'config/initializers/react_server_rendering.rb'
- template('react_server_rendering.rb', initializer_path)
+ ssr_manifest_path = File.join(javascript_dir, "server_rendering.js")
+ template("server_rendering.js", ssr_manifest_path)
+ initializer_path = "config/initializers/react_server_rendering.rb"
+ template("react_server_rendering.rb", initializer_path)
end
end
private
- def webpacker?
- !!defined?(Webpacker)
+ def shakapacker?
+ !!defined?(Shakapacker)
end
def javascript_dir
- if webpacker?
- webpack_source_path
+ if shakapacker?
+ shakapacker_source_path
.relative_path_from(::Rails.root)
.to_s
else
- 'app/assets/javascripts'
+ "app/assets/javascripts"
end
end
def manifest
- Pathname.new(destination_root).join(javascript_dir, 'application.js')
+ Pathname.new(destination_root).join(javascript_dir, "application.js")
end
def setup_react_sprockets
require_react = "//= require react\n//= require react_ujs\n//= require components\n"
if manifest.exist?
manifest_contents = File.read(manifest)
- if match = manifest_contents.match(/\/\/=\s+require\s+turbolinks\s+\n/)
+ if (match = manifest_contents.match(%r{//=\s+require\s+turbolinks\s+\n}))
inject_into_file manifest, require_react, { after: match[0] }
- elsif match = manifest_contents.match(/\/\/=\s+require_tree[^\n]*/)
+ elsif (match = manifest_contents.match(%r{//=\s+require_tree[^\n]*}))
inject_into_file manifest, require_react, { before: match[0] }
else
append_file manifest, require_react
end
else
create_file manifest, require_react
end
components_js = "//= require_tree ./components\n"
- components_file = File.join(javascript_dir, 'components.js')
+ components_file = File.join(javascript_dir, "components.js")
create_file components_file, components_js
end
- WEBPACKER_SETUP_UJS = <<-JS
-// Support component names relative to this directory:
-var componentRequireContext = require.context("components", true);
-var ReactRailsUJS = require("react_ujs");
-ReactRailsUJS.useContext(componentRequireContext);
-JS
+ SHAKAPACKER_SETUP_UJS = <<~JS
+ // Support component names relative to this directory:
+ var componentRequireContext = require.context("components", true);
+ var ReactRailsUJS = require("react_ujs");
+ ReactRailsUJS.useContext(componentRequireContext);
+ JS
- def setup_react_webpacker
+ def setup_react_shakapacker
`yarn add react_ujs`
if manifest.exist?
- append_file(manifest, WEBPACKER_SETUP_UJS)
+ append_file(manifest, SHAKAPACKER_SETUP_UJS)
else
- create_file(manifest, WEBPACKER_SETUP_UJS)
+ create_file(manifest, SHAKAPACKER_SETUP_UJS)
end
end
- private
-
- def webpack_source_path
- if Webpacker.respond_to?(:config)
- Webpacker.config.source_entry_path # Webpacker >3
- else
- Webpacker::Configuration.source_path.join(Webpacker::Configuration.entry_path) # Webpacker <3
- end
- end
-
- def reloaded_webpacker_config
- Webpacker.instance.instance_variable_set(:@config, nil)
- Webpacker.config
+ def shakapacker_source_path
+ Shakapacker.config.source_entry_path
end
end
end
end