Class: IronAdmin::Generators::InstallGenerator

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

Overview

Generator for installing IronAdmin into a Rails application.

This generator sets up the basic structure needed to use IronAdmin:

  • Creates the app/iron_admin directory for resource definitions
  • Adds an initializer with default configuration
  • Creates a sample dashboard
  • Mounts the engine at /admin in routes
  • Adds the Tailwind CSS import for engine styles

Examples:

Running the generator

rails generate iron_admin:install

See Also:

Constant Summary collapse

TAILWIND_CSS_CANDIDATES =

Candidate Tailwind entry points, in priority order. Covers tailwindcss-rails 4.x layout (app/assets/tailwind/application.css) and the tailwindcss-rails 3.x / cssbundling-rails layout (app/assets/stylesheets/application.tailwind.css).

%w[
  app/assets/tailwind/application.css
  app/assets/stylesheets/application.tailwind.css
].freeze

Instance Method Summary collapse

Instance Method Details

#add_routevoid

This method returns an undefined value.

Adds the engine mount to config/routes.rb.



43
44
45
# File 'lib/generators/iron_admin/install/install_generator.rb', line 43

def add_route
  route 'mount IronAdmin::Engine => "/admin"'
end

#add_tailwind_importvoid

This method returns an undefined value.

Adds the IronAdmin CSS import to the Tailwind application stylesheet.

This import is required so the Tailwind compiler scans the engine's views and components for CSS utility classes. Without it, the admin panel renders unstyled.

If no known Tailwind entry point is detected (e.g. the host added gem "iron_admin" after rails new --skip-bundle, before the tailwindcss installer ran), the generator emits a yellow skip status line with the exact @import directive the user needs to add manually — instead of returning silently and leaving the admin panel unstyled with no breadcrumb to the cause.



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/generators/iron_admin/install/install_generator.rb', line 70

def add_tailwind_import
  import_line = '@import "../builds/tailwind/iron_admin";'

  css_path = TAILWIND_CSS_CANDIDATES.find { |p| File.exist?(File.join(destination_root, p)) }

  unless css_path
    say_status :skip,
               "no Tailwind entry point found; add #{import_line} to your Tailwind " \
               "application file once it's created (typically " \
               "#{TAILWIND_CSS_CANDIDATES.first})",
               :yellow
    return
  end

  content = File.read(File.join(destination_root, css_path))
  return if content.include?(import_line)

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

#copy_dashboardvoid

This method returns an undefined value.

Copies the dashboard template.



37
38
39
# File 'lib/generators/iron_admin/install/install_generator.rb', line 37

def copy_dashboard
  template "dashboard.rb.tt", "app/iron_admin/dashboards/admin_dashboard.rb"
end

#copy_initializervoid

This method returns an undefined value.

Copies the initializer template with default configuration.



31
32
33
# File 'lib/generators/iron_admin/install/install_generator.rb', line 31

def copy_initializer
  template "initializer.rb.tt", "config/initializers/iron_admin.rb"
end

#create_iron_admin_directoriesvoid

This method returns an undefined value.

Creates the directory structure for resource and dashboard definitions.



24
25
26
27
# File 'lib/generators/iron_admin/install/install_generator.rb', line 24

def create_iron_admin_directories
  empty_directory "app/iron_admin/resources"
  empty_directory "app/iron_admin/dashboards"
end