#!/usr/bin/env ruby if File.exists?('Gemfile') require 'rubygems' require 'bundler' Bundler.setup end require 'linecook/version' require 'linecook/commands' registry = Linecook::Commands::Command.registry cmd = ARGV.shift cmd_class = registry[cmd] if cmd_class.nil? case cmd when nil, '-h', '--help' puts "usage: linecook [options] COMMAND" puts puts "commands: " registry.keys.sort.each do |key| cmd_class = registry[key] puts " %-16s %s" % [key, cmd_class.desc] end puts puts "options:" puts " -%s, --%-10s %s" % ['v', 'version', 'print version'] puts " -%s, --%-10s %s" % ['h', 'help', 'print this help'] exit when '-v', '--version' puts "linecook version #{Linecook::VERSION} -- #{Linecook::WEBSITE}" exit else puts "unknown command: #{cmd.inspect}" exit 1 end end parser = ConfigParser.new parser.add cmd_class.configurations parser.on '-h', '--help', 'print this help' do puts "usage: linecook [options] #{cmd} #{cmd_class.args}" desc = cmd_class.desc.wrap(76, 2, "\n ") unless desc.empty? puts puts " #{desc}" puts end puts "options:" puts parser.to_s exit end parser.parse! ARGV begin cmd_class.new(parser.config).call ARGV rescue Linecook::Commands::CommandError puts $!.message unless $!.message.strip.empty? puts $!.backtrace if $DEBUG exit $!.exitstatus end