module Lutaml::Uml::ModelHelpers
def class_type_for(uml_class)
def class_type_for(uml_class) case uml_class when String uml_class.split("::").last when Lutaml::Uml::Enum "Enumeration" when Lutaml::Uml::DataType "DataType" when Lutaml::Uml::PrimitiveType "PrimitiveType" when Lutaml::Uml::Class "Class" when Class uml_class.name.split("::").last else uml_class.class.name.split("::").last end end
def extract_package_path(qualified_name, default: "")
def extract_package_path(qualified_name, default: "") parts = qualified_name.to_s.split("::") return default if parts.size <= 1 parts[0..-2].join("::") end
def format_cardinality(cardinality)
def format_cardinality(cardinality) return nil unless cardinality min = cardinality.min max = cardinality.max return nil if min.nil? && max.nil? min_str = min.nil? ? "0" : min.to_s max_str = max.nil? ? "*" : max.to_s "#{min_str}..#{max_str}" end
def format_definition(definition, options = {})
def format_definition(definition, options = {}) return nil if definition.nil? || definition.empty? formatted = definition.strip if options[:max_definition_length] && formatted.length > options[:max_definition_length] formatted = "#{formatted[0...options[:max_definition_length]]}..." end if options[:format_definitions] formatted = formatted.gsub(%r{(https?://[^\s]+)}, '[\1](\1)') end formatted end
def normalize_stereotypes(stereotype)
def normalize_stereotypes(stereotype) return [] if stereotype.nil? case stereotype when Array then stereotype.map(&:to_s) when String then [stereotype] when Symbol then [stereotype.to_s] else [stereotype.to_s] end end
def package_path_for(uml_element)
def package_path_for(uml_element) parts = [] current = uml_element while current if current.is_a?(Lutaml::Uml::Package) parts.unshift(current.name) if current.name current = current.namespace elsif current.is_a?(Lutaml::Uml::TopElement) current = current.namespace else break end end parts.join("::") end
def parse_cardinality(min, max)
def parse_cardinality(min, max) { min: min, max: max } end
def qualified_name_for(uml_element)
def qualified_name_for(uml_element) parts = [] current = uml_element while current parts.unshift(current.name) if current.name current = current.namespace end parts.join("::") end