Class: RailsAiContext::Introspectors::SchemaIntrospector
- Inherits:
-
Object
- Object
- RailsAiContext::Introspectors::SchemaIntrospector
- Defined in:
- lib/rails_ai_context/introspectors/schema_introspector.rb
Overview
Extracts database schema information including tables, columns, indexes, and foreign keys from the Rails application.
Instance Attribute Summary collapse
-
#app ⇒ Object
readonly
Returns the value of attribute app.
Instance Method Summary collapse
-
#call ⇒ Hash
Database schema context.
-
#initialize(app) ⇒ SchemaIntrospector
constructor
A new instance of SchemaIntrospector.
-
#static_call ⇒ Object
Static tier entry: skip the connection probe entirely and answer from schema.rb / structure.sql / migration files.
Constructor Details
#initialize(app) ⇒ SchemaIntrospector
Returns a new instance of SchemaIntrospector.
10 11 12 |
# File 'lib/rails_ai_context/introspectors/schema_introspector.rb', line 10 def initialize(app) @app = app end |
Instance Attribute Details
#app ⇒ Object (readonly)
Returns the value of attribute app.
8 9 10 |
# File 'lib/rails_ai_context/introspectors/schema_introspector.rb', line 8 def app @app end |
Instance Method Details
#call ⇒ Hash
Returns database schema context.
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/rails_ai_context/introspectors/schema_introspector.rb', line 15 def call return attach_secondary_databases(static_schema_parse) unless active_record_connected? return attach_secondary_databases(static_schema_parse) if table_names.empty? schema_content = File.exist?(schema_file_path) ? (RailsAiContext::SafeFile.read(schema_file_path, max_size: RailsAiContext.configuration.max_schema_file_size) || "") : "" check_constraints = [] enum_types = [] if File.exist?(schema_file_path) && defined?(Listeners::SchemaDslListener) ast_results = SourceIntrospector.walk(schema_file_path, { schema: -> { Listeners::SchemaDslListener.new } }) schema_results = ast_results[:schema] current_table = nil schema_results.sort_by { |r| r[:location] }.each do |entry| case entry[:type] when :create_table then current_table = entry[:table] when :check_constraint check_constraints << { table: current_table, expression: entry[:expression] } if current_table when :add_check_constraint check_constraints << { table: entry[:table], expression: entry[:expression] } when :enum enum_types << { name: entry[:name], values: entry[:values] } end end end attach_secondary_databases({ adapter: adapter_name, tables: extract_tables, total_tables: table_names.size, schema_version: current_schema_version, check_constraints: check_constraints, enum_types: enum_types, generated_columns: parse_generated_columns(schema_content) }) end |
#static_call ⇒ Object
Static tier entry: skip the connection probe entirely and answer from schema.rb / structure.sql / migration files.
54 55 56 |
# File 'lib/rails_ai_context/introspectors/schema_introspector.rb', line 54 def static_call attach_secondary_databases(static_schema_parse) end |