Class: Lutaml::Qea::Repositories::ObjectRepository

Inherits:
BaseRepository show all
Defined in:
lib/lutaml/qea/repositories/object_repository.rb

Overview

Repository for EaObject collection with type-specific queries

This repository provides convenient methods for querying objects by type, package, and other common criteria.

Examples:

Query by type

classes = repository.find_by_type("Class")
interfaces = repository.interfaces

Query by package

pkg_objects = repository.find_by_package(5)

Instance Attribute Summary

Attributes inherited from BaseRepository

#records

Instance Method Summary collapse

Methods inherited from BaseRepository

#all, #any?, #count, #distinct, #each, #empty?, #find, #find_by_key, #find_first, #group_by, #initialize, #none?, #order_by, #pluck, #size, #where

Constructor Details

This class inherits a constructor from Lutaml::Qea::Repositories::BaseRepository

Instance Method Details

#abstract_objectsArray<Models::EaObject>

Get all abstract objects

Returns:



92
93
94
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 92

def abstract_objects
  where(&:abstract?)
end

#classesArray<Models::EaObject>

Get all UML classes

Returns:



50
51
52
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 50

def classes
  find_by_type("Class")
end

#componentsArray<Models::EaObject>

Get all components

Returns:



71
72
73
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 71

def components
  find_by_type("Component")
end

#created_after(date) ⇒ Array<Models::EaObject>

Get objects created after a date

Parameters:

  • date (String)

    Date in ISO format

Returns:



132
133
134
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 132

def created_after(date)
  where { |obj| obj.createddate && obj.createddate > date }
end

#data_typesArray<Models::EaObject>

Get all data types

Returns:



78
79
80
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 78

def data_types
  find_by_type("DataType")
end

#enumerationsArray<Models::EaObject>

Get all enumerations

Returns:



64
65
66
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 64

def enumerations
  find_by_type("Enumeration")
end

#find_by_name(pattern) ⇒ Array<Models::EaObject>

Find objects by name pattern

Examples:

String match

repository.find_by_name("MyClass")

Regex match

repository.find_by_name(/^Test/)

Parameters:

  • pattern (String, Regexp)

    Name pattern to match

Returns:



120
121
122
123
124
125
126
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 120

def find_by_name(pattern)
  if pattern.is_a?(Regexp)
    where { |obj| obj.name =~ pattern }
  else
    where(name: pattern)
  end
end

#find_by_package(package_id) ⇒ Array<Models::EaObject>

Find objects by package ID

Parameters:

  • package_id (Integer)

    The package ID

Returns:



35
36
37
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 35

def find_by_package(package_id)
  where(package_id: package_id)
end

#find_by_stereotype(stereotype) ⇒ Array<Models::EaObject>

Find objects by stereotype

Parameters:

  • stereotype (String)

    The stereotype name

Returns:



43
44
45
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 43

def find_by_stereotype(stereotype)
  where(stereotype: stereotype)
end

#find_by_type(object_type) ⇒ Array<Models::EaObject>

Find objects by type

(e.g., “Class”, “Interface”)

Examples:

repository.find_by_type("Class")
repository.find_by_type("Interface")

Parameters:

  • object_type (String)

    The object type

Returns:



27
28
29
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 27

def find_by_type(object_type)
  where(object_type: object_type)
end

#find_by_visibility(visibility) ⇒ Array<Models::EaObject>

Find objects by visibility

Parameters:

  • visibility (String)

    Visibility (e.g., “Public”, “Private”)

Returns:



180
181
182
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 180

def find_by_visibility(visibility)
  where(visibility: visibility)
end

#interfacesArray<Models::EaObject>

Get all interfaces

Returns:



57
58
59
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 57

def interfaces
  find_by_type("Interface")
end

#leaf_objectsArray<Models::EaObject>

Get all leaf objects

Returns:



106
107
108
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 106

def leaf_objects
  where(&:leaf?)
end

#modified_after(date) ⇒ Array<Models::EaObject>

Get objects modified after a date

Parameters:

  • date (String)

    Date in ISO format

Returns:



140
141
142
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 140

def modified_after(date)
  where { |obj| obj.modifieddate && obj.modifieddate > date }
end

#object_typesArray<String>

Get all object types in the collection

Returns:

  • (Array<String>)

    Unique object types



165
166
167
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 165

def object_types
  distinct(:object_type).compact
end

#package_statisticsHash<Integer, Integer>

Get statistics by package

Returns:

  • (Hash<Integer, Integer>)

    Count by package ID



158
159
160
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 158

def package_statistics
  group_by(:package_id).transform_values(&:size)
end

#packagesArray<Models::EaObject>

Get all packages

Returns:



85
86
87
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 85

def packages
  find_by_type("Package")
end

#private_objectsArray<Models::EaObject>

Get private objects

Returns:



194
195
196
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 194

def private_objects
  find_by_visibility("Private")
end

#protected_objectsArray<Models::EaObject>

Get protected objects

Returns:



201
202
203
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 201

def protected_objects
  find_by_visibility("Protected")
end

#public_objectsArray<Models::EaObject>

Get public objects

Returns:



187
188
189
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 187

def public_objects
  find_by_visibility("Public")
end

#root_objectsArray<Models::EaObject>

Get all root objects

Returns:



99
100
101
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 99

def root_objects
  where(&:root?)
end

#search(query) ⇒ Array<Models::EaObject>

Search objects by name or alias

Parameters:

  • query (String)

    Search query

Returns:



209
210
211
212
213
214
215
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 209

def search(query)
  query_downcase = query.downcase
  where do |obj|
    obj.name&.downcase&.include?(query_downcase) ||
      obj.alias&.downcase&.include?(query_downcase)
  end
end

#stereotypesArray<String>

Get all stereotypes in the collection

Returns:

  • (Array<String>)

    Unique stereotypes



172
173
174
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 172

def stereotypes
  distinct(:stereotype).compact
end

#type_statisticsHash<String, Integer>

Get statistics by object type

Examples:

repository.type_statistics
# => {"Class" => 42, "Interface" => 15, ...}

Returns:

  • (Hash<String, Integer>)

    Count by object type



151
152
153
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 151

def type_statistics
  group_by(:object_type).transform_values(&:size)
end