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