Class: RailsAiBridge::StaticApp

Inherits:
Object
  • Object
show all
Defined in:
lib/rails_ai_bridge/static_app.rb

Overview

A minimal app-like object for static mode (no Rails boot).

Exposes only root, paths, config, and eager_load! so that static-capable introspectors (schema, gems, tests, migrations) can operate without a booted Rails application. Boot-required introspectors (models, routes, controllers, etc.) are identified via the capability map and report "not available without boot" when invoked in static mode.

Examples:

Static introspection

app = RailsAiBridge::StaticApp.new('/path/to/app')
RailsAiBridge::AppScope.with_app(app) do
  RailsAiBridge.introspect(app, only: [:schema, :gems])
end

Constant Summary collapse

STATIC_CAPABLE =

Introspectors that work with only file system access (no Rails boot).

%i[schema gems tests migrations conventions].freeze
BOOT_REQUIRED =

Introspectors that require a fully booted Rails application.

%i[
  models non_ar_models routes jobs controllers views stimulus
  i18n config active_storage action_text auth api rake_tasks
  assets devops action_mailbox seeds middleware engines
  multi_database semantic database_stats
].freeze
CONVENTIONAL_PATHS =

Conventional Rails path mappings used when app.paths is unavailable.

{
  'app/models' => 'app/models',
  'app/controllers' => 'app/controllers',
  'app/views' => 'app/views',
  'app/jobs' => 'app/jobs',
  'app/mailers' => 'app/mailers',
  'app/helpers' => 'app/helpers',
  'app/assets' => 'app/assets',
  'config' => 'config',
  'db' => 'db',
  'lib' => 'lib',
  'test' => 'test',
  'spec' => 'spec'
}.freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(root) ⇒ StaticApp

Returns a new instance of StaticApp.

Parameters:

  • root (String, Pathname)

    the application root path



63
64
65
66
# File 'lib/rails_ai_bridge/static_app.rb', line 63

def initialize(root)
  @root = Pathname.new(root)
  @config = StaticConfig.new
end

Instance Attribute Details

#configStaticConfig (readonly)

Returns a minimal config stub.

Returns:

  • (StaticConfig)

    a minimal config stub



60
61
62
# File 'lib/rails_ai_bridge/static_app.rb', line 60

def config
  @config
end

#rootPathname (readonly)

Returns the application root.

Returns:

  • (Pathname)

    the application root



57
58
59
# File 'lib/rails_ai_bridge/static_app.rb', line 57

def root
  @root
end

Class Method Details

.static_available?(section) ⇒ Boolean

Checks whether a given introspector section is available in static mode.

Parameters:

  • section (Symbol)

    the introspector key

Returns:

  • (Boolean)


94
95
96
# File 'lib/rails_ai_bridge/static_app.rb', line 94

def static_available?(section)
  STATIC_CAPABLE.include?(section)
end

Instance Method Details

#eager_loadnil

Non-bang counterpart for #eager_load!. Also a no-op in static mode.

Returns:

  • (nil)


78
79
80
# File 'lib/rails_ai_bridge/static_app.rb', line 78

def eager_load
  nil
end

#eager_load!nil

No-op — static mode does not eager load anything.

Returns:

  • (nil)


71
72
73
# File 'lib/rails_ai_bridge/static_app.rb', line 71

def eager_load!
  nil
end

#pathsHash{String => Array<String>}

Returns conventional Rails paths rooted at the static app root.

Returns:

  • (Hash{String => Array<String>})


85
86
87
# File 'lib/rails_ai_bridge/static_app.rb', line 85

def paths
  @paths ||= CONVENTIONAL_PATHS.transform_values { |rel| [root.join(rel).to_s] }
end