class Mixlib::ShellOut

def parse_options(opts)

def parse_options(opts)
  opts.each do |option, setting|
    case option.to_s
    when "cwd"
      self.cwd = setting
    when "domain"
      self.domain = setting
    when "password"
      self.password = setting
    when "user"
      self.user = setting
      self.with_logon = setting
    when "group"
      self.group = setting
    when "umask"
      self.umask = setting
    when "timeout"
      self.timeout = setting
    when "returns"
      self.valid_exit_codes = Array(setting)
    when "live_stream"
      self.live_stdout = self.live_stderr = setting
    when "live_stdout"
      self.live_stdout = setting
    when "live_stderr"
      self.live_stderr = setting
    when "input"
      self.input = setting
    when "logger"
      self.logger = setting
    when "log_level"
      self.log_level = setting
    when "log_tag"
      self.log_tag = setting
    when "environment", "env"
      if setting
        self.environment = Hash[setting.map { |(k, v)| [k.to_s, v] }]
      else
        self.environment = {}
      end
    when "login"
      self.login = setting
    when "elevated"
      self.elevated = setting
    else
      raise InvalidCommandOption, "option '#{option.inspect}' is not a valid option for #{self.class.name}"
    end
  end
  validate_options(opts)
end