Class: Dbwatcher::Services::DiagramAnalyzers::ModelAnalysis::ModelDiscovery
- Inherits:
-
Object
- Object
- Dbwatcher::Services::DiagramAnalyzers::ModelAnalysis::ModelDiscovery
- Defined in:
- lib/dbwatcher/services/diagram_analyzers/model_analysis/model_discovery.rb
Overview
Service responsible for discovering and filtering ActiveRecord models
This service handles the complex logic of finding ActiveRecord models that are relevant for diagram analysis, including models from gems, namespaced models, and models with custom table names.
Instance Attribute Summary collapse
-
#discovered_models ⇒ Object
readonly
Returns the value of attribute discovered_models.
-
#session_tables ⇒ Object
readonly
Returns the value of attribute session_tables.
Instance Method Summary collapse
-
#discover ⇒ Array<Class>
Discover models that correspond to session tables or all models if no session.
-
#initialize(session_tables = []) ⇒ ModelDiscovery
constructor
Initialize with optional session tables for filtering.
-
#load_all_models ⇒ Array<Class>
Load all available ActiveRecord models including from gems.
-
#model_has_table?(model) ⇒ Boolean
Check if model has a database table.
-
#valid_model_class?(model) ⇒ Boolean
Check if a model class is valid for analysis.
Constructor Details
#initialize(session_tables = []) ⇒ ModelDiscovery
Initialize with optional session tables for filtering
18 19 20 21 |
# File 'lib/dbwatcher/services/diagram_analyzers/model_analysis/model_discovery.rb', line 18 def initialize(session_tables = []) @session_tables = session_tables || [] @discovered_models = [] end |
Instance Attribute Details
#discovered_models ⇒ Object (readonly)
Returns the value of attribute discovered_models.
13 14 15 |
# File 'lib/dbwatcher/services/diagram_analyzers/model_analysis/model_discovery.rb', line 13 def discovered_models @discovered_models end |
#session_tables ⇒ Object (readonly)
Returns the value of attribute session_tables.
13 14 15 |
# File 'lib/dbwatcher/services/diagram_analyzers/model_analysis/model_discovery.rb', line 13 def session_tables @session_tables end |
Instance Method Details
#discover ⇒ Array<Class>
Discover models that correspond to session tables or all models if no session
26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/dbwatcher/services/diagram_analyzers/model_analysis/model_discovery.rb', line 26 def discover return [] unless activerecord_available? begin all_models = load_all_models @discovered_models = filter_models_by_session(all_models) log_discovery_results @discovered_models rescue StandardError => e Rails.logger.error "ModelDiscovery: Error discovering models: #{e.}" [] end end |
#load_all_models ⇒ Array<Class>
Load all available ActiveRecord models including from gems
44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/dbwatcher/services/diagram_analyzers/model_analysis/model_discovery.rb', line 44 def load_all_models eager_load_models # Get all model classes directly from ActiveRecord descendants all_models = ActiveRecord::Base.descendants .select { |model| valid_model_class?(model) } .uniq Rails.logger.debug "ModelDiscovery: Found #{all_models.size} total ActiveRecord models" all_models end |
#model_has_table?(model) ⇒ Boolean
Check if model has a database table
80 81 82 83 84 |
# File 'lib/dbwatcher/services/diagram_analyzers/model_analysis/model_discovery.rb', line 80 def model_has_table?(model) model.table_exists? rescue StandardError false end |
#valid_model_class?(model) ⇒ Boolean
Check if a model class is valid for analysis
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/dbwatcher/services/diagram_analyzers/model_analysis/model_discovery.rb', line 60 def valid_model_class?(model) # Must be a proper class with a name (not anonymous) return false unless model.name # Must have a table that exists return false unless model_has_table?(model) # Skip abstract models return false if model.abstract_class? true rescue StandardError => e Rails.logger.debug "ModelDiscovery: Error validating model #{model}: #{e.}" false end |