Class: Beaker::Command
- Inherits:
-
Object
- Object
- Beaker::Command
- Defined in:
- lib/beaker/command.rb
Overview
An object that represents a “command” on a remote host. Is responsible for munging the environment correctly. Probably poorly named.
Direct Known Subclasses
Instance Attribute Summary collapse
-
#args ⇒ Object
An array of additional arguments to be supplied to the command.
-
#command ⇒ Object
A string representing the (possibly) incomplete command.
-
#environment ⇒ Object
A hash key-values where the keys are environment variables to be set.
-
#options ⇒ Object
A hash of options.
Instance Method Summary collapse
-
#args_string(args = @args) ⇒ String
String of the arguments for command.
-
#cmd_line(host, cmd = @command, env = @environment, pc = @prepend_cmds, ac = @append_cmds) ⇒ String
This returns the fully formed command line invocation.
-
#initialize(command, args = [], options = {}) ⇒ Command
constructor
A new instance of Command.
-
#options_string(opts = @options) ⇒ String
String of the options and flags for command.
Constructor Details
#initialize(command, args = [], options = {}) ⇒ Command
For backwards compatability we must support any number of strings or symbols (or arrays of strings an symbols) and essentially ensure they are in a flattened array, coerced to strings, and call #join(' ') on it. We have options for the command line invocation that must be turned into '–key=value' and similarly joined as well as a hash of environment key value pairs, and finally we need a hash of options to control the default envs that are included.
Returns a new instance of Command.
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/beaker/command.rb', line 47 def initialize command, args = [], = {} @command = command @options = @args = args @environment = {} @cmdexe = @options.delete(:cmdexe) || false @prepend_cmds = @options.delete(:prepend_cmds) || nil @append_cmds = @options.delete(:append_cmds) || nil # this is deprecated and will not allow you to use a command line # option of `--environment`, please use ENV instead. [:ENV, :environment, 'environment', 'ENV'].each do |k| if @options[k].is_a?(Hash) @environment = @environment.merge(@options.delete(k)) end end end |
Instance Attribute Details
#args ⇒ Object
An array of additional arguments to be supplied to the command
18 19 20 |
# File 'lib/beaker/command.rb', line 18 def args @args end |
#command ⇒ Object
A string representing the (possibly) incomplete command
9 10 11 |
# File 'lib/beaker/command.rb', line 9 def command @command end |
#environment ⇒ Object
A hash key-values where the keys are environment variables to be set
12 13 14 |
# File 'lib/beaker/command.rb', line 12 def environment @environment end |
#options ⇒ Object
A hash of options. Keys with values of nil are considered flags
15 16 17 |
# File 'lib/beaker/command.rb', line 15 def @options end |
Instance Method Details
#args_string(args = @args) ⇒ String
Returns String of the arguments for command.
125 126 127 |
# File 'lib/beaker/command.rb', line 125 def args_string args = @args args.flatten.compact.join(' ') end |
#cmd_line(host, cmd = @command, env = @environment, pc = @prepend_cmds, ac = @append_cmds) ⇒ String
Returns This returns the fully formed command line invocation.
73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/beaker/command.rb', line 73 def cmd_line host, cmd = @command, env = @environment, pc = @prepend_cmds, ac = @append_cmds env_string = host.environment_string( env ) prepend_commands = host.prepend_commands( cmd, pc, :cmd_exe => @cmdexe ) append_commands = host.append_commands( cmd, ac, :cmd_exe => @cmdexe ) # This will cause things like `puppet -t -v agent` which is maybe bad. if host[:platform]&.include?('cisco_ios_xr') cmd_line_array = [prepend_commands, env_string, cmd, , args_string, append_commands] else cmd_line_array = [env_string, prepend_commands, cmd, , args_string, append_commands] end cmd_line_array.compact.reject( &:empty? ).join( ' ' ) end |
#options_string(opts = @options) ⇒ String
Why no. Not the least bit Unixy, why do you ask?
Returns String of the options and flags for command.
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
# File 'lib/beaker/command.rb', line 92 def opts = @options flags = [] = opts.dup .each_key do |key| if [key] == nil flags << key .delete(key) end end short_flags, long_flags = flags.partition {|flag| flag.to_s.length == 1 } parsed_short_flags = short_flags.map {|f| "-#{f}" } parsed_long_flags = long_flags.map {|f| "--#{f}" } short_opts, long_opts = {}, {} .each_key do |key| if key.to_s.length == 1 short_opts[key] = [key] else long_opts[key] = [key] end end parsed_short_opts = short_opts.map {|k,v| "-#{k}=#{v}" } parsed_long_opts = long_opts.map {|k,v| "--#{k}=#{v}" } return (parsed_short_flags + parsed_long_flags + parsed_short_opts + parsed_long_opts).join(' ') end |