Class: JSAdmin::Generators::InstallGenerator

Inherits:
Rails::Generators::Base
  • Object
show all
Defined in:
lib/generators/js_admin/install/install_generator.rb

Constant Summary collapse

IMPORTMAP_PINS =
{
  "@hotwired/turbo-rails" => 'pin "@hotwired/turbo-rails", to: "turbo.min.js"',
  "@hotwired/stimulus" => 'pin "@hotwired/stimulus", to: "stimulus.min.js"',
  "js_admin" => 'pin "js_admin", to: "js_admin/application.js", preload: true',
  "js_admin/controllers/theme_controller" => 'pin "js_admin/controllers/theme_controller", to: "js_admin/controllers/theme_controller.js", preload: true',
  "js_admin/controllers/flash_controller" => 'pin "js_admin/controllers/flash_controller", to: "js_admin/controllers/flash_controller.js", preload: true'
}.freeze

Instance Method Summary collapse

Instance Method Details

#create_initializerObject



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/generators/js_admin/install/install_generator.rb', line 25

def create_initializer
  create_file "config/initializers/js_admin.rb", <<~RUBY
    JSAdmin.configure do |config|
      # Limit visible models. When empty, JSAdmin exposes every concrete Active Record model.
      # config.include_models User, Post
      # config.exclude_models AuditLog

      # UI pagination and association select limits.
      # config.records_per_page = 10
      # config.association_limit = 100

      # Methods tried in order when displaying records in labels and associations.
      # config.display_name_methods = %i[name title email username id]

      # Basic Auth is disabled unless both username and password are present.
      # config.basic_auth_username = ENV["JS_ADMIN_BASIC_AUTH_USERNAME"]
      # config.basic_auth_password = ENV["JS_ADMIN_BASIC_AUTH_PASSWORD"]
      # config.basic_auth_realm = "JSAdmin"
    end
  RUBY
end

#import_tailwind_engine_stylesObject



65
66
67
68
69
70
71
72
73
# File 'lib/generators/js_admin/install/install_generator.rb', line 65

def import_tailwind_engine_styles
  tailwind_entrypoint = application_path("app/assets/tailwind/application.css")
  return unless File.exist?(tailwind_entrypoint)

  import_line = '@import "../builds/tailwind/js_admin";'
  return if File.read(tailwind_entrypoint).include?(import_line)

  append_to_file tailwind_entrypoint, "\n#{import_line}\n"
end

#mount_engineObject



21
22
23
# File 'lib/generators/js_admin/install/install_generator.rb', line 21

def mount_engine
  route %(mount JSAdmin::Engine => "#{options[:path]}")
end

#pin_importmap_modulesObject



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/generators/js_admin/install/install_generator.rb', line 47

def pin_importmap_modules
  importmap_path = application_path("config/importmap.rb")

  unless File.exist?(importmap_path)
    say_status :warning, "config/importmap.rb was not found. Run bin/rails importmap:install, then rerun js_admin:install.", :yellow
    return
  end

  importmap = File.read(importmap_path)
  missing_pins = IMPORTMAP_PINS.filter_map do |name, line|
    line unless importmap.match?(/^\s*pin\s+["']#{Regexp.escape(name)}["']/)
  end

  return if missing_pins.empty?

  append_to_file importmap_path, "\n#{missing_pins.join("\n")}\n"
end