Class: Lutaml::Qea::Factory::DocumentBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/lutaml/qea/factory/document_builder.rb

Overview

Builds and validates UML Document structure Ensures all required document sections are populated correctly

Defined Under Namespace

Classes: ValidationError

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name: "EA Model") ⇒ DocumentBuilder

Initialize builder with new document

Parameters:

  • name (String) (defaults to: "EA Model")

    Document name



13
14
15
16
17
# File 'lib/lutaml/qea/factory/document_builder.rb', line 13

def initialize(name: "EA Model")
  @document = Lutaml::Uml::Document.new
  @document.name = name
  # Don't initialize collections - they have default values
end

Instance Attribute Details

#documentObject (readonly)

Returns the value of attribute document.



9
10
11
# File 'lib/lutaml/qea/factory/document_builder.rb', line 9

def document
  @document
end

Instance Method Details

#add_associations(associations) ⇒ self

Add associations to document

Parameters:

Returns:

  • (self)

    For method chaining



72
73
74
75
76
77
# File 'lib/lutaml/qea/factory/document_builder.rb', line 72

def add_associations(associations)
  return self if associations.nil? || associations.empty?

  @document.associations.concat(associations)
  self
end

#add_classes(classes) ⇒ self

Add classes to document

Parameters:

Returns:

  • (self)

    For method chaining



32
33
34
35
36
37
# File 'lib/lutaml/qea/factory/document_builder.rb', line 32

def add_classes(classes)
  return self if classes.nil? || classes.empty?

  @document.classes.concat(classes)
  self
end

#add_data_types(data_types) ⇒ self

Add data types to document

Parameters:

Returns:

  • (self)

    For method chaining



52
53
54
55
56
57
# File 'lib/lutaml/qea/factory/document_builder.rb', line 52

def add_data_types(data_types)
  return self if data_types.nil? || data_types.empty?

  @document.data_types.concat(data_types)
  self
end

#add_enums(enums) ⇒ self

Add enums to document

Parameters:

Returns:

  • (self)

    For method chaining



42
43
44
45
46
47
# File 'lib/lutaml/qea/factory/document_builder.rb', line 42

def add_enums(enums)
  return self if enums.nil? || enums.empty?

  @document.enums.concat(enums)
  self
end

#add_instances(instances) ⇒ self

Add instances to document

Parameters:

Returns:

  • (self)

    For method chaining



62
63
64
65
66
67
# File 'lib/lutaml/qea/factory/document_builder.rb', line 62

def add_instances(instances)
  return self if instances.nil? || instances.empty?

  @document.instances.concat(instances)
  self
end

#add_packages(packages) ⇒ self

Add packages to document

Parameters:

Returns:

  • (self)

    For method chaining



22
23
24
25
26
27
# File 'lib/lutaml/qea/factory/document_builder.rb', line 22

def add_packages(packages)
  return self if packages.nil? || packages.empty?

  @document.packages.concat(packages)
  self
end

#build(validate: true) ⇒ Lutaml::Uml::Document

Build and return the document

Parameters:

  • validate (Boolean) (defaults to: true)

    Whether to validate before returning

Returns:

Raises:



93
94
95
96
# File 'lib/lutaml/qea/factory/document_builder.rb', line 93

def build(validate: true)
  validate! if validate
  @document
end

#set_metadata(title: nil, caption: nil) ⇒ self

Set document metadata

Parameters:

  • title (String) (defaults to: nil)

    Document title

  • caption (String) (defaults to: nil)

    Document caption

Returns:

  • (self)

    For method chaining



83
84
85
86
87
# File 'lib/lutaml/qea/factory/document_builder.rb', line 83

def (title: nil, caption: nil)
  @document.title = title if title
  @document.caption = caption if caption
  self
end

#statsHash

Get document statistics

Returns:

  • (Hash)

    Statistics about document contents



124
125
126
127
128
129
130
131
132
133
# File 'lib/lutaml/qea/factory/document_builder.rb', line 124

def stats
  {
    packages: @document.packages.size,
    classes: @document.classes.size,
    enums: @document.enums.size,
    data_types: @document.data_types.size,
    instances: @document.instances.size,
    associations: @document.associations.size,
  }
end

#validate!Boolean

Validate document integrity

Returns:

  • (Boolean)

    True if valid

Raises:



101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# File 'lib/lutaml/qea/factory/document_builder.rb', line 101

def validate! # rubocop:disable Metrics/MethodLength
  errors = []
  warnings = []

  # Check for duplicate xmi_ids
  check_duplicate_xmi_ids(errors)

  # Check association references (warnings only for missing refs)
  check_association_references(warnings)

  # Print warnings if any
  unless warnings.empty?
    warn "Document validation warnings:"
    warnings.each { |w| warn "  - #{w}" }
  end

  raise ValidationError, errors.join("; ") unless errors.empty?

  true
end