Module: Lutaml::UmlRepository::IndexBuilders::ClassIndex
- Included in:
- Lutaml::UmlRepository::IndexBuilder
- Defined in:
- lib/lutaml/uml_repository/index_builders/class_index.rb
Instance Method Summary collapse
-
#build_qualified_name_index ⇒ Object
Build the qualified name index.
-
#build_stereotype_index ⇒ Object
Build the stereotype index.
- #has_stereotype?(classifier) ⇒ Boolean
-
#index_by_stereotype(classifiers) ⇒ Object
Index classifiers by their stereotypes.
- #index_classifier(classifier, package_path) ⇒ Object
-
#index_classifiers(classifiers, package_path) ⇒ Object
Index classifiers (classes, data types, enums) by their qualified names.
- #index_document_classifiers ⇒ Object
- #index_document_stereotypes ⇒ Object
- #index_package_classifiers ⇒ Object
- #index_package_stereotypes ⇒ Object
Instance Method Details
#build_qualified_name_index ⇒ Object
Build the qualified name index
Creates a hash mapping qualified names to Class/DataType/Enum objects:
"ModelRoot::i-UR::urf::Building" => Class{}
12 13 14 15 |
# File 'lib/lutaml/uml_repository/index_builders/class_index.rb', line 12 def build_qualified_name_index index_document_classifiers index_package_classifiers end |
#build_stereotype_index ⇒ Object
Build the stereotype index
Creates a hash grouping classes by their stereotype:
"featureType" => [Class{}, Class{}],
"dataType" => [Class{}]
47 48 49 50 |
# File 'lib/lutaml/uml_repository/index_builders/class_index.rb', line 47 def build_stereotype_index index_document_stereotypes index_package_stereotypes end |
#has_stereotype?(classifier) ⇒ Boolean
107 108 109 |
# File 'lib/lutaml/uml_repository/index_builders/class_index.rb', line 107 def has_stereotype?(classifier) classifier.stereotype && !classifier.stereotype.empty? end |
#index_by_stereotype(classifiers) ⇒ Object
Index classifiers by their stereotypes
95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/lutaml/uml_repository/index_builders/class_index.rb', line 95 def index_by_stereotype(classifiers) return unless classifiers classifiers.each do |classifier| next unless has_stereotype?(classifier) Array(classifier.stereotype).each do |stereotype| (@stereotypes[stereotype] ||= []) << classifier end end end |
#index_classifier(classifier, package_path) ⇒ Object
80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/lutaml/uml_repository/index_builders/class_index.rb', line 80 def index_classifier(classifier, package_path) qualified_name = "#{package_path}::#{classifier.name}" @qualified_names[qualified_name] = classifier if classifier.xmi_id @class_to_qname[classifier.xmi_id] = qualified_name end @classes[classifier.xmi_id] = classifier if classifier.xmi_id (@simple_name_to_qnames[classifier.name] ||= []) << qualified_name (@package_to_classes[package_path] ||= []) << classifier end |
#index_classifiers(classifiers, package_path) ⇒ Object
Index classifiers (classes, data types, enums) by their qualified names
70 71 72 73 74 75 76 77 78 |
# File 'lib/lutaml/uml_repository/index_builders/class_index.rb', line 70 def index_classifiers(classifiers, package_path) return unless classifiers classifiers.each do |classifier| next unless classifier.name index_classifier(classifier, package_path) end end |
#index_document_classifiers ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/lutaml/uml_repository/index_builders/class_index.rb', line 17 def index_document_classifiers if @document.classes index_classifiers(@document.classes, IndexBuilder::ROOT_PACKAGE_NAME) end if @document.data_types index_classifiers(@document.data_types, IndexBuilder::ROOT_PACKAGE_NAME) end if @document.enums index_classifiers(@document.enums, IndexBuilder::ROOT_PACKAGE_NAME) end end |
#index_document_stereotypes ⇒ Object
52 53 54 55 56 |
# File 'lib/lutaml/uml_repository/index_builders/class_index.rb', line 52 def index_document_stereotypes index_by_stereotype(@document.classes) if @document.classes index_by_stereotype(@document.data_types) if @document.data_types index_by_stereotype(@document.enums) if @document.enums end |
#index_package_classifiers ⇒ Object
32 33 34 35 36 37 38 39 |
# File 'lib/lutaml/uml_repository/index_builders/class_index.rb', line 32 def index_package_classifiers traverse_packages(@document.packages, parent_path: IndexBuilder::ROOT_PACKAGE_NAME) do |package, path| index_classifiers(package.classes, path) if package.classes index_classifiers(package.data_types, path) if package.data_types index_classifiers(package.enums, path) if package.enums end end |
#index_package_stereotypes ⇒ Object
58 59 60 61 62 63 64 |
# File 'lib/lutaml/uml_repository/index_builders/class_index.rb', line 58 def index_package_stereotypes traverse_packages(@document.packages) do |package, _path| index_by_stereotype(package.classes) if package.classes index_by_stereotype(package.data_types) if package.data_types index_by_stereotype(package.enums) if package.enums end end |