Class: RailsAiContext::Introspectors::EngineIntrospector

Inherits:
Object
  • Object
show all
Extended by:
StaticTier
Defined in:
lib/rails_ai_context/introspectors/engine_introspector.rb

Overview

Discovers mounted Rails engines and Rack apps from config/routes.rb. Identifies well-known engines and provides context about what each does.

Constant Summary collapse

KNOWN_ENGINES =
{
  "Sidekiq::Web" => { category: :admin, description: "Sidekiq background job dashboard" },
  "GoodJob::Engine" => { category: :admin, description: "GoodJob dashboard for background jobs" },
  "MissionControl::Jobs::Engine" => { category: :admin, description: "Rails Mission Control for SolidQueue jobs" },
  "ActiveAdmin::Engine" => { category: :admin, description: "ActiveAdmin administration framework" },
  "RailsAdmin::Engine" => { category: :admin, description: "Rails Admin dashboard" },
  "Administrate::Engine" => { category: :admin, description: "Thoughtbot Administrate dashboard" },
  "Avo::Engine" => { category: :admin, description: "Avo admin panel" },
  "Madmin::Engine" => { category: :admin, description: "Madmin admin interface" },
  "Flipper::UI" => { category: :feature_flags, description: "Flipper feature flag dashboard" },
  "Flipper::Api" => { category: :feature_flags, description: "Flipper feature flag API" },
  "PgHero::Engine" => { category: :monitoring, description: "PgHero PostgreSQL performance dashboard" },
  "Blazer::Engine" => { category: :monitoring, description: "Blazer SQL query dashboard" },
  "Coverband::Engine" => { category: :monitoring, description: "Coverband code coverage in production" },
  "Rswag::Api::Engine" => { category: :api_docs, description: "Rswag API documentation (Swagger)" },
  "Rswag::Ui::Engine" => { category: :api_docs, description: "Rswag Swagger UI" },
  "GraphiQL::Rails::Engine" => { category: :api_docs, description: "GraphiQL in-browser IDE for GraphQL" },
  "Lookbook::Engine" => { category: :ui, description: "Lookbook ViewComponent previews" },
  "LetterOpenerWeb::Engine" => { category: :dev_tools, description: "Letter Opener Web email preview" },
  "ActionCable.server" => { category: :realtime, description: "Action Cable WebSocket server" },
  "Devise::Engine" => { category: :auth, description: "Devise authentication engine" },
  "Doorkeeper::Engine" => { category: :auth, description: "Doorkeeper OAuth 2 provider" },
  "ActionMailbox::Engine" => { category: :mail, description: "Action Mailbox inbound email processing" },
  "ActiveStorage::Engine" => { category: :storage, description: "Active Storage file uploads" }
}.freeze

Constants included from StaticTier

StaticTier::ALTERNATE_SOURCE, StaticTier::FILES_ONLY, StaticTier::KINDS, StaticTier::RUNTIME_ONLY

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from StaticTier

answers_statically?, static_tier, static_tier_declared?, unavailable_reason, validate_static_tier!

Constructor Details

#initialize(app) ⇒ EngineIntrospector

Returns a new instance of EngineIntrospector.



39
40
41
# File 'lib/rails_ai_context/introspectors/engine_introspector.rb', line 39

def initialize(app)
  @app = app
end

Instance Attribute Details

#appObject (readonly)

Returns the value of attribute app.



11
12
13
# File 'lib/rails_ai_context/introspectors/engine_introspector.rb', line 11

def app
  @app
end

Instance Method Details

#callHash

Returns mounted engines with paths and descriptions.

Returns:

  • (Hash)

    mounted engines with paths and descriptions



44
45
46
47
48
49
50
51
# File 'lib/rails_ai_context/introspectors/engine_introspector.rb', line 44

def call
  {
    mounted_engines: discover_mounted_engines,
    rails_engines: discover_rails_engines
  }
rescue => e
  { error: e.message }
end

#static_callObject

config/routes.rb is a file, so mounts read the same either way. Which engine classes a process loaded is only knowable from that process - and testing defined?(Rails::Engine) instead of the tier answered from the half-finished boot that put us here, which is the common way into the static tier.



58
59
60
61
62
63
64
65
# File 'lib/rails_ai_context/introspectors/engine_introspector.rb', line 58

def static_call
  {
    mounted_engines: discover_mounted_engines,
    rails_engines: { unavailable: StaticTier.unavailable_reason }
  }
rescue => e
  { error: e.message }
end