Class: Lutaml::UmlRepository::StaticSite::Generator

Inherits:
Object
  • Object
show all
Defined in:
lib/lutaml/uml_repository/static_site/generator.rb

Overview

Main static site generator for LutaML UML Browser.

Follows Dependency Inversion Principle by injecting dependencies and using external configuration instead of hardcoded values.

Examples:

Single-file generation

config = Configuration.load
generator = Generator.new(repository, config: config,
  mode: :single_file)
generator.generate

With dependency injection

generator = Generator.new(repository,
  config: custom_config,
  id_generator: custom_id_gen,
  data_transformer: custom_transformer
)

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(repository, options = {}) ⇒ Generator

Initialize generator with dependency injection

(default: auto-loaded) transformer instance builder instance (:single_file or :multi_file)

Parameters:

  • repository (UmlRepository)

    The repository to generate site for

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

    Generation options

Options Hash (options):

  • :config (Configuration)

    Configuration instance

  • :id_generator (IDGenerator)

    ID generator instance

  • :data_transformer (DataTransformer)

    Data

  • :search_builder (SearchIndexBuilder)

    Search index

  • :mode (Symbol)

    Output mode

  • :output (String)

    Output path

  • :minify (Boolean)

    Minify output (overrides config)



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/lutaml/uml_repository/static_site/generator.rb', line 49

def initialize(repository, options = {}) # rubocop:disable Metrics/MethodLength
  @repository = repository
  @config = options[:config] ||
    Configuration.load(options[:config_path])
  @options = build_options(options)

  # Dependency injection for testability
  @id_generator = options[:id_generator] || IDGenerator.new
  @data_transformer = options[:data_transformer] ||
    create_data_transformer
  @search_builder = options[:search_builder] ||
    create_search_builder

  @liquid = setup_liquid
end

Instance Attribute Details

#configObject (readonly)

Returns the value of attribute config.



32
33
34
# File 'lib/lutaml/uml_repository/static_site/generator.rb', line 32

def config
  @config
end

#optionsObject (readonly)

Returns the value of attribute options.



32
33
34
# File 'lib/lutaml/uml_repository/static_site/generator.rb', line 32

def options
  @options
end

#repositoryObject (readonly)

Returns the value of attribute repository.



32
33
34
# File 'lib/lutaml/uml_repository/static_site/generator.rb', line 32

def repository
  @repository
end

Instance Method Details

#generateString

Generate the static site

Returns:

  • (String)

    Path to generated output



68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/lutaml/uml_repository/static_site/generator.rb', line 68

def generate
  case @options[:mode]
  when :single_file
    generate_single_file
  when :multi_file
    generate_multi_file
  else
    raise ArgumentError,
          "Invalid mode: #{@options[:mode]}. " \
          "Use :single_file or :multi_file"
  end
end