#!/usr/bin/env ruby require 'rubygems' require 'commander' program :name, 'commander' program :version, Commander::VERSION program :description, 'Commander utility program.' command :init do |c| c.syntax = 'commander init ' c.summary = 'Initialize a commander template' c.description = 'Initialize an empty with a commander template, allowing extremely quick creation of commader executables.' c.example 'Create a new file with a commander template.', 'commander init bin/my_executable' c.when_called do |args, options| file = args.shift || abort('file argument required.') name = ask 'Machine name of program: ' description = ask 'Describe your program: ' commands = ask_for_array 'List the sub-commands you wish to create: ' begin File.open(file, 'w') do |f| f.write <<-"...".gsub!(/^ {10}/, '') #!/usr/bin/env ruby require 'rubygems' require 'commander' require '#{name}' program :name, '#{name}' program :version, #{name.capitalize}::VERSION program :description, '#{description}' ... commands.each do |command| f.write <<-"...".gsub!(/^ {12}/, '') command :#{command} do |c| c.syntax = '#{name} #{command} [options]' c.summary = '' c.description = '' c.example 'description', 'command example' c.option '--some-switch', 'Some switch that does something' c.when_called do |args, options| # Do something or c.when_called #{name.capitalize}::Commands::#{command.capitalize} end end ... end end say "Initialized template in #{file}" rescue Exception => e abort e end end end