Module: Mermaid::ElementRenderers::ERDRelationshipRenderer

Defined in:
lib/mermaid/element_renderers/erd_relationship_renderer.rb

Overview

Module containing Mermaid rendering logic for Diagrams::ElementRenderers::ERDRelationship

Constant Summary collapse

CARDINALITY_MAP =

Maps cardinality symbols from Diagrams::ElementRenderers::ERDRelationship::CARDINALITY to Mermaid syntax (using right-side convention).

{
  ZERO_OR_ONE: 'o|',
  ONE_ONLY: '||',
  ZERO_OR_MORE: 'o{', # Corrected based on Mermaid docs
  ONE_OR_MORE: '|{' # Corrected based on Mermaid docs
}.freeze

Instance Method Summary collapse

Instance Method Details

#to_mermaid_fragmentString

Generates the Mermaid fragment for this relationship.

Returns:

  • (String)

    The Mermaid syntax fragment for the relationship.



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/mermaid/element_renderers/erd_relationship_renderer.rb', line 18

def to_mermaid_fragment
  # Fetch symbols, raise error if invalid key (shouldn't happen if Diagrams gem validates)
  left_symbol_raw = CARDINALITY_MAP.fetch(cardinality1)
  right_symbol = CARDINALITY_MAP.fetch(cardinality2)

  # Generate the left symbol by mirroring the right-side convention
  left_symbol = case left_symbol_raw
                when 'o{' then '}o' # Mirror zero or more
                when '|{' then '}|' # Mirror one or more
                else left_symbol_raw.reverse # Simple reverse for |o and ||
                end

  # Always use '--' based on user feedback for compatibility
  id_symbol = '--'

  fragment = "\"#{entity1}\" "
  fragment << left_symbol  # e.g., |o
  fragment << id_symbol    # e.g., --
  fragment << right_symbol # e.g., }|
  fragment << " \"#{entity2}\""
  fragment << " : \"#{label}\"" if label && !label.strip.empty?
  fragment << "\n"
  fragment
end