Class: Ea::Model::Document

Inherits:
Base
  • Object
show all
Defined in:
lib/ea/model/document.rb

Overview

Root container for a harmonized model. Source adapters build one of these; consumer adapters read from it.

Element identity is global within the document: every package, classifier, relationship, diagram, and diagram element has a unique id. References between elements are by id, so the document can be sharded cheaply (no need to walk a tree to resolve a reference).

Instance Method Summary collapse

Instance Method Details

#classifiers_in_package(package_id) ⇒ Object



70
71
72
# File 'lib/ea/model/document.rb', line 70

def classifiers_in_package(package_id)
  classifiers.select { |c| c.package_id == package_id }
end

#index_by_idObject

Flat lookup indexes, built lazily by consumers. Not serialized — they're derived from the element collections.



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/ea/model/document.rb', line 50

def index_by_id
  @index_by_id ||= begin
    idx = {}
    packages.each { |p| idx[p.id] = p }
    classifiers.each { |c| idx[c.id] = c }
    relationships.each { |r| idx[r.id] = r }
    stereotypes.each { |s| idx[s.id] = s }
    diagrams.each { |d| idx[d.id] = d }
    diagrams.each do |d|
      d.elements.each { |e| idx[e.id] = e }
      d.connectors.each { |c| idx[c.id] = c }
    end
    idx
  end
end

#relationships_for(classifier_id) ⇒ Object



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/ea/model/document.rb', line 74

def relationships_for(classifier_id)
  relationships.select do |r|
    case r
    when Association
      r.source_id == classifier_id || r.target_id == classifier_id
    when Generalization
      r.specific_id == classifier_id || r.general_id == classifier_id
    when Realization
      r.realizing_id == classifier_id || r.contract_id == classifier_id
    when Dependency
      r.client_id == classifier_id || r.supplier_id == classifier_id
    else
      false
    end
  end
end

#reset_indexesObject



91
92
93
# File 'lib/ea/model/document.rb', line 91

def reset_indexes
  @index_by_id = nil
end

#root_packagesObject



66
67
68
# File 'lib/ea/model/document.rb', line 66

def root_packages
  packages.select { |p| p.parent_id.nil? }
end