Module: Pangea::ResourceRegistry

Defined in:
lib/pangea/resource_registry.rb

Overview

Global registry for resource modules that auto-register when loaded. Thread-safe: all mutation and read paths are guarded by a Mutex.

Class Method Summary collapse

Class Method Details

.clear!Object

Clear registry (useful for testing)



39
40
41
42
43
44
# File 'lib/pangea/resource_registry.rb', line 39

def clear!
  @mutex.synchronize do
    @registered_modules.clear
    @provider_modules.clear
  end
end

.modules_for(provider) ⇒ Object

Get modules for a specific provider



61
62
63
# File 'lib/pangea/resource_registry.rb', line 61

def modules_for(provider)
  @mutex.synchronize { @provider_modules[provider].to_a }
end

.register(provider, mod) ⇒ Object

Support provider-based registration used by individual resources



52
53
54
55
56
57
58
# File 'lib/pangea/resource_registry.rb', line 52

def register(provider, mod)
  @mutex.synchronize do
    @provider_modules[provider].add(mod)
    # Also add to global registry for backward compatibility
    @registered_modules.add(mod)
  end
end

.register_module(mod) ⇒ Object

Register a module to be available in template contexts



29
30
31
# File 'lib/pangea/resource_registry.rb', line 29

def register_module(mod)
  @mutex.synchronize { @registered_modules.add(mod) }
end

.registered?(mod) ⇒ Boolean

Check if a module is registered

Returns:

  • (Boolean)


47
48
49
# File 'lib/pangea/resource_registry.rb', line 47

def registered?(mod)
  @mutex.synchronize { @registered_modules.include?(mod) }
end

.registered_modulesObject

Get all registered modules



34
35
36
# File 'lib/pangea/resource_registry.rb', line 34

def registered_modules
  @mutex.synchronize { @registered_modules.to_a }
end

.statsObject

Get registry statistics



66
67
68
69
70
71
72
73
74
# File 'lib/pangea/resource_registry.rb', line 66

def stats
  @mutex.synchronize do
    {
      total_modules: @registered_modules.size,
      modules: @registered_modules.map(&:name),
      by_provider: @provider_modules.transform_values(&:size)
    }
  end
end