class CLI::Kit::CommandRegistry

Attributes

aliases[R]
commands[R]

Public Class Methods

new(default:, contextual_resolver: nil) click to toggle source
# File lib/cli/kit/command_registry.rb, line 22
def initialize(default:, contextual_resolver: nil)
  @commands = {}
  @aliases  = {}
  @default = default
  @contextual_resolver = contextual_resolver || NullContextualResolver
end

Public Instance Methods

add(const, name) click to toggle source
# File lib/cli/kit/command_registry.rb, line 35
def add(const, name)
  commands[name] = const
end
add_alias(from, to) click to toggle source
# File lib/cli/kit/command_registry.rb, line 44
def add_alias(from, to)
  aliases[from] = to unless aliases[from]
end
command_names() click to toggle source
# File lib/cli/kit/command_registry.rb, line 48
def command_names
  @contextual_resolver.command_names + commands.keys
end
exist?(name) click to toggle source
# File lib/cli/kit/command_registry.rb, line 52
def exist?(name)
  !resolve_command(name).first.nil?
end
lookup_command(name) click to toggle source
# File lib/cli/kit/command_registry.rb, line 39
def lookup_command(name)
  name = @default if name.to_s.empty?
  resolve_command(name)
end
resolved_commands() click to toggle source
# File lib/cli/kit/command_registry.rb, line 29
def resolved_commands
  @commands.each_with_object({}) do |(k, v), a|
    a[k] = resolve_class(v)
  end
end

Private Instance Methods

resolve_alias(name) click to toggle source
# File lib/cli/kit/command_registry.rb, line 58
def resolve_alias(name)
  aliases[name] || @contextual_resolver.aliases.fetch(name, name)
end
resolve_class(class_or_proc) click to toggle source
# File lib/cli/kit/command_registry.rb, line 83
def resolve_class(class_or_proc)
  if class_or_proc.is_a?(Class)
    class_or_proc
  elsif class_or_proc.respond_to?(:call)
    class_or_proc.call
  else
    class_or_proc
  end
end
resolve_command(name) click to toggle source
# File lib/cli/kit/command_registry.rb, line 62
def resolve_command(name)
  name = resolve_alias(name)
  resolve_global_command(name) || \
    resolve_contextual_command(name) || \
    [nil, name]
end
resolve_contextual_command(name) click to toggle source
# File lib/cli/kit/command_registry.rb, line 77
def resolve_contextual_command(name)
  found = @contextual_resolver.command_names.include?(name)
  return nil unless found
  [@contextual_resolver.command_class(name), name]
end
resolve_global_command(name) click to toggle source
# File lib/cli/kit/command_registry.rb, line 69
def resolve_global_command(name)
  klass = resolve_class(commands.fetch(name, nil))
  return nil unless klass&.defined?
  [klass, name]
rescue NameError
  nil
end