Class: Dbwatcher::Services::DiagramStrategies::BaseDiagramStrategy

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

Overview

Abstract base class for diagram generation strategies

Defines the common interface and shared behavior for all diagram generation strategies. Subclasses must implement the render_diagram method.

Direct Known Subclasses

StandardDiagramStrategy

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Logging

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

Constructor Details

#initialize(dependencies = {}) ⇒ BaseDiagramStrategy

Initialize strategy with dependencies

Parameters:

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

    injected dependencies

Options Hash (dependencies):

  • :syntax_builder (Object)

    Mermaid syntax builder

  • :logger (Logger)

    logger instance



20
21
22
23
# File 'lib/dbwatcher/services/diagram_strategies/base_diagram_strategy.rb', line 20

def initialize(dependencies = {})
  @syntax_builder = dependencies[:syntax_builder] || create_default_syntax_builder
  @logger = dependencies[:logger] || Rails.logger || Logger.new($stdout)
end

Instance Attribute Details

#loggerObject (readonly)

Returns the value of attribute logger.



13
14
15
# File 'lib/dbwatcher/services/diagram_strategies/base_diagram_strategy.rb', line 13

def logger
  @logger
end

#syntax_builderObject (readonly)

Returns the value of attribute syntax_builder.



13
14
15
# File 'lib/dbwatcher/services/diagram_strategies/base_diagram_strategy.rb', line 13

def syntax_builder
  @syntax_builder
end

Instance Method Details

#generate_from_dataset(dataset) ⇒ Hash

Generate diagram from standardized dataset

Parameters:

  • dataset (Dataset)

    standardized dataset

Returns:

  • (Hash)

    diagram generation result



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/dbwatcher/services/diagram_strategies/base_diagram_strategy.rb', line 29

def generate_from_dataset(dataset)
  log_info("Generating diagram from dataset with #{dataset.entities.size} entities and " \
           "#{dataset.relationships.size} relationships")
  start_time = Time.current

  begin
    # Generate diagram using dataset
    result = render_diagram(dataset)

    log_operation_completion("diagram generation", Time.current - start_time, {
                               entities_count: dataset.entities.size,
                               relationships_count: dataset.relationships.size
                             })

    result
  rescue StandardError => e
    log_error("Diagram generation failed: #{e.class}: #{e.message}\n#{e.backtrace.join("\n")}")
    error_response("Diagram generation failed: #{e.message}")
  end
end

#metadataHash

Get strategy metadata (abstract method)

Returns:

  • (Hash)

    strategy metadata including name, description

Raises:

  • (NotImplementedError)

    if not implemented by subclass



54
55
56
57
58
59
60
# File 'lib/dbwatcher/services/diagram_strategies/base_diagram_strategy.rb', line 54

def 
  {
    name: strategy_name,
    description: strategy_description,
    mermaid_type: mermaid_diagram_type
  }
end