Class: RailsERD::Diagram::Mermaid

Inherits:
RailsERD::Diagram show all
Defined in:
lib/rails_erd/diagram/mermaid.rb

Instance Attribute Summary collapse

Attributes inherited from RailsERD::Diagram

#domain, #options

Instance Method Summary collapse

Methods inherited from RailsERD::Diagram

create, #create, #generate, #initialize, #recurse_into_relationships, #save

Constructor Details

This class inherits a constructor from RailsERD::Diagram

Instance Attribute Details

#graphObject

Returns the value of attribute graph.



10
11
12
# File 'lib/rails_erd/diagram/mermaid.rb', line 10

def graph
  @graph
end

Instance Method Details

#arrow_body(relationship) ⇒ Object



138
139
140
# File 'lib/rails_erd/diagram/mermaid.rb', line 138

def arrow_body(relationship)
  relationship.indirect? ? ".." : "--"
end

#arrow_head(relationship) ⇒ Object



142
143
144
# File 'lib/rails_erd/diagram/mermaid.rb', line 142

def arrow_head(relationship)
  relationship.to_many? ?  ">" : ""
end

#arrow_tail(relationship) ⇒ Object



146
147
148
# File 'lib/rails_erd/diagram/mermaid.rb', line 146

def arrow_tail(relationship)
  relationship.many_to? ? "<" : ""
end

#attribute_key_marker(attr) ⇒ Object



122
123
124
125
126
127
# File 'lib/rails_erd/diagram/mermaid.rb', line 122

def attribute_key_marker(attr)
  markers = []
  markers << "PK" if attr.primary_key?
  markers << "FK" if attr.foreign_key?
  markers.empty? ? "" : " #{markers.join(',')}"
end

#diagram_typeObject



87
88
89
# File 'lib/rails_erd/diagram/mermaid.rb', line 87

def diagram_type
  er_diagram? ? "erDiagram" : "classDiagram"
end

#er_diagram?Boolean

Returns:

  • (Boolean)


91
92
93
# File 'lib/rails_erd/diagram/mermaid.rb', line 91

def er_diagram?
  options[:mermaid_style] == :erdiagram || options[:mermaid_style] == :er
end

#er_relation_notation(relationship) ⇒ Object

erDiagram relationship notation using crow’s foot Format: left_cardinality–right_cardinality Cardinality markers:

|| = exactly one
o| = zero or one
}| = one or more
}o = zero or more


102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# File 'lib/rails_erd/diagram/mermaid.rb', line 102

def er_relation_notation(relationship)
  line = relationship.indirect? ? ".." : "--"

  # Left side (source cardinality - how many source entities relate to one destination)
  left = if relationship.many_to?
    relationship.source_optional? ? "o{" : "|{"
  else
    relationship.source_optional? ? "o|" : "||"
  end

  # Right side (destination cardinality - how many destination entities relate to one source)
  right = if relationship.to_many?
    relationship.destination_optional? ? "}o" : "}|"
  else
    relationship.destination_optional? ? "|o" : "||"
  end

  "#{left}#{line}#{right}"
end

#filenameObject



83
84
85
# File 'lib/rails_erd/diagram/mermaid.rb', line 83

def filename
  "#{options.filename}.mmd"
end

#relation_arrow(relationship) ⇒ Object

classDiagram relationship arrows (legacy)



130
131
132
133
134
135
136
# File 'lib/rails_erd/diagram/mermaid.rb', line 130

def relation_arrow(relationship)
  arrow_body = arrow_body relationship
  arrow_head = arrow_head relationship
  arrow_tail = arrow_tail relationship

  "#{arrow_tail}#{arrow_body}#{arrow_head}"
end