Class: DependencyTree
- Inherits:
-
Object
- Object
- DependencyTree
- Defined in:
- lib/dependency_tree.rb
Instance Attribute Summary collapse
-
#links ⇒ Object
readonly
Returns the value of attribute links.
-
#links_count ⇒ Object
readonly
Returns the value of attribute links_count.
Instance Method Summary collapse
- #add(source, dest, type = DependencyLinkType::UNKNOWN) ⇒ Object
- #connected?(source, dest) ⇒ Boolean
- #filter ⇒ Object
- #filter_links ⇒ Object
-
#initialize ⇒ DependencyTree
constructor
A new instance of DependencyTree.
- #isEmpty? ⇒ Boolean
- #isRegistered?(object) ⇒ Boolean
- #link_type(source, dest) ⇒ Object
- #links_with_types ⇒ Object
- #objects ⇒ Object
- #register(object, type = DependencyItemType::UNKNOWN) ⇒ Object
- #remove_link_type(link) ⇒ Object
- #type(object) ⇒ Object
Constructor Details
#initialize ⇒ DependencyTree
Returns a new instance of DependencyTree.
21 22 23 24 25 26 27 |
# File 'lib/dependency_tree.rb', line 21 def initialize @links_count = 0 @links = [] @registry = {} @types_registry = {} @links_registry = {} end |
Instance Attribute Details
#links ⇒ Object (readonly)
Returns the value of attribute links.
19 20 21 |
# File 'lib/dependency_tree.rb', line 19 def links @links end |
#links_count ⇒ Object (readonly)
Returns the value of attribute links_count.
18 19 20 |
# File 'lib/dependency_tree.rb', line 18 def links_count @links_count end |
Instance Method Details
#add(source, dest, type = DependencyLinkType::UNKNOWN) ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/dependency_tree.rb', line 29 def add(source, dest, type = DependencyLinkType::UNKNOWN) register source register dest register_link(source, dest, type) return if connected?(source, dest) @links_count += 1 @links += [{source: source, dest: dest}] end |
#connected?(source, dest) ⇒ Boolean
41 42 43 |
# File 'lib/dependency_tree.rb', line 41 def connected?(source, dest) @links.any? {|item| item[:source] == source && item[:dest] == dest} end |
#filter ⇒ Object
80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/dependency_tree.rb', line 80 def filter @types_registry.each { |item, type| next if yield item, type @types_registry.delete(item) @registry.delete(item) selected_links = @links.select { |link| link[:source] != item && link[:dest] != item } filtered_links = @links.select { |link| link[:source] == item || link[:dest] == item } filtered_links.each { |link| remove_link_type(link) } @links = selected_links } end |
#filter_links ⇒ Object
92 93 94 95 96 |
# File 'lib/dependency_tree.rb', line 92 def filter_links @links = @links.select { |link| yield link[:source], link[:dest], link_type(link[:source], link[:dest]) } end |
#isEmpty? ⇒ Boolean
45 46 47 |
# File 'lib/dependency_tree.rb', line 45 def isEmpty? @links_count.zero? end |
#isRegistered?(object) ⇒ Boolean
56 57 58 |
# File 'lib/dependency_tree.rb', line 56 def isRegistered?(object) !@registry[object].nil? end |
#link_type(source, dest) ⇒ Object
68 69 70 |
# File 'lib/dependency_tree.rb', line 68 def link_type(source, dest) @links_registry[link_key(source, dest)] || DependencyLinkType::UNKNOWN end |
#links_with_types ⇒ Object
72 73 74 75 76 77 78 |
# File 'lib/dependency_tree.rb', line 72 def links_with_types @links.map do |l| type = link_type(l[:source], l[:dest]) l[:type] = type unless type == DependencyLinkType::UNKNOWN l end end |
#objects ⇒ Object
64 65 66 |
# File 'lib/dependency_tree.rb', line 64 def objects @types_registry.keys end |
#register(object, type = DependencyItemType::UNKNOWN) ⇒ Object
49 50 51 52 53 54 |
# File 'lib/dependency_tree.rb', line 49 def register(object, type = DependencyItemType::UNKNOWN) @registry[object] = true if @types_registry[object].nil? || @types_registry[object] == DependencyItemType::UNKNOWN @types_registry[object] = type end end |
#remove_link_type(link) ⇒ Object
98 99 100 101 102 |
# File 'lib/dependency_tree.rb', line 98 def remove_link_type(link) source, dest = link[:source], link[:dest] return unless source && dest @links_registry.delete(link_key(source, dest)) end |
#type(object) ⇒ Object
60 61 62 |
# File 'lib/dependency_tree.rb', line 60 def type(object) @types_registry[object] end |