Class: Dbwatcher::Services::DiagramAnalyzers::ModelAnalysis::AssociationExtractor
- Inherits:
-
Object
- Object
- Dbwatcher::Services::DiagramAnalyzers::ModelAnalysis::AssociationExtractor
- Defined in:
- lib/dbwatcher/services/diagram_analyzers/model_analysis/association_extractor.rb
Overview
Service responsible for analyzing ActiveRecord model associations
This service handles the extraction and analysis of model associations, converting them into standardized relationship data for diagram generation.
Instance Attribute Summary collapse
-
#session_tables ⇒ Object
readonly
Returns the value of attribute session_tables.
Instance Method Summary collapse
-
#extract_all(models) ⇒ Array<Hash>
Extract associations from all provided models.
-
#generate_placeholder_associations(models) ⇒ Array<Hash>
Generate placeholder associations for models without associations.
-
#initialize(session_tables = []) ⇒ AssociationExtractor
constructor
Initialize with optional session tables for scope filtering.
Constructor Details
#initialize(session_tables = []) ⇒ AssociationExtractor
Initialize with optional session tables for scope filtering
17 18 19 |
# File 'lib/dbwatcher/services/diagram_analyzers/model_analysis/association_extractor.rb', line 17 def initialize(session_tables = []) @session_tables = session_tables || [] end |
Instance Attribute Details
#session_tables ⇒ Object (readonly)
Returns the value of attribute session_tables.
12 13 14 |
# File 'lib/dbwatcher/services/diagram_analyzers/model_analysis/association_extractor.rb', line 12 def session_tables @session_tables end |
Instance Method Details
#extract_all(models) ⇒ Array<Hash>
Extract associations from all provided models
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/dbwatcher/services/diagram_analyzers/model_analysis/association_extractor.rb', line 25 def extract_all(models) associations = [] models.each do |model| model_associations = get_model_associations(model) model_associations.each do |association| # Skip polymorphic associations for now next if association.[:polymorphic] # Skip if target model is not in scope next unless target_model_in_scope?(association) # Build relationship based on association type relationship = build_association_relationship(model, association) associations << relationship if relationship end end associations end |
#generate_placeholder_associations(models) ⇒ Array<Hash>
Generate placeholder associations for models without associations
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/dbwatcher/services/diagram_analyzers/model_analysis/association_extractor.rb', line 51 def generate_placeholder_associations(models) result = models.map do |model| { type: "node_only", source_model: model.name, source_table: model.table_name, target_model: nil, target_table: nil, association_name: nil } end Rails.logger.info "AssociationExtractor: Generated #{result.size} placeholder nodes" result end |