Class: Archsight::Annotations::ComputedRelationResolver
- Inherits:
-
Object
- Object
- Archsight::Annotations::ComputedRelationResolver
- Defined in:
- lib/archsight/annotations/relation_resolver.rb
Overview
ComputedRelationResolver provides methods for traversing resource relations. It mirrors the relation traversal operators in the query language:
-
outgoing (->): Direct outgoing relations
-
outgoing_transitive (~>): Transitive outgoing relations
-
incoming (<-): Direct incoming relations
-
incoming_transitive (<~): Transitive incoming relations
Filter parameter can be:
-
Symbol: Simple kind filter (e.g., :TechnologyArtifact)
-
String: Query selector (e.g., ‘TechnologyArtifact: activity/status == “active”’)
Constant Summary collapse
- MAX_DEPTH =
10
Instance Method Summary collapse
-
#incoming(filter = nil) ⇒ Array
Get direct incoming relations (<- Kind) Uses the references array maintained during relation resolution.
-
#incoming_transitive(filter = nil, max_depth: MAX_DEPTH) ⇒ Array
Get transitive incoming relations (<~ Kind) Follows all reverse relation chains up to max_depth.
-
#initialize(instance, database) ⇒ ComputedRelationResolver
constructor
A new instance of ComputedRelationResolver.
-
#outgoing(filter = nil) ⇒ Array
Get direct outgoing relations (-> Kind).
-
#outgoing_transitive(filter = nil, max_depth: MAX_DEPTH) ⇒ Array
Get transitive outgoing relations (~> Kind) Follows all relation chains up to max_depth.
Constructor Details
#initialize(instance, database) ⇒ ComputedRelationResolver
Returns a new instance of ComputedRelationResolver.
16 17 18 19 20 |
# File 'lib/archsight/annotations/relation_resolver.rb', line 16 def initialize(instance, database) @instance = instance @database = database @query_cache = {} end |
Instance Method Details
#incoming(filter = nil) ⇒ Array
Get direct incoming relations (<- Kind) Uses the references array maintained during relation resolution
55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/archsight/annotations/relation_resolver.rb', line 55 def incoming(filter = nil) refs = @instance.references || [] # Extract instances from reference hashes instances = refs.map { |ref| ref.is_a?(Hash) ? ref[:instance] : ref }.compact if filter.nil? instances else instances.select { |ref| matches_filter?(ref, filter) } end end |
#incoming_transitive(filter = nil, max_depth: MAX_DEPTH) ⇒ Array
Get transitive incoming relations (<~ Kind) Follows all reverse relation chains up to max_depth
72 73 74 75 76 77 78 |
# File 'lib/archsight/annotations/relation_resolver.rb', line 72 def incoming_transitive(filter = nil, max_depth: MAX_DEPTH) visited = Set.new results = [] collect_transitive_incoming(@instance, filter, visited, 0, max_depth, results) results.uniq end |
#outgoing(filter = nil) ⇒ Array
Get direct outgoing relations (-> Kind)
25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/archsight/annotations/relation_resolver.rb', line 25 def outgoing(filter = nil) results = [] @instance.class.relations.each do |_verb, kind_name, _klass_name| rels = @instance.relations(_verb, kind_name) rels.each do |rel| results << rel if matches_filter?(rel, filter) end end results.uniq end |
#outgoing_transitive(filter = nil, max_depth: MAX_DEPTH) ⇒ Array
Get transitive outgoing relations (~> Kind) Follows all relation chains up to max_depth
43 44 45 46 47 48 49 |
# File 'lib/archsight/annotations/relation_resolver.rb', line 43 def outgoing_transitive(filter = nil, max_depth: MAX_DEPTH) visited = Set.new results = [] collect_transitive_outgoing(@instance, filter, visited, 0, max_depth, results) results.uniq end |