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