class DevenvBuild::Cli

Public Class Methods

new(cmdargs) click to toggle source
# File lib/devenv_build/cli.rb, line 5
def initialize (cmdargs)
  @args = cmdargs
  self
end

Public Instance Methods

run() click to toggle source
# File lib/devenv_build/cli.rb, line 10
def run
  options = parse_command_line(@args)

  DevenvBuild::Files::Vagrantfile.new(options).generate
  DevenvBuild::Files::Provision.new(options).generate
end

Private Instance Methods

default_options() click to toggle source
# File lib/devenv_build/cli.rb, line 19
def default_options
  options = {}
  options[:destination_directory] = nil
  options[:box_name] = nil

  Provisioning.provisioning_modules.map do |module_name, mod|
    options[module_name] = false
  end

  options
end
parse_command_line(args) click to toggle source
# File lib/devenv_build/cli.rb, line 31
def parse_command_line (args)
  options = default_options

  o = OptionParser.new do |opts|
    opts.banner = "Generate a Vagrant development environment with the selected programming languages and tools.\n\n"

    opts.on('-d', '--directory=DIRECTORY', 'Target directory where to create the environment on.') do |dir|
      options[:destination_directory] = dir
    end

    opts.on('-n', '--devenv-name=NAME', 'Name of your development environment.') do |dir|
      options[:box_name] = dir
    end

    opts.on('--all', 'Install everything.') do |dir|
      options[:all] = true
    end

    Provisioning.provisioning_modules.map do |module_name, mod|
      opts.on("--#{module_name}", mod.help, &mod.options_setter(module_name, options))
    end

    opts.on('-h', '--help', 'Print this screen.') do |dir|
      puts opts
      exit
    end
  end

  begin
    o.parse!(args)

    Provisioning.provisioning_modules.map do |module_name, mod|
      mod.options_setter(module_name, options).call
    end if options[:all]

    if options[:destination_directory].nil?
      puts "Need a target directory.\n\n"
      raise OptionParser::MissingArgument
    end

    unless Provisioning.provisioning_modules.keys.any? { |module_name| options[module_name] }
      puts "You need to specify at least one thing to include.\n\n"
      raise OptionParser::MissingArgument
    end
  rescue
    puts o
    exit
  end

  options
end