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
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
#document ⇒ Object (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
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
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
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
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
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
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
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
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 |
#stats ⇒ Hash
Get document statistics
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
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 |