lib/cli/kit/command_registry.rb in cli-kit-3.0.0.pre vs lib/cli/kit/command_registry.rb in cli-kit-3.0.0
- old
+ new
@@ -17,15 +17,15 @@
def self.command_class(_name)
nil
end
end
- def initialize(default:, contextual_resolver: NullContextualResolver)
+ def initialize(default:, contextual_resolver: nil)
@commands = {}
@aliases = {}
@default = default
- @contextual_resolver = contextual_resolver
+ @contextual_resolver = contextual_resolver || NullContextualResolver
end
def resolved_commands
@commands.each_with_object({}) do |(k, v), a|
a[k] = resolve_class(v)
@@ -43,50 +43,51 @@
def add_alias(from, to)
aliases[from] = to unless aliases[from]
end
- def resolve_command(name)
- resolve_global_command(name) || \
- resolve_contextual_command(name) || \
- [nil, resolve_alias(name)]
+ def command_names
+ @contextual_resolver.command_names + commands.keys
end
+ def exist?(name)
+ !resolve_command(name).first.nil?
+ end
+
+ private
+
def resolve_alias(name)
aliases[name] || @contextual_resolver.aliases.fetch(name, name)
end
- def resolve_global_command(name)
+ def resolve_command(name)
name = resolve_alias(name)
- klass = resolve_class(commands.fetch(name, ""))
- return nil unless klass.defined? # (BaseCommand)
+ resolve_global_command(name) || \
+ resolve_contextual_command(name) || \
+ [nil, name]
+ end
+
+ def resolve_global_command(name)
+ klass = resolve_class(commands.fetch(name, nil))
+ return nil unless klass
[klass, name]
rescue NameError
nil
end
def resolve_contextual_command(name)
- name = resolve_alias(name)
found = @contextual_resolver.command_names.include?(name)
return nil unless found
[@contextual_resolver.command_class(name), name]
end
- def command_names
- @contextual_resolver.command_names + commands.keys
- end
-
- def exist?(name)
- !resolve_command(name).first.nil?
- end
-
- private
-
def resolve_class(class_or_proc)
if class_or_proc.is_a?(Class)
class_or_proc
- else
+ elsif class_or_proc.respond_to?(:call)
class_or_proc.call
+ else
+ class_or_proc
end
end
end
end
end