class Hanami::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/hanami/cli/command_registry.rb, line 13
def initialize
  @root = Node.new
end

Public Instance Methods

get(arguments) click to toggle source

@since 0.1.0 @api private

rubocop:disable Metrics/AbcSize rubocop:disable Metrics/MethodLength

# File lib/hanami/cli/command_registry.rb, line 37
def get(arguments)
  node   = @root
  args   = []
  names  = []
  result = LookupResult.new(node, args, names, node.leaf?)

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

    if 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)
      break
    else
      names  = arguments[0..i]
      node   = tmp
      result = LookupResult.new(node, args, names, node.leaf?)
    end
  end

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

@since 0.1.0 @api private

# File lib/hanami/cli/command_registry.rb, line 19
def set(name, command, aliases, **options)
  node = @root
  command = command_for(name, command, **options)
  name.split(/[[:space:]]/).each do |token|
    node = node.put(node, token)
  end

  node.aliases!(aliases)
  node.leaf!(command) unless command.nil?

  nil
end

Private Instance Methods

command_for(name, command, **options) click to toggle source

@since 0.1.0 @api private

# File lib/hanami/cli/command_registry.rb, line 71
def command_for(name, command, **options)
  if command.nil?
    command
  else
    command.new(command_name: name, **options)
  end
end