Class: Pvectl::Commands::ResourceRegistry Abstract

Inherits:
Object
  • Object
show all
Defined in:
lib/pvectl/commands/resource_registry.rb

Overview

This class is abstract.

Subclass for each command namespace (Get, Top, Logs).

Abstract base class for command resource registries.

Provides handler registration and lookup. Each subclass maintains its own isolated set of handlers via self.inherited callback.

Examples:

Creating a command-specific registry

module Pvectl::Commands::Logs
  class ResourceRegistry < Pvectl::Commands::ResourceRegistry; end
end

Class Method Summary collapse

Class Method Details

.for(resource_type) ⇒ Object?

Returns a new handler instance for the resource type.

Parameters:

  • resource_type (String, Symbol, nil)

    resource type name

Returns:

  • (Object, nil)

    handler instance or nil



41
42
43
44
45
46
# File 'lib/pvectl/commands/resource_registry.rb', line 41

def for(resource_type)
  return nil if resource_type.nil?

  handler_class = @handlers[resource_type.to_s]
  handler_class&.new
end

.inherited(subclass) ⇒ Object



20
21
22
23
# File 'lib/pvectl/commands/resource_registry.rb', line 20

def self.inherited(subclass)
  super
  subclass.instance_variable_set(:@handlers, {})
end

.register(resource_type, handler_class, aliases: []) ⇒ void

This method returns an undefined value.

Registers a handler class for a resource type.

Parameters:

  • resource_type (String, Symbol)

    primary resource type name

  • handler_class (Class)

    handler class

  • aliases (Array<String, Symbol>) (defaults to: [])

    alternative names



32
33
34
35
# File 'lib/pvectl/commands/resource_registry.rb', line 32

def register(resource_type, handler_class, aliases: [])
  @handlers[resource_type.to_s] = handler_class
  aliases.each { |a| @handlers[a.to_s] = handler_class }
end

.registered?(resource_type) ⇒ Boolean

Checks if a resource type is registered.

Parameters:

  • resource_type (String, Symbol)

    resource type name

Returns:

  • (Boolean)


59
60
61
# File 'lib/pvectl/commands/resource_registry.rb', line 59

def registered?(resource_type)
  @handlers.key?(resource_type.to_s)
end

.registered_typesArray<String>

Returns all registered type names (including aliases).

Returns:

  • (Array<String>)

    registered type names



51
52
53
# File 'lib/pvectl/commands/resource_registry.rb', line 51

def registered_types
  @handlers.keys
end

.reset!void

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

This method returns an undefined value.

Clears all registered handlers.



67
68
69
# File 'lib/pvectl/commands/resource_registry.rb', line 67

def reset!
  @handlers = {}
end