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
Constant Summary collapse
- DEFAULT_GIT_RUBYLIB =
{ :default => [], :host => %w(hieralibdir hierapuppetlibdir pluginlibpath puppetlibdir facterlibdir), :opts => { :additive => true, :separator => {:host => 'pathseparator' } } }
- DEFAULT_GIT_PATH =
{ :default => [], :host => %w(puppetbindir facterbindir hierabindir), :opts => { :additive => true, :separator => ':' } }
- DEFAULT_GIT_ENV =
{ :PATH => DEFAULT_GIT_PATH, :RUBYLIB => DEFAULT_GIT_RUBYLIB }
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) ⇒ String
This returns the fully formed command line invocation.
-
#environment_string_for(host, env) ⇒ String
Determine the appropriate env commands for the given host.
-
#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.
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/beaker/command.rb', line 65 def initialize command, args = [], = {} @command = command @options = @args = args @environment = {} # 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
36 37 38 |
# File 'lib/beaker/command.rb', line 36 def args @args end |
#command ⇒ Object
A string representing the (possibly) incomplete command
27 28 29 |
# File 'lib/beaker/command.rb', line 27 def command @command end |
#environment ⇒ Object
A hash key-values where the keys are environment variables to be set
30 31 32 |
# File 'lib/beaker/command.rb', line 30 def environment @environment end |
#options ⇒ Object
A hash of options. Keys with values of nil are considered flags
33 34 35 |
# File 'lib/beaker/command.rb', line 33 def @options end |
Instance Method Details
#args_string(args = @args) ⇒ String
Returns String of the arguments for command.
132 133 134 |
# File 'lib/beaker/command.rb', line 132 def args_string args = @args args.flatten.compact.join(' ') end |
#cmd_line(host, cmd = @command, env = @environment) ⇒ String
Returns This returns the fully formed command line invocation.
87 88 89 90 91 92 |
# File 'lib/beaker/command.rb', line 87 def cmd_line host, cmd = @command, env = @environment env_string = env.nil? ? '' : environment_string_for( host, env ) # This will cause things like `puppet -t -v agent` which is maybe bad. "#{env_string} #{cmd} #{} #{args_string}" end |
#environment_string_for(host, env) ⇒ String
I dislike the principle of this method. There is host specific knowledge contained here. Really the relationship should be reversed where a host is asked for an appropriate Command when given a generic Command.
Determine the appropriate env commands for the given host.
153 154 155 156 157 158 159 160 161 162 163 164 165 |
# File 'lib/beaker/command.rb', line 153 def environment_string_for host, env return '' if env.empty? env_array = parse_env_hash_for( host, env ).compact # cygwin-ism cmd = host['platform'] =~ /windows/ ? 'cmd.exe /c' : nil env_array << cmd if cmd environment_string = env_array.join(' ') "env #{environment_string}" 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.
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
# File 'lib/beaker/command.rb', line 99 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 |