class Bashly::Script::Command
Attributes
Public Class Methods
Source
# File lib/bashly/script/command.rb, line 15 def option_keys @option_keys ||= %i[ alias argfile args catch_all commands completions default dependencies environment_variables examples extensible expose filename filters flags footer function group help help_header_override name private variables version ] end
Public Instance Methods
Source
# File lib/bashly/script/command.rb, line 34 def action_name parents.any? ? (parents[1..] + [name]).join(' ') : 'root' end
Returns the name to be used as an action.
-
If it is the root command, the action is “root”
-
Else, it is all the parents, except the first one (root) joined by space. For example, for a command like “docker container run” the action name is “container run”.
Source
# File lib/bashly/script/command.rb, line 39 def aliases [name] + alt end
Returns all the possible aliases for this command
Source
# File lib/bashly/script/command.rb, line 44 def alt return [] unless options['alias'] options['alias'].is_a?(String) ? [options['alias']] : options['alias'] end
Returns an array of alternative aliases if any
Source
# File lib/bashly/script/command.rb, line 147 def base_usage_pattern usage_pattern = default ? "[#{name}]" : name parents.any? ? (parents + [usage_pattern]).join(' ') : usage_pattern end
Returns a base usage string that considers whether this command is the default, and if it has any parents. Used internally by ‘usage_string`.
Source
# File lib/bashly/script/command.rb, line 51 def caption_string help.empty? ? full_name : "#{full_name} - #{summary}" end
Returns a string suitable to be a headline
Source
# File lib/bashly/script/command.rb, line 56 def catch_all @catch_all ||= CatchAll.from_config options['catch_all'] end
Returns an object representing the catch_all configuration
Source
# File lib/bashly/script/command.rb, line 62 def filename options['filename'] || implicit_filename end
Returns the filename that is expected to hold the user code for this command
Source
# File lib/bashly/script/command.rb, line 73 def full_name parents.any? ? (parents + [name]).join(' ') : name end
Returns the name of the command, including its parent name (in case this is a subcommand)
Source
# File lib/bashly/script/command.rb, line 67 def function_name options['function'] || full_name.to_underscore end
Returns a unique name, suitable to be used in a bash function
Source
# File lib/bashly/script/command.rb, line 78 def group_string if group strings[:group] % { group: group } else strings[:commands] end end
Returns the string for the group caption
Source
# File lib/bashly/script/command.rb, line 88 def has_unique_args_or_flags? deep_commands(include_self: true).each do |command| return true if command.args.any?(&:unique) || command.flags.any?(&:unique) end false end
Returns true if this command, or any subcommand (deep) as any arg or flag with arg that is defined as unique
Source
# File lib/bashly/script/command.rb, line 97 def mode @mode ||= if global_flags? then :global_flags elsif commands.any? then :commands elsif args.any? && flags.any? then :args_and_flags elsif args.any? then :args elsif flags.any? then :flags else :empty end end
Returns a mode identifier
Source
# File lib/bashly/script/command.rb, line 110 def parents @parents ||= [] end
Returns an array of all parents. For example, the command “docker container run” will have [docker, container] as its parents
Source
# File lib/bashly/script/command.rb, line 115 def root_command? parents.empty? end
Returns true if this is the root command (no parents)
Source
# File lib/bashly/script/command.rb, line 120 def summary_string if default strings[:default_command_summary] % { summary: summary } else summary end end
Returns the summary string
Source
# File lib/bashly/script/command.rb, line 129 def usage_string result = [base_usage_pattern] command_string = default_command&.default == 'force' ? '[COMMAND]' : 'COMMAND' result.push case mode when :global_flags then ['[OPTIONS]', command_string] when :commands then [command_string] when :args_and_flags then usage_string_args + ['[OPTIONS]'] when :args then usage_string_args when :flags then ['[OPTIONS]'] end result.push catch_all.usage_string if catch_all.enabled? && commands.empty? result.compact.join ' ' end
Returns a constructed string suitable for Usage pattern
Source
# File lib/bashly/script/command.rb, line 155 def user_lib @user_lib ||= begin result = Settings.all_lib_dirs.map do |dir| Dir["#{dir}/**/*.#{Settings.partials_extension}"] end result.flatten end end
Returns an array of files to include as is inside the script This is meant to provide the user with the ability to add custom functions
Source
Private Instance Methods
Source
# File lib/bashly/script/command.rb, line 174 def implicit_filename if Settings.commands_dir "#{Settings.commands_dir}/#{action_name.to_path}.#{Settings.partials_extension}" else "#{action_name.to_underscore}_command.#{Settings.partials_extension}" end end
Returns either a flat filename (docker_status_command.sh) or a nested path (commands/docker/status.sh)