Class: Bashly::Script::Command
- Includes:
- Completions::Command, Introspection::Arguments, Introspection::Commands, Introspection::Dependencies, Introspection::EnvironmentVariables, Introspection::Examples, Introspection::Flags, Introspection::Variables, Introspection::Visibility
- Defined in:
- lib/bashly/script/command.rb
Instance Attribute Summary collapse
-
#parent_command ⇒ Object
Returns the value of attribute parent_command.
-
#parents ⇒ Object
Returns an array of all parents.
Attributes inherited from Base
Attributes included from Renderable
Class Method Summary collapse
Instance Method Summary collapse
-
#action_name ⇒ Object
Returns the name to be used as an action.
-
#aliases ⇒ Object
Returns all the possible aliases for this command.
-
#alt ⇒ Object
Returns an array of alternative aliases if any.
-
#base_usage_pattern ⇒ Object
Returns a base usage string that considers whether this command is the default, and if it has any parents.
-
#caption_string ⇒ Object
Returns a string suitable to be a headline.
-
#catch_all ⇒ Object
Returns an object representing the catch_all configuration.
-
#filename ⇒ Object
Returns the filename that is expected to hold the user code for this command.
-
#full_name ⇒ Object
Returns the name of the command, including its parent name (in case this is a subcommand).
-
#function_name ⇒ Object
Returns a unique name, suitable to be used in a bash function.
-
#group_string ⇒ Object
Returns the string for the group caption.
-
#has_unique_args_or_flags? ⇒ Boolean
Returns true if this command, or any subcommand (deep) as any arg or flag with arg that is defined as unique.
-
#mode ⇒ Object
Returns a mode identifier.
-
#root_command? ⇒ Boolean
Returns true if this is the root command (no parents).
-
#summary_string ⇒ Object
Returns the summary string.
-
#usage_string ⇒ Object
Returns a constructed string suitable for Usage pattern.
-
#user_lib ⇒ Object
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.
-
#validatables ⇒ Object
Returns a mixed array of Argument and Flag objects that have validations.
Methods included from Introspection::Visibility
Methods included from Introspection::Variables
Methods included from Introspection::Flags
#default_flags, #flags, #global_flags?, #needy_flags, #public_flags, #required_flags, #short_flag_exist?, #visible_flags, #whitelisted_flags
Methods included from Introspection::Examples
Methods included from Introspection::EnvironmentVariables
#default_environment_variables, #environment_variables, #public_environment_variables, #required_environment_variables, #validated_environment_variables, #visible_environment_variables, #whitelisted_environment_variables
Methods included from Introspection::Dependencies
Methods included from Introspection::Commands
#command_aliases, #command_help_data, #command_names, #commands, #deep_commands, #default_command, #grouped_commands, #public_command_aliases, #public_commands, #visible_command_aliases, #visible_commands
Methods included from Introspection::Arguments
#args, #default_args, #repeatable_arg_exist?, #required_args, #usage_string_args, #whitelisted_args
Methods included from Completions::Command
#completion_data, #completion_function, #completion_script
Methods inherited from Base
#help, #initialize, #method_missing, #optional, #respond_to_missing?, #summary
Methods included from Renderable
#load_user_file, #render, #strings, #user_file_exist?, #user_file_path, #view_marker
Constructor Details
This class inherits a constructor from Bashly::Script::Base
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class Bashly::Script::Base
Instance Attribute Details
#parent_command ⇒ Object
Returns the value of attribute parent_command.
26 27 28 |
# File 'lib/bashly/script/command.rb', line 26 def parent_command @parent_command end |
#parents ⇒ Object
Returns an array of all parents. For example, the command “docker container run” will have [docker, container] as its parents
110 111 112 |
# File 'lib/bashly/script/command.rb', line 110 def parents @parents ||= [] end |
Class Method Details
.option_keys ⇒ Object
15 16 17 18 19 20 21 22 23 |
# File 'lib/bashly/script/command.rb', line 15 def option_keys @option_keys ||= %i[ alias args catch_all commands completions default dependencies environment_variables examples extensible expose filename filters flags footer function group help name private variables version ] end |
Instance Method Details
#action_name ⇒ Object
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”.
34 35 36 |
# File 'lib/bashly/script/command.rb', line 34 def action_name parents.any? ? (parents[1..] + [name]).join(' ') : 'root' end |
#aliases ⇒ Object
Returns all the possible aliases for this command
39 40 41 |
# File 'lib/bashly/script/command.rb', line 39 def aliases [name] + alt end |
#alt ⇒ Object
Returns an array of alternative aliases if any
44 45 46 47 48 |
# File 'lib/bashly/script/command.rb', line 44 def alt return [] unless ['alias'] ['alias'].is_a?(String) ? [['alias']] : ['alias'] end |
#base_usage_pattern ⇒ Object
Returns a base usage string that considers whether this command is the default, and if it has any parents. Used internally by ‘usage_string`.
147 148 149 150 |
# 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 |
#caption_string ⇒ Object
Returns a string suitable to be a headline
51 52 53 |
# File 'lib/bashly/script/command.rb', line 51 def help.empty? ? full_name : "#{full_name} - #{summary}" end |
#catch_all ⇒ Object
Returns an object representing the catch_all configuration
56 57 58 |
# File 'lib/bashly/script/command.rb', line 56 def catch_all @catch_all ||= CatchAll.from_config ['catch_all'] end |
#filename ⇒ Object
Returns the filename that is expected to hold the user code for this command
62 63 64 |
# File 'lib/bashly/script/command.rb', line 62 def filename ['filename'] || implicit_filename end |
#full_name ⇒ Object
Returns the name of the command, including its parent name (in case this is a subcommand)
73 74 75 |
# File 'lib/bashly/script/command.rb', line 73 def full_name parents.any? ? (parents + [name]).join(' ') : name end |
#function_name ⇒ Object
Returns a unique name, suitable to be used in a bash function
67 68 69 |
# File 'lib/bashly/script/command.rb', line 67 def function_name ['function'] || full_name.to_underscore end |
#group_string ⇒ Object
Returns the string for the group caption
78 79 80 81 82 83 84 |
# File 'lib/bashly/script/command.rb', line 78 def group_string if group strings[:group] % { group: group } else strings[:commands] end end |
#has_unique_args_or_flags? ⇒ Boolean
Returns true if this command, or any subcommand (deep) as any arg or flag with arg that is defined as unique
88 89 90 91 92 93 94 |
# 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.count(&:unique).positive? || command.flags.count(&:unique).positive? end false end |
#mode ⇒ Object
Returns a mode identifier
97 98 99 100 101 102 103 104 105 106 |
# 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 |
#root_command? ⇒ Boolean
Returns true if this is the root command (no parents)
115 116 117 |
# File 'lib/bashly/script/command.rb', line 115 def root_command? parents.empty? end |
#summary_string ⇒ Object
Returns the summary string
120 121 122 123 124 125 126 |
# File 'lib/bashly/script/command.rb', line 120 def summary_string if default strings[:default_command_summary] % { summary: summary } else summary end end |
#usage_string ⇒ Object
Returns a constructed string suitable for Usage pattern
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
# 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 |
#user_lib ⇒ Object
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
155 156 157 |
# File 'lib/bashly/script/command.rb', line 155 def user_lib @user_lib ||= Dir["#{Settings.full_lib_dir}/**/*.#{Settings.partials_extension}"] end |
#validatables ⇒ Object
Returns a mixed array of Argument and Flag objects that have validations
160 161 162 |
# File 'lib/bashly/script/command.rb', line 160 def validatables @validatables ||= args.select(&:validate) + flags.select(&:validate) end |