class Cloudit::Command::Generate

Constants

DEFAULT_MAIN_CFN_EXTENSION
DEFAULT_OUT_FILE
DESCRIPTION
SECTIONS
VALID_METHODS

Private Class Methods

setup_options() click to toggle source
# File lib/cloudit/command/generate.rb, line 89
def self.setup_options
  opts = Slop::Options.new
  opts.banner = 'Usage: cloudit generate [options]'
  opts.separator ''
  opts.separator 'Generate options:'
  opts.string '-o', '--output', 'output filename', default: DEFAULT_OUT_FILE
  opts.bool '-h', '--help', 'print options', default: false
  opts.string '-d', '--directory', 'root directory to generate', default: DEFAULT_DIRECTORY
  opts.bool '-m', '--minify', 'minify JSON output', default: false

  self.slop_opts = opts
  self.parser = Slop::Parser.new(opts)
end

Public Instance Methods

generate_json(dir='./', min=false) click to toggle source
# File lib/cloudit/command/generate.rb, line 41
def generate_json(dir='./', min=false)
  hash = {}
  hash_sections = {}

  unless File.directory? dir
    $stdout.puts "cloudit: '#{dir}' must be a directory"
    return
  end

  for file in Dir.glob(Dir["#{dir}**/*.#{DEFAULT_MAIN_CFN_EXTENSION}"]) do
    yml = YAML::load_file(file)
    if yml.is_a?(Hash)
      hash.merge! yml
    end
  end

  for section in SECTIONS do
    section_file = section.downcase
    hash_sections[section] = {}

    for file in Dir.glob(Dir["#{dir}**/*.#{section_file}.yml"]) do
      yml = YAML::load_file(file)

      if yml.is_a?(Hash)
        hash_sections[section].merge! yml
      end
    end
  end

  hash.merge! hash_sections

  if min
    hash.to_json
  else
    JSON.pretty_generate hash
  end
end
index() click to toggle source
# File lib/cloudit/command/generate.rb, line 13
def index
  if @opts.help?
    $stdout.puts slop_opts
  else
    out = @opts[:output]
    dir = normalize_directory @opts[:directory]
    min = @opts[:minify]

    if File.exist? out
      if out.eql? DEFAULT_OUT_FILE
        i = 1
        while File.exist? out
          i += 1
          out = "out#{i}.json"
        end
      else
        $stdout.puts "cloudit: output file '#{out}' already exists"
        return
      end
    end

    json = generate_json dir, min
    File.new(out, 'w').write "#{json}\n"

    $stdout.puts "Template generated to #{out}"
  end
end

Private Instance Methods

normalize_directory(dir) click to toggle source
# File lib/cloudit/command/generate.rb, line 81
def normalize_directory(dir)
  if dir.end_with? '/'
    dir
  else
    dir + '/'
  end
end