Class: RailsNexus::Generators::CustomizeGenerator

Inherits:
Rails::Generators::Base
  • Object
show all
Defined in:
lib/generators/rails_nexus/customize_generator.rb

Instance Method Summary collapse

Instance Method Details

#display_post_installObject



128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
# File 'lib/generators/rails_nexus/customize_generator.rb', line 128

def display_post_install
  return unless generate_all?

  say ""
  say "RailsNexus customization files generated!", :green
  say ""
  say "Generated files:"
  say "  - app/views/layouts/rails_nexus/application.html.erb (host-app layout)"
  say "  - app/views/rails_nexus/logged_exceptions/index.html.erb"
  say "  - app/views/rails_nexus/logged_exceptions/_exceptions.html.erb"
  say "  - app/views/rails_nexus/logged_exceptions/_show.html.erb"
  say "  - app/javascript/rails_nexus/controllers/rails_nexus_controller.js"
  say "  - app/javascript/rails_nexus/controllers/rails_nexus_detail_controller.js"
  say "  - app/javascript/rails_nexus/controllers/rails_nexus_theme_controller.js"
  say "  - app/javascript/rails_nexus/controllers/rails_nexus_sidebar_controller.js"
  say ""
  say "Next steps:"
  say "  1. Edit the layout to match your host app's navigation"
  say "  2. If using Tailwind, add to your CSS source paths:"
  say '     @source "path/to/rails_nexus/app/views/**/*.erb";'
  say ""
end

#generate_initializer_patchesObject



99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# File 'lib/generators/rails_nexus/customize_generator.rb', line 99

def generate_initializer_patches
  return unless generate_all? || options[:initializer_only]

  append_to_file "config/initializers/rails_nexus.rb" do
    "\n# --- RailsNexus Customize Generator Patches ---\n" \
    "\n" \
    "# Make host app helpers available in rails_nexus views.\n" \
    "# Uncomment the helpers your app defines:\n" \
    "# RailsNexus::LoggedExceptionsController.helper HeroiconHelper\n" \
    "# RailsNexus::LoggedExceptionsController.helper ApplicationHelper\n" \
    "\n" \
    "# Fix for Rails 8.1+: params_filters must return plain hashes.\n" \
    "# This is applied automatically by the gem (v0.5.1+).\n" \
    "# Uncomment below if needed:\n" \
    "# RailsNexus::LoggedExceptionsController.class_eval do\n" \
    "#   private\n" \
    "#   def params_filters\n" \
    "#     result = {}\n" \
    "#     result[:q] = params[:q].to_unsafe_h if params[:q].present?\n" \
    "#     result[:query] = params[:query] if params[:query].present?\n" \
    "#     result[:date_ranges_filter] = params[:date_ranges_filter] if params[:date_ranges_filter].present?\n" \
    "#     result[:exception_names_filter] = params[:exception_names_filter] if params[:exception_names_filter].present?\n" \
    "#     result[:controller_actions_filter] = params[:controller_actions_filter] if params[:controller_actions_filter].present?\n" \
    "#     result\n" \
    "#   end\n" \
    "# end\n"
  end
end

#generate_layoutObject



30
31
32
33
34
35
# File 'lib/generators/rails_nexus/customize_generator.rb', line 30

def generate_layout
  return unless generate_all? || options[:layout_only]

  template "views/layouts/rails_nexus/application.html.erb",
           "app/views/layouts/rails_nexus/application.html.erb"
end

#generate_stimulusObject



50
51
52
53
54
55
56
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
# File 'lib/generators/rails_nexus/customize_generator.rb', line 50

def generate_stimulus
  return unless generate_all? || options[:stimulus_only]

  target_dir = "app/javascript/rails_nexus/controllers"

  template "javascript/controllers/rails_nexus_controller.js",
           "#{target_dir}/rails_nexus_controller.js"
  template "javascript/controllers/rails_nexus_detail_controller.js",
           "#{target_dir}/rails_nexus_detail_controller.js"
  template "javascript/controllers/rails_nexus_theme_controller.js",
           "#{target_dir}/rails_nexus_theme_controller.js"
  template "javascript/controllers/rails_nexus_sidebar_controller.js",
           "#{target_dir}/rails_nexus_sidebar_controller.js"

  # Create a standalone manifest under rails_nexus/ so it works
  # with both esbuild (jsbundling) and importmap.
  # This avoids conflict with stimulus:manifest:update which
  # only scans app/javascript/controllers/.
  create_file "app/javascript/rails_nexus/index.js" do
    <<~JS
      import { application } from "../controllers/application"

      import RailsNexusController from "./controllers/rails_nexus_controller"
      application.register("rails_nexus", RailsNexusController)

      import RailsNexusDetailController from "./controllers/rails_nexus_detail_controller"
      application.register("rails_nexus-detail", RailsNexusDetailController)

      import RailsNexusThemeController from "./controllers/rails_nexus_theme_controller"
      application.register("rails_nexus-theme", RailsNexusThemeController)

      import RailsNexusSidebarController from "./controllers/rails_nexus_sidebar_controller"
      application.register("rails_nexus-sidebar", RailsNexusSidebarController)
    JS
  end

  # Inject import into application.js if not already present
  app_js = "app/javascript/application.js"
  if File.exist?(app_js)
    content = File.read(app_js)
    unless content.include?("rails_nexus")
      inject_into_file app_js,
        'import "./rails_nexus"
',
        after: /import.*controllers.*\n/
    end
  end
end

#generate_viewsObject



37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/generators/rails_nexus/customize_generator.rb', line 37

def generate_views
  return unless generate_all? || options[:views_only]

  template "views/rails_nexus/logged_exceptions/index.html.erb",
           "app/views/rails_nexus/logged_exceptions/index.html.erb"

  template "views/rails_nexus/logged_exceptions/_exceptions.html.erb",
           "app/views/rails_nexus/logged_exceptions/_exceptions.html.erb"

  template "views/rails_nexus/logged_exceptions/_show.html.erb",
           "app/views/rails_nexus/logged_exceptions/_show.html.erb"
end