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, #fixed_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
#catch_all_used_anywhere?, #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, #user_string, #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 help_header_override 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 caption_string 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.any?(&:unique) || command.flags.any?(&:unique) 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 158 159 160 161 162 163 |
# 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 |
#validatables ⇒ Object
Returns a mixed array of Argument and Flag objects that have validations
166 167 168 |
# File 'lib/bashly/script/command.rb', line 166 def validatables @validatables ||= args.select(&:validate?) + flags.select(&:validate?) end |