Class: Dbwatcher::Services::DiagramAnalyzers::ModelAnalysis::AssociationExtractor

Inherits:
Object
  • Object
show all
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

Instance Method Summary collapse

Constructor Details

#initialize(session_tables = []) ⇒ AssociationExtractor

Initialize with optional session tables for scope filtering

Parameters:

  • session_tables (Array<String>) (defaults to: [])

    table names from session (empty for global analysis)



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_tablesObject (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

Parameters:

  • models (Array<Class>)

    ActiveRecord model classes to analyze

Returns:

  • (Array<Hash>)

    associations array



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.options[: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

Parameters:

  • models (Array<Class>)

    models to create placeholders for

Returns:

  • (Array<Hash>)

    placeholder 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