class Enviera::Subcommand

Attributes

global_options[RW]
helptext[RW]
options[RW]

Public Class Methods

all_options() click to toggle source
# File lib/enviera/subcommand.rb, line 38
def self.all_options
  options = @@global_options.dup
  options += self.options if self.options
  # merge in defaults from configuration files
  config_file = self.load_config_file
  options.map!{ | opt|
    key_name = "#{opt[:name]}"
    if config_file.has_key? key_name
      opt[:default] = config_file[key_name]
      opt
    else
      opt
    end
  }
  options
end
attach_option(opt) click to toggle source
# File lib/enviera/subcommand.rb, line 55
def self.attach_option opt
  self.suboptions += opt
end
description() click to toggle source
# File lib/enviera/subcommand.rb, line 114
def self.description
  "no description"
end
execute() click to toggle source
# File lib/enviera/subcommand.rb, line 122
def self.execute
  raise StandardError, "This command is not implemented yet (#{self.to_s.split('::').last})"
end
find(commandname = "unknown_command") click to toggle source
# File lib/enviera/subcommand.rb, line 59
def self.find commandname = "unknown_command"
  begin
    require "enviera/subcommands/#{commandname.downcase}"
  rescue Exception => e
    require "enviera/subcommands/unknown_command"
    return Enviera::Subcommands::UnknownCommand
  end
  command_module = Module.const_get('Enviera').const_get('Subcommands')
  command_class = Utils.find_closest_class :parent_class => command_module, :class_name => commandname
  command_class || Enviera::Subcommands::UnknownCommand
end
hidden?() click to toggle source
# File lib/enviera/subcommand.rb, line 130
def self.hidden?
  false
end
load_config_file() click to toggle source
# File lib/enviera/subcommand.rb, line 24
def self.load_config_file
  config = {}
  [ "/etc/enviera/config.yaml", "#{ENV['HOME']}/.enviera/config.yaml", "#{ENV['ENVIERA_CONFIG']}" ].each do |config_file|
    begin
      yaml_contents = YAML.load_file(config_file)
      Utils::info "Loaded config from #{config_file}"
      config.merge! yaml_contents
    rescue
      raise StandardError, "Could not open config file \"#{config_file}\" for reading"
    end if config_file and File.file? config_file
  end
  config
end
parse() click to toggle source
# File lib/enviera/subcommand.rb, line 71
def self.parse

  me = self

  options = Trollop::options do

    version "Enviera version " + Enviera::VERSION.to_s
    banner ["enviera #{me.prettyname}: #{me.description}", me.helptext, "Options:"].compact.join("\n\n")

    me.all_options.each do |available_option|

      skeleton = {:description => "",
                  :short => :none}

      skeleton.merge! available_option
      opt skeleton[:name],
          skeleton[:desc] || skeleton[:description],  #legacy plugins
          :short => skeleton[:short],
          :default => skeleton[:default],
          :type => skeleton[:type]

    end

    stop_on Enviera.subcommands

  end

  if options[:verbose]
    Enviera.verbosity_level += 1
  end

  if options[:quiet]
    Enviera.verbosity_level = 0
  end

  options

end
prettyname() click to toggle source
# File lib/enviera/subcommand.rb, line 126
def self.prettyname
  Utils.snakecase self.to_s.split('::').last
end
validate(args) click to toggle source
# File lib/enviera/subcommand.rb, line 110
def self.validate args
  args
end