class Dry::CLI::CommandRegistry

Command registry

@since 0.1.0 @api private

Public Class Methods

new() click to toggle source

@since 0.1.0 @api private

# File lib/dry/cli/command_registry.rb, line 14
def initialize
  @_mutex = Mutex.new
  @root = Node.new
end

Public Instance Methods

get(arguments) click to toggle source

@since 0.1.0 @api private

# File lib/dry/cli/command_registry.rb, line 41
def get(arguments)
  @_mutex.synchronize do
    node   = @root
    args   = []
    names  = []
    valid_leaf = nil
    result = LookupResult.new(node, args, names, node.leaf?)

    arguments.each_with_index do |token, i|
      tmp = node.lookup(token)

      if tmp.nil? && valid_leaf
        result = valid_leaf
        break
      elsif tmp.nil?
        result = LookupResult.new(node, args, names, false)
        break
      elsif tmp.leaf?
        args   = arguments[i + 1..-1]
        names  = arguments[0..i]
        node   = tmp
        result = LookupResult.new(node, args, names, true)
        valid_leaf = result
        break unless tmp.children?
      else
        names  = arguments[0..i]
        node   = tmp
        result = LookupResult.new(node, args, names, node.leaf?)
      end
    end

    result
  end
end
set(name, command, aliases) click to toggle source

@since 0.1.0 @api private

# File lib/dry/cli/command_registry.rb, line 21
def set(name, command, aliases)
  @_mutex.synchronize do
    node = @root
    name.split(/[[:space:]]/).each do |token|
      node = node.put(node, token)
    end

    node.aliases!(aliases)
    if command
      node.leaf!(command)
      node.subcommands!(command)
    end

    nil
  end
end