Class: Toys::StandardCLI

Inherits:
CLI
  • Object
show all
Defined in:
lib/toys/standard_cli.rb

Overview

Subclass of Toys::CLI configured for the behavior of the standard Toys executable. Specifically, this subclass:

  • Configures the standard names of files and directories, such as the .toys.rb file for an "index" tool, and the .data and .lib directory names.
  • Configures default descriptions for the root tool.
  • Configures a default error handler and logger that provide ANSI-colored formatted output.
  • Configures a set of middleware that implement online help, verbosity flags, and other features.
  • Provides a set of standard templates for typical project build and maintenance scripts (suh as clean, test, and rubocop).
  • Finds tool definitions in the standard Toys search path.

Constant Summary collapse

CONFIG_DIR_NAME =

Standard toys configuration directory name.

Returns:

  • (String)
".toys"
CONFIG_FILE_NAME =

Standard toys configuration file name.

Returns:

  • (String)
".toys.rb"
INDEX_FILE_NAME =

Standard index file name in a toys configuration.

Returns:

  • (String)
".toys.rb"
PRELOAD_DIR_NAME =

Standard preload directory name in a toys configuration.

Returns:

  • (String)
".preload"
PRELOAD_FILE_NAME =

Standard preload file name in a toys configuration.

Returns:

  • (String)
".preload.rb"
DATA_DIR_NAME =

Standard data directory name in a toys configuration.

Returns:

  • (String)
".data"
LIB_DIR_NAME =

Standard lib directory name in a toys configuration.

Returns:

  • (String)
".lib"
EXECUTABLE_NAME =

Name of the standard toys executable.

Returns:

  • (String)
"toys"
EXTRA_DELIMITERS =

Delimiter characters recognized.

Returns:

  • (String)
":."
DEFAULT_ROOT_DESC =

Short description for the standard root tool.

Returns:

  • (String)
"Your personal command line tool"
DEFAULT_ROOT_LONG_DESC =

Help text for the standard root tool.

Returns:

  • (String)
"Toys is your personal command line tool. You can write commands using a simple Ruby DSL," \
" and Toys will automatically organize them, parse arguments, and provide documentation." \
" Tools can be global or scoped to specific directories. You can also use Toys instead of" \
" Rake to provide build and maintenance scripts for your projects." \
" For detailed information, see https://dazuma.github.io/toys"
DEFAULT_VERSION_FLAG_DESC =

Short description for the version flag.

Returns:

  • (String)
"Show the version of Toys."
TOYS_PATH_ENV =

Name of the toys path environment variable.

Returns:

  • (String)
"TOYS_PATH"

Instance Attribute Summary

Attributes inherited from CLI

#base_level, #completion, #executable_name, #extra_delimiters, #loader, #logger, #logger_factory

Instance Method Summary collapse

Methods inherited from CLI

#add_config_block, #add_config_path, #add_search_path, #add_search_path_hierarchy, #child, default_completion, default_error_handler, default_logger_factory, default_middleware_lookup, default_middleware_stack, default_mixin_lookup, default_template_lookup, #load_tool, #run

Constructor Details

#initialize(custom_paths: nil, include_builtins: true, cur_dir: nil) ⇒ StandardCLI

Create a standard CLI, configured with the appropriate paths and middleware.

Parameters:

  • custom_paths (String, Array<String>) (defaults to: nil)

    Custom paths to use. If set, the CLI uses only the given paths. If not, the CLI will search for paths from the current directory and global paths.

  • include_builtins (boolean) (defaults to: true)

    Add the builtin tools. Default is true.

  • cur_dir (String, nil) (defaults to: nil)

    Starting search directory for configs. Defaults to the current working directory.



115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# File 'lib/toys/standard_cli.rb', line 115

def initialize(custom_paths: nil,
               include_builtins: true,
               cur_dir: nil)
  require "toys/utils/standard_ui"
  ui = Toys::Utils::StandardUI.new
  super(
    executable_name: EXECUTABLE_NAME,
    config_dir_name: CONFIG_DIR_NAME,
    config_file_name: CONFIG_FILE_NAME,
    index_file_name: INDEX_FILE_NAME,
    preload_file_name: PRELOAD_FILE_NAME,
    preload_dir_name: PRELOAD_DIR_NAME,
    data_dir_name: DATA_DIR_NAME,
    lib_dir_name: LIB_DIR_NAME,
    extra_delimiters: EXTRA_DELIMITERS,
    middleware_stack: default_middleware_stack,
    template_lookup: default_template_lookup,
    **ui.cli_args
  )
  if custom_paths
    Array(custom_paths).each { |path| add_config_path(path) }
  else
    add_current_directory_paths(cur_dir)
  end
  add_builtins if include_builtins
end