Class: Ea::Model::Document
- 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
- #classifiers_in_package(package_id) ⇒ Object
-
#index_by_id ⇒ Object
Flat lookup indexes, built lazily by consumers.
- #relationships_for(classifier_id) ⇒ Object
- #reset_indexes ⇒ Object
- #root_packages ⇒ Object
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_id ⇒ Object
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_indexes ⇒ Object
91 92 93 |
# File 'lib/ea/model/document.rb', line 91 def reset_indexes @index_by_id = nil end |
#root_packages ⇒ Object
66 67 68 |
# File 'lib/ea/model/document.rb', line 66 def root_packages packages.select { |p| p.parent_id.nil? } end |