Class: Ruact::Generators::InstallGenerator
- Inherits:
-
Rails::Generators::Base
- Object
- Rails::Generators::Base
- Ruact::Generators::InstallGenerator
- Defined in:
- lib/generators/ruact/install/install_generator.rb
Overview
Installs ruact into the current Rails application.
Performs the following actions:
-
Creates config/initializers/ruact.rb
-
Injects ‘include Ruact::Controller` into ApplicationController
-
Injects the React root div into app/views/layouts/application.html.erb
-
Creates app/javascript/components/.keep
-
Creates vite.config.js (or shows manual instructions if one exists)
-
Creates app/javascript/application.jsx (or skips if one exists)
Run: rails generate ruact:install
Instance Method Summary collapse
- #create_components_directory ⇒ Object
- #create_initializer ⇒ Object
- #create_javascript_entry ⇒ Object
- #create_vite_config ⇒ Object
- #inject_controller_concern ⇒ Object
- #inject_layout_shell ⇒ Object
- #show_post_install_message ⇒ Object
Instance Method Details
#create_components_directory ⇒ Object
58 59 60 61 62 |
# File 'lib/generators/ruact/install/install_generator.rb', line 58 def create_components_directory empty_directory "app/javascript/components" create_file "app/javascript/components/.keep" unless File.exist?(destination_root.join("app/javascript/components/.keep")) end |
#create_initializer ⇒ Object
24 25 26 |
# File 'lib/generators/ruact/install/install_generator.rb', line 24 def create_initializer template "initializer.rb.tt", "config/initializers/ruact.rb" end |
#create_javascript_entry ⇒ Object
79 80 81 |
# File 'lib/generators/ruact/install/install_generator.rb', line 79 def create_javascript_entry template "application.jsx.tt", "app/javascript/application.jsx" end |
#create_vite_config ⇒ Object
64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/generators/ruact/install/install_generator.rb', line 64 def create_vite_config vite_config_file = destination_root.join("vite.config.js") if vite_config_file.exist? say_status "notice", "vite.config.js already exists — add the plugin manually:", :yellow say " 1. At the top of vite.config.js, add:" say " import ruact from '#{Ruact.vite_plugin_path}';" say " 2. In the plugins array, add: ruact()" say "" say " Re-run `rails generate ruact:install --force` to overwrite vite.config.js." else template "vite.config.js.tt", "vite.config.js" end end |
#inject_controller_concern ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/generators/ruact/install/install_generator.rb', line 28 def inject_controller_concern controller_file = "app/controllers/application_controller.rb" return unless File.exist?(destination_root.join(controller_file)) content = File.read(destination_root.join(controller_file)) if content.include?("Ruact::Controller") say_status "skip", "Ruact::Controller already included in ApplicationController", :yellow return end inject_into_file controller_file, "\n include Ruact::Controller\n", after: /class ApplicationController.*\n/ end |
#inject_layout_shell ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/generators/ruact/install/install_generator.rb', line 43 def inject_layout_shell layout_file = "app/views/layouts/application.html.erb" return unless File.exist?(destination_root.join(layout_file)) content = File.read(destination_root.join(layout_file)) if content.include?("ruact: root") say_status "skip", "Rails RSC root already present in layout", :yellow return end inject_into_file layout_file, "\n <%# ruact: root %>\n <div id=\"root\"></div>\n", before: " </body>" end |
#show_post_install_message ⇒ Object
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/generators/ruact/install/install_generator.rb', line 83 def say "" say "=" * 60 say " ruact installed successfully!" say "=" * 60 say "" say "Next steps:" say " 1. Start the Vite dev server: npm run dev" say " 2. Start Rails: rails server" say " 3. Add <MyComponent /> to any ERB view" say "" say "Note: Re-run this generator after updating the ruact gem" say "to refresh the bundled Vite plugin path in vite.config.js." say "" end |