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:



94
95
96
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 94

def abstract_objects
  where(&:abstract?)
end

#classesArray<Models::EaObject>

Get all UML classes

Returns:



52
53
54
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 52

def classes
  find_by_type("Class")
end

#componentsArray<Models::EaObject>

Get all components

Returns:



73
74
75
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 73

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:



134
135
136
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 134

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

#data_typesArray<Models::EaObject>

Get all data types

Returns:



80
81
82
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 80

def data_types
  find_by_type("DataType")
end

#enumerationsArray<Models::EaObject>

Get all enumerations

Returns:



66
67
68
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 66

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:



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

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:



37
38
39
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 37

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:



45
46
47
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 45

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:



29
30
31
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 29

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:



182
183
184
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 182

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

#interfacesArray<Models::EaObject>

Get all interfaces

Returns:



59
60
61
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 59

def interfaces
  find_by_type("Interface")
end

#leaf_objectsArray<Models::EaObject>

Get all leaf objects

Returns:



108
109
110
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 108

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:



142
143
144
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 142

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



167
168
169
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 167

def object_types
  distinct(:object_type).compact
end

#package_statisticsHash<Integer, Integer>

Get statistics by package

Returns:

  • (Hash<Integer, Integer>)

    Count by package ID



160
161
162
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 160

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

#packagesArray<Models::EaObject>

Get all packages

Returns:



87
88
89
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 87

def packages
  find_by_type("Package")
end

#private_objectsArray<Models::EaObject>

Get private objects

Returns:



196
197
198
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 196

def private_objects
  find_by_visibility("Private")
end

#protected_objectsArray<Models::EaObject>

Get protected objects

Returns:



203
204
205
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 203

def protected_objects
  find_by_visibility("Protected")
end

#public_objectsArray<Models::EaObject>

Get public objects

Returns:



189
190
191
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 189

def public_objects
  find_by_visibility("Public")
end

#root_objectsArray<Models::EaObject>

Get all root objects

Returns:



101
102
103
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 101

def root_objects
  where(&:root?)
end

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

Search objects by name or alias

Parameters:

  • query (String)

    Search query

Returns:



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

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



174
175
176
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 174

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



153
154
155
# File 'lib/lutaml/qea/repositories/object_repository.rb', line 153

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