Class: Dbwatcher::Services::MermaidSyntaxBuilder

Inherits:
Object
  • Object
show all
Includes:
Logging
Defined in:
lib/dbwatcher/services/mermaid_syntax_builder.rb

Overview

Builder for generating validated Mermaid diagram syntax

Provides methods for building different types of Mermaid diagrams with syntax validation, error checking, and consistent formatting.

Examples:

builder = MermaidSyntaxBuilder.new
content = builder.build_erd_diagram_from_dataset(dataset)
# => "erDiagram\n    USERS ||--o{ ORDERS : user_id"

Defined Under Namespace

Classes: SyntaxValidationError, UnsupportedDiagramTypeError

Constant Summary collapse

SUPPORTED_DIAGRAM_TYPES =

Supported Mermaid diagram types

%w[erDiagram classDiagram flowchart graph].freeze
MAX_CONTENT_LENGTH =

Maximum content length to prevent memory issues

100_000

Instance Method Summary collapse

Methods included from Logging

#debug_enabled?, #log_debug, #log_error, #log_info, #log_warn

Constructor Details

#initialize(config = {}) ⇒ MermaidSyntaxBuilder

Initialize builder

Parameters:

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

    builder configuration (optional)

Options Hash (config):

  • :logger (Logger)

    logger instance



34
35
36
37
# File 'lib/dbwatcher/services/mermaid_syntax_builder.rb', line 34

def initialize(config = {})
  @config = config
  @logger = config[:logger] || Rails.logger
end

Instance Method Details

#build_class_diagram_from_dataset(dataset, options = {}) ⇒ String

Build class diagram from dataset

Parameters:

  • dataset (DiagramData::Dataset)

    dataset to render

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

    generation options

Returns:

  • (String)

    Mermaid class diagram syntax



57
58
59
60
61
62
63
# File 'lib/dbwatcher/services/mermaid_syntax_builder.rb', line 57

def build_class_diagram_from_dataset(dataset, options = {})
  log_debug("Building class diagram from dataset with #{dataset.entities.size} entities and " \
            "#{dataset.relationships.size} relationships")

  builder = MermaidSyntax::ClassDiagramBuilder.new(@config.merge(options))
  builder.build_from_dataset(dataset)
end

#build_empty_class_diagram(message) ⇒ String

Build empty class diagram with message

Parameters:

  • message (String)

    message to display

Returns:

  • (String)

    Mermaid class diagram syntax



100
101
102
103
# File 'lib/dbwatcher/services/mermaid_syntax_builder.rb', line 100

def build_empty_class_diagram(message)
  builder = MermaidSyntax::ClassDiagramBuilder.new(@config)
  builder.build_empty(message)
end

#build_empty_diagram(message, diagram_type) ⇒ String

Build empty diagram of specified type

Parameters:

  • message (String)

    message to display

  • diagram_type (String)

    type of diagram

Returns:

  • (String)

    Mermaid syntax

Raises:



111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/dbwatcher/services/mermaid_syntax_builder.rb', line 111

def build_empty_diagram(message, diagram_type)
  case diagram_type
  when "erDiagram", "erd"
    build_empty_erd(message)
  when "classDiagram", "class"
    build_empty_class_diagram(message)
  when "flowchart", "graph"
    build_empty_flowchart(message)
  else
    raise UnsupportedDiagramTypeError, "Unsupported diagram type: #{diagram_type}"
  end
end

#build_empty_erd(message) ⇒ String

Build empty ERD diagram with message

Parameters:

  • message (String)

    message to display

Returns:

  • (String)

    Mermaid ERD syntax



82
83
84
85
# File 'lib/dbwatcher/services/mermaid_syntax_builder.rb', line 82

def build_empty_erd(message)
  builder = MermaidSyntax::ErdBuilder.new(@config)
  builder.build_empty(message)
end

#build_empty_flowchart(message) ⇒ String

Build empty flowchart diagram with message

Parameters:

  • message (String)

    message to display

Returns:

  • (String)

    Mermaid flowchart syntax



91
92
93
94
# File 'lib/dbwatcher/services/mermaid_syntax_builder.rb', line 91

def build_empty_flowchart(message)
  builder = MermaidSyntax::FlowchartBuilder.new(@config)
  builder.build_empty(message)
end

#build_erd_diagram_from_dataset(dataset, options = {}) ⇒ String Also known as: build_erd_diagram

Build ERD diagram from dataset

Parameters:

  • dataset (DiagramData::Dataset)

    dataset to render

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

    generation options

Returns:

  • (String)

    Mermaid ERD syntax



44
45
46
47
48
49
50
# File 'lib/dbwatcher/services/mermaid_syntax_builder.rb', line 44

def build_erd_diagram_from_dataset(dataset, options = {})
  log_debug("Building ERD diagram from dataset with #{dataset.entities.size} entities and " \
            "#{dataset.relationships.size} relationships")

  builder = MermaidSyntax::ErdBuilder.new(@config.merge(options))
  builder.build_from_dataset(dataset)
end

#build_erd_diagram_with_tables(entities, options = {}) ⇒ String

Build ERD diagram with isolated tables

Parameters:

  • entities (Array<Entity>)

    isolated table entities

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

    generation options

Returns:

  • (String)

    Mermaid ERD syntax



129
130
131
132
133
134
135
136
# File 'lib/dbwatcher/services/mermaid_syntax_builder.rb', line 129

def build_erd_diagram_with_tables(entities, options = {})
  log_debug("Building ERD diagram with #{entities.size} isolated tables")

  dataset = Dbwatcher::Services::DiagramData::Dataset.new
  entities.each { |entity| dataset.add_entity(entity) }

  build_erd_diagram_from_dataset(dataset, options)
end

#build_flowchart_diagram_from_dataset(dataset, options = {}) ⇒ String Also known as: build_flowchart_diagram

Build flowchart diagram from dataset

Parameters:

  • dataset (DiagramData::Dataset)

    dataset to render

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

    generation options

Returns:

  • (String)

    Mermaid flowchart syntax



70
71
72
73
74
75
76
# File 'lib/dbwatcher/services/mermaid_syntax_builder.rb', line 70

def build_flowchart_diagram_from_dataset(dataset, options = {})
  log_debug("Building flowchart diagram from dataset with #{dataset.entities.size} entities and " \
            "#{dataset.relationships.size} relationships")

  builder = MermaidSyntax::FlowchartBuilder.new(@config.merge(options))
  builder.build_from_dataset(dataset)
end

#build_flowchart_with_nodes(entities, options = {}) ⇒ String

Build flowchart diagram with isolated nodes

Parameters:

  • entities (Array<Entity>)

    isolated node entities

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

    generation options

Returns:

  • (String)

    Mermaid flowchart syntax



143
144
145
146
147
148
149
150
# File 'lib/dbwatcher/services/mermaid_syntax_builder.rb', line 143

def build_flowchart_with_nodes(entities, options = {})
  log_debug("Building flowchart diagram with #{entities.size} isolated nodes")

  dataset = Dbwatcher::Services::DiagramData::Dataset.new
  entities.each { |entity| dataset.add_entity(entity) }

  build_flowchart_diagram_from_dataset(dataset, options)
end