Class: ActiveadminClaudeTheme::Generators::InstallGenerator

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

Constant Summary collapse

AA_TW_SRC =
"app/assets/tailwind/active_admin.css"
AA_TW_SRC_LEGACY =
"app/assets/stylesheets/active_admin.css"
TW_CONF =
"tailwind-active_admin.config.js"
PACKAGE_JSON =
"package.json"
FONTS_IMPORT =
<<~CSS
  @import url("https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&family=Source+Serif+4:opsz,wght@8..60,400;8..60,600&display=swap");
CSS

Instance Method Summary collapse

Instance Method Details

#add_view_content_sourceObject



59
60
61
62
63
64
65
66
67
68
# File 'lib/generators/activeadmin_claude_theme/install/install_generator.rb', line 59

def add_view_content_source
  return unless File.exist?(TW_CONF)
  return if File.read(TW_CONF).include?("activeadmin-claude-theme")

  snippet = <<~JS
        `${execSync('bundle show activeadmin-claude-theme', { encoding: 'utf-8' }).trim().split(/\\r?\\n/).pop()}/app/views/**/*.{erb,html,arb,rb}`,
  JS

  inject_into_file TW_CONF, snippet, after: "content: [\n"
end

#configure_build_scriptObject



48
49
50
51
52
53
54
55
56
57
# File 'lib/generators/activeadmin_claude_theme/install/install_generator.rb', line 48

def configure_build_script
  return unless File.exist?(PACKAGE_JSON)

  package = File.read(PACKAGE_JSON)
  return if package.include?("app/assets/tailwind/active_admin.css")

  gsub_file PACKAGE_JSON,
            "./app/assets/stylesheets/active_admin.css",
            "./app/assets/tailwind/active_admin.css"
end

#doneObject



83
84
85
86
87
# File 'lib/generators/activeadmin_claude_theme/install/install_generator.rb', line 83

def done
  say "Claude theme installed.", :green
  say "Rebuild CSS: npm run build:css", :green
  say "Restart your Rails server after rebuilding.", :green
end

#import_into_buildObject



35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/generators/activeadmin_claude_theme/install/install_generator.rb', line 35

def import_into_build
  return unless File.exist?(AA_TW_SRC)

  import_line = %(@import "./activeadmin_claude_theme.css";\n)
  return if File.read(AA_TW_SRC).include?("activeadmin_claude_theme.css")

  inject_into_file AA_TW_SRC, import_line, after: /@import "tailwindcss";\n/

  return if File.read(AA_TW_SRC).include?("fonts.googleapis.com")

  inject_into_file AA_TW_SRC, FONTS_IMPORT, before: /@import "tailwindcss";\n/
end

#patch_tailwind_config_bundle_gemfileObject



70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/generators/activeadmin_claude_theme/install/install_generator.rb', line 70

def patch_tailwind_config_bundle_gemfile
  return unless File.exist?(TW_CONF)
  return if File.read(TW_CONF).include?("BUNDLE_GEMFILE")

  inject_into_file TW_CONF,
                   "process.env.BUNDLE_GEMFILE ||= require('path').resolve(__dirname, 'Gemfile');\n\n",
                   before: "const activeAdminPath"
rescue StandardError
  inject_into_file TW_CONF,
                   "process.env.BUNDLE_GEMFILE ||= require('path').resolve(__dirname, 'Gemfile');\n\n",
                   after: "import activeAdminPlugin from '@activeadmin/activeadmin/plugin';\n\n"
end

#relocate_active_admin_sourceObject



23
24
25
26
27
28
29
30
31
32
33
# File 'lib/generators/activeadmin_claude_theme/install/install_generator.rb', line 23

def relocate_active_admin_source
  return if File.exist?(AA_TW_SRC)

  if File.exist?(AA_TW_SRC_LEGACY)
    create_file AA_TW_SRC, File.read(AA_TW_SRC_LEGACY)
    remove_file AA_TW_SRC_LEGACY
    say "Moved Active Admin Tailwind source to #{AA_TW_SRC} (keeps Propshaft from serving uncompiled CSS).", :green
  else
    say "Skipped relocate: run `rails g active_admin:assets` first.", :yellow
  end
end

#vendor_theme_cssObject



18
19
20
21
# File 'lib/generators/activeadmin_claude_theme/install/install_generator.rb', line 18

def vendor_theme_css
  css = ActiveadminClaudeTheme::Engine.root.join("app/assets/stylesheets/activeadmin_claude_theme.css").read
  create_file "app/assets/tailwind/activeadmin_claude_theme.css", css
end