Class: Phlex::Reactive::Generators::InstallGenerator
- Inherits:
-
Rails::Generators::Base
- Object
- Rails::Generators::Base
- Phlex::Reactive::Generators::InstallGenerator
- Defined in:
- lib/generators/phlex/reactive/install/install_generator.rb
Overview
‘rails g phlex:reactive:install`
One-command setup for phlex-reactive:
* registers the generic `reactive` Stimulus controller (eagerly)
* writes a config initializer with the common options commented out
The action endpoint and client auto-pin are provided by the engine, so this generator only wires the bits that live in the host app.
Constant Summary collapse
- IMPORT_LINE =
'import ReactiveController from "phlex/reactive/reactive_controller"'- REGISTER_LINE =
'application.register("reactive", ReactiveController)'
Instance Method Summary collapse
- #create_initializer ⇒ Object
-
#register_stimulus_controller ⇒ Object
Register the controller eagerly in the Stimulus entrypoint.
- #show_post_install ⇒ Object
Instance Method Details
#create_initializer ⇒ Object
22 23 24 |
# File 'lib/generators/phlex/reactive/install/install_generator.rb', line 22 def create_initializer template "phlex_reactive.rb.erb", "config/initializers/phlex_reactive.rb" end |
#register_stimulus_controller ⇒ Object
Register the controller eagerly in the Stimulus entrypoint. Eager (not lazy) so a click immediately after page load is never missed.
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/generators/phlex/reactive/install/install_generator.rb', line 28 def register_stimulus_controller index = stimulus_index_path unless index say_status :skip, "no Stimulus controllers entrypoint found — register manually:\n" \ " #{IMPORT_LINE}\n #{REGISTER_LINE}", :yellow return end if File.read(index).include?(REGISTER_LINE) say_status :identical, relative(index), :blue return end inject_into_file index, after: %r{import \{ application \} from ["']controllers/application["']\n} do "#{IMPORT_LINE}\n#{REGISTER_LINE}\n" end # Fallback: if the standard import line wasn't found, append both lines. unless File.read(index).include?(REGISTER_LINE) append_to_file index, "\n#{IMPORT_LINE}\n#{REGISTER_LINE}\n" end end |
#show_post_install ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/generators/phlex/reactive/install/install_generator.rb', line 52 def show_post_install say_status :info, "phlex-reactive installed. Include the mixins in a component:", :green say <<~MSG class Counter < ApplicationComponent include Phlex::Reactive::Streamable include Phlex::Reactive::Component # ... reactive_state / reactive_record, action :name, on(:name) ... end Scaffold one with: rails g phlex:reactive:component Counter MSG end |