class Aws::Cfn::Stacker::StackerBase

Public Class Methods

category(new_category) click to toggle source

Explicitly set the category for the current command to new_category The category is normally determined from the first word of the command name, but some commands make more sense using two or more words

Arguments

new_category:

A String to set the category to (see examples)

Examples:

Data bag commands would be in the ‘data’ category by default. To put them in the ‘data bag’ category:

category('data bag')
# File lib/aws/cfn/stacker/base.rb, line 62
def category(new_category)
  @category = new_category
end
common_name() click to toggle source
# File lib/aws/cfn/stacker/base.rb, line 74
def common_name
  snake_case_name.split('_').join(' ')
end
dependency_loaders() click to toggle source
# File lib/aws/cfn/stacker/base.rb, line 129
def dependency_loaders
  @dependency_loaders ||= []
end
inherited(subclass) click to toggle source
# File lib/aws/cfn/stacker/base.rb, line 47
def inherited(subclass)
  unless subclass.unnamed?
    subcommands[subclass.snake_case_name] = subclass
  end
end
list_commands(preferred_category=nil) click to toggle source

Print the list of subcommands knife knows about. If preferred_category is given, only subcommands in that category are shown

# File lib/aws/cfn/stacker/base.rb, line 107
def list_commands(preferred_category=nil)
  load_commands

  category_desc = preferred_category ? preferred_category + " " : ''
  puts "Available #{category_desc}subcommands: (for details, #{@stacker_cmd} SUB-COMMAND --help)\n\n"

  if preferred_category && subcommands_by_category.key?(preferred_category)
    commands_to_show = {preferred_category => subcommands_by_category[preferred_category]}
  else
    commands_to_show = subcommands_by_category
  end

  commands_to_show.sort.each do |category, commands|
    next if category =~ /deprecated/i
    puts "** #{category.upcase} COMMANDS **"
    commands.sort.each do |command|
      puts subcommands[command].banner if subcommands[command]
    end
    puts
  end
end
load_commands() click to toggle source
# File lib/aws/cfn/stacker/base.rb, line 87
def load_commands
  @commands_loaded ||= subcommand_loader.load_commands
end
load_deps() click to toggle source
# File lib/aws/cfn/stacker/base.rb, line 137
def load_deps
  dependency_loaders.each do |dep_loader|
    dep_loader.call
  end
end
requires(&block) click to toggle source
# File lib/aws/cfn/stacker/base.rb, line 133
def requires(&block)
  dependency_loaders << block
end
reset_config_path!() click to toggle source

noinspection RubyClassVariableUsageInspection

# File lib/aws/cfn/stacker/base.rb, line 20
def self.reset_config_path!
  @@stacker_config_dir = nil
end
reset_subcommands!() click to toggle source
# File lib/aws/cfn/stacker/base.rb, line 42
def reset_subcommands!
  @subcommands = {}
  @subcommands_by_category = nil
end
snake_case_name() click to toggle source
# File lib/aws/cfn/stacker/base.rb, line 70
def snake_case_name
  convert_to_snake_case(name.split('::').last) unless unnamed?
end
stacker_config_dir() click to toggle source

search upward from current_dir until .chef directory is found noinspection RubyClassVariableUsageInspection

# File lib/aws/cfn/stacker/base.rb, line 27
def stacker_config_dir
  if @@stacker_config_dir.nil? # share this with subclasses
    @@stacker_config_dir = false
    full_path = Dir.pwd.split(File::SEPARATOR)
    (full_path.length - 1).downto(0) do |i|
      candidate_directory = File.join(full_path[0..i] + ["config" ])
      if File.exist?(candidate_directory) && File.directory?(candidate_directory)
        @@stacker_config_dir = candidate_directory
        break
      end
    end
  end
  @@stacker_config_dir
end
subcommand_category() click to toggle source
# File lib/aws/cfn/stacker/base.rb, line 66
def subcommand_category
  @category || snake_case_name.split('_').first unless unnamed?
end
subcommand_class_from(args) click to toggle source
# File lib/aws/cfn/stacker/base.rb, line 143
def subcommand_class_from(args)
  command_words = args.select {|arg| arg =~ /^(([[:alnum:]])[[:alnum:]\_\-]+)$/ }

  subcommand_class = nil

  while ( !subcommand_class ) && ( !command_words.empty? )
    snake_case_class_name = command_words.join("_")
    subcommand_class = subcommands[snake_case_class_name]
    unless subcommand_class
      command_words.pop
    end
  end
  # see if we got the command as e.g., knife node-list
  subcommand_class ||= subcommands[args.first.gsub('-', '_')]
  subcommand_class || subcommand_not_found!(args)
end
subcommand_loader() click to toggle source
# File lib/aws/cfn/stacker/base.rb, line 83
def subcommand_loader
  @subcommand_loader ||= SubcommandLoader.new(stacker_config_dir)
end
subcommands() click to toggle source
# File lib/aws/cfn/stacker/base.rb, line 91
def subcommands
  @@subcommands ||= {}
end
subcommands_by_category() click to toggle source
# File lib/aws/cfn/stacker/base.rb, line 95
def subcommands_by_category
  unless @subcommands_by_category
    @subcommands_by_category = Hash.new { |hash, key| hash[key] = [] }
    subcommands.each do |snake_cased, klass|
      @subcommands_by_category[klass.subcommand_category] << snake_cased
    end
  end
  @subcommands_by_category
end
unnamed?() click to toggle source

Does this class have a name? (Classes created via Class.new don’t)

# File lib/aws/cfn/stacker/base.rb, line 79
def unnamed?
  name.nil? || name.empty?
end