Module: LibraryTree::Registry
- Defined in:
- lib/library_tree/registry.rb
Overview
Thread-safe registry of tracked modules and their relationships
Class Method Summary collapse
-
.all ⇒ Array<LibraryTree::Node>
Return all known nodes.
-
.ensure_node(mod) ⇒ LibraryTree::Node
Ensure a Node exists for the given module, creating it if needed.
-
.link(parent, child) ⇒ void
Create a link parent -> child (including_module -> included_module) Ruby 1.9.2+ compatible: use positional parameters instead of keyword arguments.
-
.mark_tracked(mod) ⇒ void
Mark a module as tracked.
-
.mutex ⇒ Mutex
Return the registry mutex.
-
.nodes ⇒ Hash{Module=>LibraryTree::Node}
Internal storage of nodes keyed by Module.
-
.reset! ⇒ void
Reset the registry to an empty state.
-
.roots ⇒ Array<LibraryTree::Node>
Return all root nodes.
-
.tracked?(mod) ⇒ Boolean
Check if a module is being tracked.
Class Method Details
.all ⇒ Array<LibraryTree::Node>
Return all known nodes
74 75 76 77 78 |
# File 'lib/library_tree/registry.rb', line 74 def all mutex.synchronize do nodes.values end end |
.ensure_node(mod) ⇒ LibraryTree::Node
Ensure a Node exists for the given module, creating it if needed
33 34 35 |
# File 'lib/library_tree/registry.rb', line 33 def ensure_node(mod) nodes[mod] ||= Node.new(mod) end |
.link(parent, child) ⇒ void
This method returns an undefined value.
Create a link parent -> child (including_module -> included_module) Ruby 1.9.2+ compatible: use positional parameters instead of keyword arguments
53 54 55 56 57 58 59 60 |
# File 'lib/library_tree/registry.rb', line 53 def link(parent, child) mutex.synchronize do pnode = ensure_node(parent) cnode = ensure_node(child) pnode.add_child(cnode) cnode.add_parent(pnode) end end |
.mark_tracked(mod) ⇒ void
This method returns an undefined value.
Mark a module as tracked
41 42 43 44 45 |
# File 'lib/library_tree/registry.rb', line 41 def mark_tracked(mod) mutex.synchronize do ensure_node(mod) end end |
.mutex ⇒ Mutex
Return the registry mutex
10 11 12 |
# File 'lib/library_tree/registry.rb', line 10 def mutex @mutex ||= Mutex.new # rubocop:disable ThreadSafety/ClassInstanceVariable end |
.nodes ⇒ Hash{Module=>LibraryTree::Node}
Internal storage of nodes keyed by Module
17 18 19 |
# File 'lib/library_tree/registry.rb', line 17 def nodes @nodes ||= {} # rubocop:disable ThreadSafety/ClassInstanceVariable end |
.reset! ⇒ void
This method returns an undefined value.
Reset the registry to an empty state
83 84 85 86 87 |
# File 'lib/library_tree/registry.rb', line 83 def reset! mutex.synchronize do @nodes = {} end end |
.roots ⇒ Array<LibraryTree::Node>
Return all root nodes
65 66 67 68 69 |
# File 'lib/library_tree/registry.rb', line 65 def roots mutex.synchronize do nodes.values.select(&:root?) end end |
.tracked?(mod) ⇒ Boolean
Check if a module is being tracked
25 26 27 |
# File 'lib/library_tree/registry.rb', line 25 def tracked?(mod) nodes.key?(mod) end |