Class: MermaidRailsErd::MermaidEmitter

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

Instance Method Summary collapse

Constructor Details

#initialize(output, tables, relationships) ⇒ MermaidEmitter

Returns a new instance of MermaidEmitter.



5
6
7
8
9
# File 'lib/mermaid_rails_erd/mermaid_emitter.rb', line 5

def initialize(output, tables, relationships)
  @output = output
  @tables = tables
  @relationships = relationships
end

Instance Method Details

#emitObject



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/mermaid_rails_erd/mermaid_emitter.rb', line 11

def emit
  @output.puts "erDiagram"

  @tables.each do |table_name, columns|
    @output.puts "    #{table_name} {"
    columns.each do |col|
      annotations = col.annotations.empty? ? "" : " #{col.annotations.join(' ')}"
      @output.puts "        #{col.activerecord_type} #{col.name}#{annotations}"
    end
    @output.puts "    }"
  end

  @output.puts

  emitted = Set.new
  @relationships.each do |rel|
    next if emitted.include?(rel.key)

    emitted << rel.key
    @output.puts "    #{rel.from_table} #{rel.relationship_type} #{rel.to_table} : \"#{rel.label}\""
  end
end