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



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

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.



11
12
13
# File 'lib/lutaml/qea/factory/document_builder.rb', line 11

def document
  @document
end

Instance Method Details

#add_associations(associations) ⇒ self

Add associations to document

Parameters:

Returns:

  • (self)

    For method chaining



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

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



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

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



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

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



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

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



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

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



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

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:



95
96
97
98
# File 'lib/lutaml/qea/factory/document_builder.rb', line 95

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



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

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



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

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:



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

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