Class: Opencdd::Visitor

Inherits:
Object
  • Object
show all
Defined in:
lib/opencdd/visitor.rb

Direct Known Subclasses

Exporters::Json, Exporters::Mermaid

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeVisitor

Returns a new instance of Visitor.



9
10
11
# File 'lib/opencdd/visitor.rb', line 9

def initialize
  @seen = Set.new
end

Instance Attribute Details

#seenObject (readonly)

Returns the value of attribute seen.



7
8
9
# File 'lib/opencdd/visitor.rb', line 7

def seen
  @seen
end

Instance Method Details

#each_sorted(entities) ⇒ Object

Single source of truth for sort-by-code traversal. Was duplicated as .sort_by { |x| x.code.to_s } in 7 methods.



60
61
62
# File 'lib/opencdd/visitor.rb', line 60

def each_sorted(entities)
  entities.sort_by { |e| e.code.to_s }.each { |e| yield e }
end

#reset!Object



88
89
90
91
# File 'lib/opencdd/visitor.rb', line 88

def reset!
  @seen.clear
  self
end

#visit_class(klass) ⇒ Object



28
29
30
31
32
# File 'lib/opencdd/visitor.rb', line 28

def visit_class(klass)
  return if @seen.include?(klass.irdi)
  @seen << klass.irdi
  each_sorted(klass.children) { |c| visit_class(c) }
end

#visit_classes(database) ⇒ Object



24
25
26
# File 'lib/opencdd/visitor.rb', line 24

def visit_classes(database)
  each_sorted(database.root_classes) { |k| visit_class(k) }
end

#visit_database(database) ⇒ Object



13
14
15
16
17
18
19
20
21
22
# File 'lib/opencdd/visitor.rb', line 13

def visit_database(database)
  visit_classes(database)
  visit_properties(database)
  visit_units(database)
  visit_value_lists(database)
  visit_value_terms(database)
  visit_relations(database)
  visit_view_controls(database)
  self
end

#visit_properties(database) ⇒ Object



34
35
36
# File 'lib/opencdd/visitor.rb', line 34

def visit_properties(database)
  each_sorted(database.properties) { |p| visit_property(p) }
end

#visit_property(prop) ⇒ Object



64
65
66
# File 'lib/opencdd/visitor.rb', line 64

def visit_property(prop)
  @seen << prop.irdi if prop.irdi
end

#visit_relation(rel) ⇒ Object



80
81
82
# File 'lib/opencdd/visitor.rb', line 80

def visit_relation(rel)
  @seen << rel.irdi if rel.irdi
end

#visit_relations(database) ⇒ Object



50
51
52
# File 'lib/opencdd/visitor.rb', line 50

def visit_relations(database)
  each_sorted(database.relations) { |r| visit_relation(r) }
end

#visit_unit(unit) ⇒ Object



68
69
70
# File 'lib/opencdd/visitor.rb', line 68

def visit_unit(unit)
  @seen << unit.irdi if unit.irdi
end

#visit_units(database) ⇒ Object



38
39
40
# File 'lib/opencdd/visitor.rb', line 38

def visit_units(database)
  each_sorted(database.units) { |u| visit_unit(u) }
end

#visit_value_list(vl) ⇒ Object



72
73
74
# File 'lib/opencdd/visitor.rb', line 72

def visit_value_list(vl)
  @seen << vl.irdi if vl.irdi
end

#visit_value_lists(database) ⇒ Object



42
43
44
# File 'lib/opencdd/visitor.rb', line 42

def visit_value_lists(database)
  each_sorted(database.value_lists) { |v| visit_value_list(v) }
end

#visit_value_term(vt) ⇒ Object



76
77
78
# File 'lib/opencdd/visitor.rb', line 76

def visit_value_term(vt)
  @seen << vt.irdi if vt.irdi
end

#visit_value_terms(database) ⇒ Object



46
47
48
# File 'lib/opencdd/visitor.rb', line 46

def visit_value_terms(database)
  each_sorted(database.value_terms) { |v| visit_value_term(v) }
end

#visit_view_control(vc) ⇒ Object



84
85
86
# File 'lib/opencdd/visitor.rb', line 84

def visit_view_control(vc)
  @seen << vc.irdi if vc.irdi
end

#visit_view_controls(database) ⇒ Object



54
55
56
# File 'lib/opencdd/visitor.rb', line 54

def visit_view_controls(database)
  each_sorted(database.view_controls) { |v| visit_view_control(v) }
end