Class: MermaidRailsErd::Generator

Inherits:
Object
  • Object
show all
Defined in:
lib/mermaid_rails_erd/generator.rb

Instance Method Summary collapse

Constructor Details

#initialize(output: nil) ⇒ Generator

Returns a new instance of Generator.



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/mermaid_rails_erd/generator.rb', line 16

def initialize(output: nil)
  @output = output
  @printed_tables = Set.new
  @printed_relationships = Set.new
  @relationships = []

  @model_loader = ModelLoader.new
  @association_resolver = AssociationResolver.new
  @symbol_mapper = RelationshipSymbolMapper.new
  @model_data_collector = ModelDataCollector.new(@model_loader)
  @polymorphic_resolver = PolymorphicTargetsResolver.new(@model_data_collector)
  @relationship_registry = RelationshipRegistry.new(
    symbol_mapper: @symbol_mapper,
    association_resolver: @association_resolver,
    polymorphic_resolver: @polymorphic_resolver,
    printed_tables: @printed_tables,
    model_data_collector: @model_data_collector,
  )
end

Instance Method Details

#buildself

Build and collect data from models

Returns:

  • (self)


38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/mermaid_rails_erd/generator.rb', line 38

def build
  @model_data_collector.collect

  # Build all relationships with polymorphic handling first
  begin
    @relationships = @relationship_registry.build_all_relationships
  rescue StandardError => e
    puts "ERROR building relationships: #{e.class} - #{e.message}"
    puts e.backtrace.join("\n")
    @relationships = []
  end

  # Update table definitions with FK annotations
  @tables = @model_data_collector.update_foreign_keys(@relationships)

  self
end

#emit(output: nil) ⇒ void

This method returns an undefined value.

Generate and emit the ERD diagram

Parameters:

  • output (IO) (defaults to: nil)

    Output stream to write the ERD to (defaults to the one provided in initialize)



65
66
67
68
69
# File 'lib/mermaid_rails_erd/generator.rb', line 65

def emit(output: nil)
  output ||= @output
  output ||= $stdout
  MermaidEmitter.new(output, @tables, @relationships).emit
end

#parsed_dataParsedData

Get parsed data as a structured object

Returns:

  • (ParsedData)

    Struct containing relationships, tables, and delegated model data



58
59
60
# File 'lib/mermaid_rails_erd/generator.rb', line 58

def parsed_data
  ParsedData.new(@relationships, @tables, @model_data_collector)
end