Module: GeneratorMessages

Extended by:
CiSection, PackageManagerDetection, ShakapackerStatusSection
Defined in:
lib/generators/react_on_rails/generator_messages.rb,
lib/generators/react_on_rails/generator_messages/ci_section.rb,
lib/generators/react_on_rails/generator_messages/package_manager_detection.rb,
lib/generators/react_on_rails/generator_messages/shakapacker_status_section.rb

Defined Under Namespace

Modules: CiSection, PackageManagerDetection, ShakapackerStatusSection

Constant Summary collapse

PRO_UPGRADE_HINT =
"\n\n    💎 For RSC, streaming SSR, and 10-100x faster SSR, try React on Rails Pro:" \
"\n       #{Rainbow('https://reactonrails.com/docs/pro/upgrading-to-pro/').cyan.underline}".freeze
SUPPORTED_PACKAGE_MANAGERS =

Package manager constants and detection helpers live in PackageManagerDetection, re-exported here for backwards compatibility (external callers use ::SUPPORTED_PACKAGE_MANAGERS).

PackageManagerDetection::SUPPORTED_PACKAGE_MANAGERS

Constants included from PackageManagerDetection

PackageManagerDetection::LOCKFILE_CANDIDATES_BY_MANAGER

Class Method Summary collapse

Methods included from PackageManagerDetection

detect_package_manager, detect_package_manager_from_lockfiles, detect_package_manager_with_source, lockfile_filename_for, lockfile_for_manager?, package_manager_declared?, package_manager_executable_available?, read_package_json, supported_package_manager?

Class Method Details

.add_error(message) ⇒ Object



25
26
27
# File 'lib/generators/react_on_rails/generator_messages.rb', line 25

def add_error(message)
  output << format_error(message)
end

.add_info(message) ⇒ Object



33
34
35
# File 'lib/generators/react_on_rails/generator_messages.rb', line 33

def add_info(message)
  output << format_info(message)
end

.add_warning(message) ⇒ Object



29
30
31
# File 'lib/generators/react_on_rails/generator_messages.rb', line 29

def add_warning(message)
  output << format_warning(message)
end

.clearObject



53
54
55
# File 'lib/generators/react_on_rails/generator_messages.rb', line 53

def clear
  @output = []
end

.format_error(msg) ⇒ Object



41
42
43
# File 'lib/generators/react_on_rails/generator_messages.rb', line 41

def format_error(msg)
  Rainbow("ERROR: #{msg}").red
end

.format_info(msg) ⇒ Object



49
50
51
# File 'lib/generators/react_on_rails/generator_messages.rb', line 49

def format_info(msg)
  Rainbow(msg.to_s).green
end

.format_warning(msg) ⇒ Object



45
46
47
# File 'lib/generators/react_on_rails/generator_messages.rb', line 45

def format_warning(msg)
  Rainbow("WARNING: #{msg}").orange
end

.helpful_message_after_installation(component_name: "HelloWorld", route: "hello_world", pro: false, rsc: false, shakapacker_just_installed: false, landing_page: false, ci_workflow_generated: false, app_root: Dir.pwd) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/generators/react_on_rails/generator_messages.rb', line 57

def helpful_message_after_installation(component_name: "HelloWorld", route: "hello_world", pro: false,
                                       rsc: false, shakapacker_just_installed: false, landing_page: false,
                                       ci_workflow_generated: false, app_root: Dir.pwd)
  process_manager_section = build_process_manager_section
  testing_section = build_testing_section(app_root: app_root)
  ci_section = build_ci_section(app_root: app_root, ci_workflow_generated: ci_workflow_generated)
  package_manager = detect_package_manager(app_root: app_root)
  shakapacker_status = build_shakapacker_status_section(shakapacker_just_installed: shakapacker_just_installed,
                                                        app_root: app_root)
  render_example = build_render_example(component_name: component_name, route: route, rsc: rsc)
  render_label = build_render_label(route: route, rsc: rsc)
  normalized_route = route.to_s.sub(%r{\A/+}, "")
  visit_url = if landing_page || normalized_route.empty?
                "http://localhost:3000"
              else
                "http://localhost:3000/#{normalized_route}"
              end
  landing_page_hint = landing_page ? "\n       Home page includes links to the generated example pages." : ""
  # rsc guard is defensive; callers via install_generator already pass pro: true when rsc is set
  pro_hint = pro || rsc ? "" : PRO_UPGRADE_HINT

  <<~MSG

    ╔════════════════════════════════════════════════════════════════════════╗
    ║  🎉 React on Rails Successfully Installed!                             ║
    ╚════════════════════════════════════════════════════════════════════════╝
    #{process_manager_section}#{shakapacker_status}

    📋 QUICK START:
    ─────────────────────────────────────────────────────────────────────────
    1. Install dependencies:
       #{Rainbow("bundle && #{package_manager} install").cyan}

    2. Prepare database:
       #{Rainbow('bin/rails db:prepare').cyan}

    3. Start the app:
       ./bin/dev              # HMR (Hot Module Replacement) mode
       ./bin/dev static       # Static bundles (no HMR, faster initial load)
       ./bin/dev prod         # Production-like mode for testing
       ./bin/dev help         # See all available options

    4. Visit: #{Rainbow(visit_url).cyan.underline}#{landing_page_hint}
    ✨ KEY FEATURES:
    ─────────────────────────────────────────────────────────────────────────
    • Auto-registration enabled - Your layout only needs:
      <%= javascript_pack_tag %>
      <%= stylesheet_pack_tag %>

    #{render_label}
      #{render_example}

    📚 LEARN MORE:
    ─────────────────────────────────────────────────────────────────────────
    • Documentation: #{Rainbow('https://reactonrails.com/docs/').cyan.underline}
    • Webpack customization: #{Rainbow('https://github.com/shakacode/shakapacker#webpack-configuration').cyan.underline}

    💡 TIP: Run 'bin/dev help' for development server options and troubleshooting#{testing_section}#{ci_section}#{pro_hint}
  MSG
end

.messagesObject



37
38
39
# File 'lib/generators/react_on_rails/generator_messages.rb', line 37

def messages
  output
end

.outputObject



21
22
23
# File 'lib/generators/react_on_rails/generator_messages.rb', line 21

def output
  @output ||= []
end