Class: Lutaml::UmlRepository::Queries::DiagramQuery
- Defined in:
- lib/lutaml/uml_repository/queries/diagram_query.rb
Overview
Query service for diagram operations.
Provides methods to find and list diagrams from packages using the diagram_index which maps package IDs/paths to diagram collections.
Instance Method Summary collapse
-
#all ⇒ Array<Diagram>
Get all diagrams from all packages.
-
#find_by_name(diagram_name) ⇒ Object
Find a diagram by its name.
-
#find_by_package(package_id) ⇒ Array<Diagram>
Find diagrams containing a specific package by its XMI ID.
-
#find_containing_class(class_xmi_id) ⇒ Array<Diagram>
Find diagrams containing a specific class by its XMI ID.
-
#find_package_containing_class(class_xmi_id) ⇒ Lutaml::Uml::Package?
Find the package containing a specific class by its XMI ID.
-
#in_package(package_path_string) ⇒ Array<Diagram>
Get diagrams in a specific package.
Methods inherited from BaseQuery
Constructor Details
This class inherits a constructor from Lutaml::UmlRepository::Queries::BaseQuery
Instance Method Details
#all ⇒ Array<Diagram>
Get all diagrams from all packages.
99 100 101 102 103 104 105 106 107 |
# File 'lib/lutaml/uml_repository/queries/diagram_query.rb', line 99 def all result = [] indexes[:diagram_index].each_value do |diagrams| result.concat(diagrams) end result end |
#find_by_name(diagram_name) ⇒ Object
Find a diagram by its name.
54 55 56 57 58 |
# File 'lib/lutaml/uml_repository/queries/diagram_query.rb', line 54 def find_by_name(diagram_name) indexes[:diagram_index].values.filter_map do |diagrams| diagrams.select { |diagram| diagram.name == diagram_name } end.flatten.first end |
#find_by_package(package_id) ⇒ Array<Diagram>
Find diagrams containing a specific package by its XMI ID.
64 65 66 67 68 |
# File 'lib/lutaml/uml_repository/queries/diagram_query.rb', line 64 def find_by_package(package_id) indexes[:diagram_index].values.filter_map do |diagrams| diagrams.select { |diagram| diagram.package_id == package_id } end.flatten end |
#find_containing_class(class_xmi_id) ⇒ Array<Diagram>
Find diagrams containing a specific class by its XMI ID.
74 75 76 77 78 79 |
# File 'lib/lutaml/uml_repository/queries/diagram_query.rb', line 74 def find_containing_class(class_xmi_id) package = find_package_containing_class(class_xmi_id) return [] unless package find_by_package(package.xmi_id) end |
#find_package_containing_class(class_xmi_id) ⇒ Lutaml::Uml::Package?
Find the package containing a specific class by its XMI ID.
85 86 87 88 89 90 91 |
# File 'lib/lutaml/uml_repository/queries/diagram_query.rb', line 85 def find_package_containing_class(class_xmi_id) qualified_name, _klass = find_class_by_id(class_xmi_id) return nil unless qualified_name package_path = qualified_name.split("::")[0..-2].join("::") indexes[:package_paths][package_path] end |
#in_package(package_path_string) ⇒ Array<Diagram>
Get diagrams in a specific package.
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/lutaml/uml_repository/queries/diagram_query.rb', line 30 def in_package(package_path_string) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity return [] if package_path_string.nil? || package_path_string.empty? # Try to find diagrams by path diagrams = indexes[:diagram_index][package_path_string] return diagrams if diagrams # Try to find the package and use its ID package = indexes[:package_paths][package_path_string] return [] unless package package_id = package.respond_to?(:xmi_id) ? package.xmi_id : nil return [] unless package_id indexes[:diagram_index][package_id] || [] end |