Module: LibraryTree::Registry

Defined in:
lib/library_tree/registry.rb

Overview

Thread-safe registry of tracked modules and their relationships

Class Method Summary collapse

Class Method Details

.allArray<LibraryTree::Node>

Return all known nodes

Returns:



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

Parameters:

  • mod (Module)

Returns:



33
34
35
# File 'lib/library_tree/registry.rb', line 33

def ensure_node(mod)
  nodes[mod] ||= Node.new(mod)
end

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

Parameters:

  • parent (Module)

    including module

  • child (Module)

    included module



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

Parameters:

  • mod (Module)


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

.mutexMutex

Return the registry mutex

Returns:

  • (Mutex)


10
11
12
# File 'lib/library_tree/registry.rb', line 10

def mutex
  @mutex ||= Mutex.new # rubocop:disable ThreadSafety/ClassInstanceVariable
end

.nodesHash{Module=>LibraryTree::Node}

Internal storage of nodes keyed by Module

Returns:



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

.rootsArray<LibraryTree::Node>

Return all root nodes

Returns:



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

Parameters:

  • mod (Module)

Returns:

  • (Boolean)


25
26
27
# File 'lib/library_tree/registry.rb', line 25

def tracked?(mod)
  nodes.key?(mod)
end