Class: Sage::Generators::InstallGenerator

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

Instance Method Summary collapse

Instance Method Details

#add_javascript_integrationObject



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/generators/sage/install/install_generator.rb', line 75

def add_javascript_integration
  say "Configuring JavaScript integration...", :green

  # Update controllers/index.js to register Sage controllers
  controllers_index_path = "app/javascript/controllers/index.js"
  if File.exist?(controllers_index_path)
    controllers_content = File.read(controllers_index_path)
    unless controllers_content.include?("sage")
      append_to_file controllers_index_path do
        "\n          // Import and register Sage controllers\n          import { registerControllers } from \"sage\"\n          registerControllers(application)\n        JS\n      end\n      say \"Updated controllers/index.js to register Sage controllers\", :green\n    else\n      say \"Sage controllers already registered in controllers/index.js\", :yellow\n    end\n  else\n    say \"Could not find app/javascript/controllers/index.js - you'll need to manually import Sage controllers\", :yellow\n  end\nend\n"

#add_routesObject



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/generators/sage/install/install_generator.rb', line 22

def add_routes
  # Remove existing Blazer route if present
  routes_file = "config/routes.rb"
  if File.exist?(routes_file)
    routes_content = File.read(routes_file)

    # Pattern to match Blazer mount (with various formatting)
    blazer_route_pattern = /^\s*mount\s+Blazer::Engine\s*,\s*at:\s*['"]blazer['"]\s*$/

    if routes_content.match?(blazer_route_pattern)
      # Remove the Blazer route
      gsub_file routes_file, blazer_route_pattern, ""
      say "Removed existing Blazer route", :yellow
    end
  end

  # Mount Sage (which includes Blazer functionality)
  route 'mount Sage::Engine => "/sage"'
  say "Mounted Sage at /sage", :green
end

#add_stylesheetsObject



100
101
102
103
104
# File 'lib/generators/sage/install/install_generator.rb', line 100

def add_stylesheets
  # Stylesheets are served directly from the engine via the asset pipeline
  # No need to copy or require them - they're automatically available
  say "Sage stylesheets will be served from the engine", :green
end

#create_initializerObject



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

def create_initializer
  template "sage.rb", "config/initializers/sage.rb"
end

#create_migrationsObject



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/generators/sage/install/install_generator.rb', line 47

def create_migrations
  say "Creating Sage database migrations...", :green

  # Generate timestamp for migration
  timestamp = Time.now.utc.strftime("%Y%m%d%H%M%S")

  # Create the migration file
  migration_file = "db/migrate/#{timestamp}_create_sage_messages.rb"
  create_file migration_file do
    "      class CreateSageMessages < ActiveRecord::Migration[\#{Rails::VERSION::MAJOR}.\#{Rails::VERSION::MINOR}]\n        def change\n          create_table :sage_messages do |t|\n            t.references :blazer_query\n            t.references :creator\n            t.string :body\n            t.text :statement\n\n            t.timestamps\n          end\n        end\n      end\n    RUBY\n  end\n\n  say \"Created migration for sage_messages table\", :green\nend\n"

#display_instructionsObject



106
107
108
109
110
111
112
113
114
115
116
117
118
119
# File 'lib/generators/sage/install/install_generator.rb', line 106

def display_instructions
  say "\n" + "="*50, :green
  say "Sage installation complete!", :green
  say "="*50, :green
  say "\nNext steps:"
  say "1. Run 'bundle install' to install dependencies"
  say "2. Run 'rails db:migrate' to create Blazer tables"
  say "3. Configure your AI service in config/initializers/sage.rb"
  say "4. Visit #{root_url}sage to start using Sage"
  say "\nFor AI integration, you'll need to:"
  say "- Set up an Anthropic API key (or OpenAI if preferred)"
  say "- Add the API key to Rails credentials or .env file"
  say "- Configure database schema context for better SQL generation"
end

#install_blazerObject



10
11
12
13
14
15
16
17
18
19
20
# File 'lib/generators/sage/install/install_generator.rb', line 10

def install_blazer
  # Check if Blazer is already installed by looking for migration
  blazer_installed = Dir.glob("db/migrate/*_install_blazer.rb").any?

  if blazer_installed
    say "Blazer already installed, skipping...", :yellow
  else
    say "Installing Blazer...", :green
    generate "blazer:install"
  end
end