Class: RailsAiBridge::Config::Introspection

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

Overview

Holds introspector selection, exclusion rules, and caching settings.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeIntrospection

Initializes Introspection configuration with sensible defaults. Sets:

  • @introspectors to a duplicate of Configuration::PRESETS[:standard]
  • @preset to :standard, matching the default introspector list
  • @excluded_paths to ["node_modules", "tmp", "log", "vendor", ".git"]
  • @excluded_models to common Rails/ActiveStorage/Action* classes
  • @core_models, @excluded_tables, and @disabled_introspection_categories to empty arrays
  • @cache_ttl to 30
  • @expose_credentials_key_names to false
  • @additional_introspectors to an empty hash
  • @search_code_allowed_file_types to an empty array
  • @search_code_pattern_max_bytes to 2048
  • @search_code_timeout_seconds to 5.0


69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/rails_ai_bridge/config/introspection.rb', line 69

def initialize
  @introspectors      = Configuration::PRESETS[:standard].dup
  @preset             = :standard
  @excluded_paths     = %w[node_modules tmp log vendor .git]
  @excluded_models    = %w[
    ApplicationRecord
    ActiveStorage::Blob ActiveStorage::Attachment ActiveStorage::VariantRecord
    ActionText::RichText ActionText::EncryptedRichText
    ActionMailbox::InboundEmail ActionMailbox::Record
  ]
  @core_models                       = []
  @excluded_tables                   = []
  @disabled_introspection_categories = []
  @cache_ttl                         = 30
  @expose_credentials_key_names      = false
  @additional_introspectors          = {}
  @search_code_allowed_file_types    = []
  @search_code_pattern_max_bytes     = 2048
  @search_code_timeout_seconds       = 5.0
end

Instance Attribute Details

#additional_introspectorsHash{Symbol => Class}

Returns additional custom introspector classes.

Returns:

  • (Hash{Symbol => Class})

    additional custom introspector classes



43
44
45
# File 'lib/rails_ai_bridge/config/introspection.rb', line 43

def additional_introspectors
  @additional_introspectors
end

#cache_ttlInteger

Returns TTL in seconds for cached introspection results.

Returns:

  • (Integer)

    TTL in seconds for cached introspection results



37
38
39
# File 'lib/rails_ai_bridge/config/introspection.rb', line 37

def cache_ttl
  @cache_ttl
end

#core_modelsArray<String>

Returns model class names tagged as +core_entity+ in semantic classification (AI focus).

Returns:

  • (Array<String>)

    model class names tagged as +core_entity+ in semantic classification (AI focus)



28
29
30
# File 'lib/rails_ai_bridge/config/introspection.rb', line 28

def core_models
  @core_models
end

#disabled_introspection_categoriesArray<Symbol>

Returns product-level category keys that subtract introspectors at runtime.

Returns:

  • (Array<Symbol>)

    product-level category keys that subtract introspectors at runtime



34
35
36
# File 'lib/rails_ai_bridge/config/introspection.rb', line 34

def disabled_introspection_categories
  @disabled_introspection_categories
end

#excluded_modelsArray<String>

Returns model class names excluded from introspection.

Returns:

  • (Array<String>)

    model class names excluded from introspection



25
26
27
# File 'lib/rails_ai_bridge/config/introspection.rb', line 25

def excluded_models
  @excluded_models
end

#excluded_pathsArray<String>

Returns directory names excluded from code search.

Returns:

  • (Array<String>)

    directory names excluded from code search



22
23
24
# File 'lib/rails_ai_bridge/config/introspection.rb', line 22

def excluded_paths
  @excluded_paths
end

#excluded_tablesArray<String>

Returns table names/patterns excluded from schema introspection.

Returns:

  • (Array<String>)

    table names/patterns excluded from schema introspection



31
32
33
# File 'lib/rails_ai_bridge/config/introspection.rb', line 31

def excluded_tables
  @excluded_tables
end

#expose_credentials_key_namesBoolean

Returns include credential key names in config introspection output.

Returns:

  • (Boolean)

    include credential key names in config introspection output



40
41
42
# File 'lib/rails_ai_bridge/config/introspection.rb', line 40

def expose_credentials_key_names
  @expose_credentials_key_names
end

#introspectorsArray<Symbol>

Returns active introspector keys.

Returns:

  • (Array<Symbol>)

    active introspector keys



8
9
10
# File 'lib/rails_ai_bridge/config/introspection.rb', line 8

def introspectors
  @introspectors
end

#presetSymbol?

Returns the active preset name, or +nil+ if introspectors were modified directly.

Returns:

  • (Symbol, nil)

    The preset name, or nil for modified configurations



105
106
107
# File 'lib/rails_ai_bridge/config/introspection.rb', line 105

def preset
  @preset
end

#search_code_allowed_file_typesArray<String>

Returns extra file extensions allowed for rails_search_code.

Returns:

  • (Array<String>)

    extra file extensions allowed for rails_search_code



46
47
48
# File 'lib/rails_ai_bridge/config/introspection.rb', line 46

def search_code_allowed_file_types
  @search_code_allowed_file_types
end

#search_code_pattern_max_bytesInteger

Returns maximum +pattern+ size in bytes for Tools::SearchCode (ReDoS / abuse guard).

Returns:

  • (Integer)

    maximum +pattern+ size in bytes for Tools::SearchCode (ReDoS / abuse guard)



49
50
51
# File 'lib/rails_ai_bridge/config/introspection.rb', line 49

def search_code_pattern_max_bytes
  @search_code_pattern_max_bytes
end

#search_code_timeout_secondsFloat

Returns seconds before Tools::SearchCode aborts (+0+ disables the timeout).

Returns:



52
53
54
# File 'lib/rails_ai_bridge/config/introspection.rb', line 52

def search_code_timeout_seconds
  @search_code_timeout_seconds
end

Instance Method Details

#effective_introspectorsArray<Symbol>

Introspectors after removing those disabled by #disabled_introspection_categories.

Returns:

  • (Array<Symbol>)


110
111
112
113
114
115
# File 'lib/rails_ai_bridge/config/introspection.rb', line 110

def effective_introspectors
  disabled = @disabled_introspection_categories.flat_map do |c|
    Configuration::INTROSPECTION_CATEGORY_INTROSPECTORS[c.to_sym] || []
  end.uniq
  @introspectors.reject { |i| disabled.include?(i) }
end

#excluded_table?(table_name) ⇒ Boolean

Whether a table name matches any #excluded_tables pattern (exact or glob).

Parameters:

  • table_name (String, nil)

Returns:

  • (Boolean)


121
122
123
124
125
# File 'lib/rails_ai_bridge/config/introspection.rb', line 121

def excluded_table?(table_name)
  return false if table_name.nil? || table_name.to_s.empty?

  @excluded_tables.any? { |pat| ExclusionHelper.table_pattern_match?(pat.to_s, table_name.to_s) }
end