Class: Bashly::Models::Command
- Defined in:
- lib/bashly/models/command.rb
Constant Summary
Constants inherited from Base
Instance Attribute Summary
Attributes inherited from Base
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.
-
#args ⇒ Object
Returns an array of Arguments.
-
#caption_string ⇒ Object
Returns a string suitable to be a headline.
-
#command_names ⇒ Object
Returns only the names of the Commands.
-
#commands ⇒ Object
Returns an array of the Commands.
-
#deep_commands ⇒ Object
Returns a flat array containing all the commands in this tree.
-
#default_command ⇒ Object
If any of this command’s subcommands has the default option set to true, this default command will be returned, nil otherwise.
-
#environment_variables ⇒ Object
Returns an array of EnvironmentVariables.
-
#filename ⇒ Object
Returns the bash filename that is expected to hold the user code for this command.
-
#flags ⇒ Object
Returns an array of Flags.
-
#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.
-
#load_user_file(file, placeholder: true) ⇒ Object
Reads a file from the userspace (Settings.source_dir) and returns its contents.
-
#parents ⇒ Object
Returns an array of all parents.
-
#required_args ⇒ Object
Returns an array of all the required Arguments.
-
#required_environment_variables ⇒ Object
Returns an array of all the required EnvironmentVariables.
-
#required_flags ⇒ Object
Returns an array of all the required Flags.
-
#root_command? ⇒ Boolean
Returns trus if this is the root command (no parents).
-
#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.
-
#verify ⇒ Object
Raise an exception if there are some serious issues with the command definition.
Methods inherited from Base
#help, #initialize, #method_missing, #optional, #respond_to?, #summary
Methods included from Renderable
Constructor Details
This class inherits a constructor from Bashly::Models::Base
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class Bashly::Models::Base
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 tone (root) joined by space. For example, for a command like “docker container run” the action name is “container run”.
9 10 11 |
# File 'lib/bashly/models/command.rb', line 9 def action_name parents.any? ? (parents[1..-1] + [name]).join(' ') : "root" end |
#aliases ⇒ Object
Returns all the possible aliases for this command
14 15 16 |
# File 'lib/bashly/models/command.rb', line 14 def aliases short ? [name, short] : [name] end |
#args ⇒ Object
Returns an array of Arguments
19 20 21 22 23 24 |
# File 'lib/bashly/models/command.rb', line 19 def args return [] unless ["args"] ["args"].map do || Argument.new end end |
#caption_string ⇒ Object
Returns a string suitable to be a headline
27 28 29 |
# File 'lib/bashly/models/command.rb', line 27 def caption_string help ? "#{full_name} - #{summary}" : full_name end |
#command_names ⇒ Object
Returns only the names of the Commands
32 33 34 |
# File 'lib/bashly/models/command.rb', line 32 def command_names commands.map &:name end |
#commands ⇒ Object
Returns an array of the Commands
37 38 39 40 41 42 43 |
# File 'lib/bashly/models/command.rb', line 37 def commands return [] unless ["commands"] ["commands"].map do || ['parents'] = parents + [name] command = Command.new end end |
#deep_commands ⇒ Object
Returns a flat array containing all the commands in this tree. This includes self + children + grandchildres + …
47 48 49 50 51 52 53 54 55 56 |
# File 'lib/bashly/models/command.rb', line 47 def deep_commands result = [] commands.each do |command| result << command if command.commands.any? result += command.deep_commands end end result end |
#default_command ⇒ Object
If any of this command’s subcommands has the default option set to true, this default command will be returned, nil otherwise.
60 61 62 |
# File 'lib/bashly/models/command.rb', line 60 def default_command commands.find { |c| c.default } end |
#environment_variables ⇒ Object
Returns an array of EnvironmentVariables
65 66 67 68 69 70 |
# File 'lib/bashly/models/command.rb', line 65 def environment_variables return [] unless ["environment_variables"] ["environment_variables"].map do || EnvironmentVariable.new end end |
#filename ⇒ Object
Returns the bash filename that is expected to hold the user code for this command
74 75 76 |
# File 'lib/bashly/models/command.rb', line 74 def filename "#{action_name.to_underscore}_command.sh" end |
#flags ⇒ Object
Returns an array of Flags
79 80 81 82 83 84 |
# File 'lib/bashly/models/command.rb', line 79 def flags return [] unless ["flags"] ["flags"].map do || Flag.new end end |
#full_name ⇒ Object
Returns the name of the command, including its parent name (in case this is a subcommand)
93 94 95 |
# File 'lib/bashly/models/command.rb', line 93 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
87 88 89 |
# File 'lib/bashly/models/command.rb', line 87 def function_name full_name.to_underscore end |
#load_user_file(file, placeholder: true) ⇒ Object
Reads a file from the userspace (Settings.source_dir) and returns its contents. If the file is not found, returns a string with a hint.
100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/bashly/models/command.rb', line 100 def load_user_file(file, placeholder: true) path = "#{Settings.source_dir}/#{file}" default_content = placeholder ? "echo \"error: cannot load file\"" : '' content = if File.exist? path File.read path else default_content end "# :#{path}\n#{content}" end |
#parents ⇒ Object
Returns an array of all parents. For example, the command “docker container run” will have [docker, container] as its parents
115 116 117 |
# File 'lib/bashly/models/command.rb', line 115 def parents ['parents'] || [] end |
#required_args ⇒ Object
Returns an array of all the required Arguments
120 121 122 |
# File 'lib/bashly/models/command.rb', line 120 def required_args args.select &:required end |
#required_environment_variables ⇒ Object
Returns an array of all the required EnvironmentVariables
125 126 127 |
# File 'lib/bashly/models/command.rb', line 125 def required_environment_variables environment_variables.select &:required end |
#required_flags ⇒ Object
Returns an array of all the required Flags
130 131 132 |
# File 'lib/bashly/models/command.rb', line 130 def required_flags flags.select &:required end |
#root_command? ⇒ Boolean
Returns trus if this is the root command (no parents)
135 136 137 |
# File 'lib/bashly/models/command.rb', line 135 def root_command? parents.empty? end |
#usage_string ⇒ Object
Returns a constructed string suitable for Usage pattern
140 141 142 143 144 145 146 147 148 |
# File 'lib/bashly/models/command.rb', line 140 def usage_string result = [full_name] result << "[command]" if commands.any? args.each do |arg| result << arg.usage_string end result << "[options]" result.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
153 154 155 |
# File 'lib/bashly/models/command.rb', line 153 def user_lib @user_lib ||= Dir["#{Settings.source_dir}/lib/**/*.sh"] end |
#verify ⇒ Object
Raise an exception if there are some serious issues with the command definition.
159 160 161 |
# File 'lib/bashly/models/command.rb', line 159 def verify verify_commands if commands.any? end |