Class: Lutaml::Qea::Factory::DocumentBuilder
- Inherits:
-
Object
- Object
- Lutaml::Qea::Factory::DocumentBuilder
- 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
-
#document ⇒ Object
readonly
Returns the value of attribute document.
Instance Method Summary collapse
-
#add_associations(associations) ⇒ self
Add associations to document.
-
#add_classes(classes) ⇒ self
Add classes to document.
-
#add_data_types(data_types) ⇒ self
Add data types to document.
-
#add_enums(enums) ⇒ self
Add enums to document.
-
#add_instances(instances) ⇒ self
Add instances to document.
-
#add_packages(packages) ⇒ self
Add packages to document.
-
#build(validate: true) ⇒ Lutaml::Uml::Document
Build and return the document.
-
#initialize(name: "EA Model") ⇒ DocumentBuilder
constructor
Initialize builder with new document.
-
#set_metadata(title: nil, caption: nil) ⇒ self
Set document metadata.
-
#stats ⇒ Hash
Get document statistics.
-
#validate! ⇒ Boolean
Validate document integrity.
Constructor Details
#initialize(name: "EA Model") ⇒ DocumentBuilder
Initialize builder with new document
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
#document ⇒ Object (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
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
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
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
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
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
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
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
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 |
#stats ⇒ Hash
Get document statistics
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
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 |