Class: Lagoon::Analyzer::ActiveRecordAnalyzer

Inherits:
Object
  • Object
show all
Defined in:
lib/lagoon/analyzer/active_record_analyzer.rb

Overview

Analyzes ActiveRecord models to extract metadata including columns, methods, associations, and inheritance

Instance Method Summary collapse

Instance Method Details

#analyze_model(model, options = {}) ⇒ Hash

Analyze a single model and return its metadata

Parameters:

  • model (Class)

    ActiveRecord model class

  • options (Hash) (defaults to: {})

    Analysis options

Returns:

  • (Hash)

    Model metadata



13
14
15
16
17
18
19
20
# File 'lib/lagoon/analyzer/active_record_analyzer.rb', line 13

def analyze_model(model, options = {})
  {
    name: model.name,
    abstract: model.abstract_class?,
    attributes: extract_columns(model, options),
    methods: extract_methods(model, options)
  }
end

#extract_associations(model, options = {}) ⇒ Array<Hash>

Extract associations from a model

Parameters:

  • model (Class)

    ActiveRecord model class

  • options (Hash) (defaults to: {})

    Extraction options

Returns:

  • (Array<Hash>)

    Association metadata



27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/lagoon/analyzer/active_record_analyzer.rb', line 27

def extract_associations(model, options = {})
  associations = []

  model.reflect_on_all_associations.each do |assoc|
    next if assoc.options[:through] && options[:hide_through]

    association_data = build_association(model, assoc, options)
    associations << association_data if association_data
  end

  associations
end

#extract_inheritance(model) ⇒ Array<Hash>

Extract inheritance relationship from a model

Parameters:

  • model (Class)

    ActiveRecord model class

Returns:

  • (Array<Hash>)

    Inheritance metadata (empty or single element)



44
45
46
# File 'lib/lagoon/analyzer/active_record_analyzer.rb', line 44

def extract_inheritance(model)
  extract_inheritance_with_options(model)
end

#extract_inheritance_with_options(model, include_framework_base: false) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/lagoon/analyzer/active_record_analyzer.rb', line 48

def extract_inheritance_with_options(model, include_framework_base: false)
  return [] if model.superclass == ActiveRecord::Base && !include_framework_base
  return [] if model.superclass.nil? || model.superclass.name.nil?
  return [] if !include_framework_base && framework_model?(model.superclass)

  [{
    source: model.superclass.name,
    target: model.name,
    type: :inheritance,
    label: nil
  }]
rescue NameError
  []
end