#!/usr/bin/env ruby if ARGV.include?('--debug') || ARGV.include?('-d') DEBUG=true require 'debugger' else DEBUG=false end begin require 'leap_cli' rescue LoadError # # When developing a gem with a command, you normally use `bundle exec bin/command-name` # to run your app. At install-time, RubyGems will make sure lib, etc. are in the load path, # so that you can run the command directly. # # However, I don't like using 'bundle exec'. It is slow, and limits which directory you can # run in. So, instead, we fall back to some path manipulation hackery. # # This allows you to run the command directly while developing the gem, and also lets you # run from anywhere (I like to link 'bin/leap' to /usr/local/bin/leap). # base_dir = File.expand_path('..', File.dirname(File.symlink?(__FILE__) ? File.readlink(__FILE__) : __FILE__)) require File.join(base_dir, 'lib','leap_cli','load_paths') require 'leap_cli' end require 'gli' require 'highline' require 'forwardable' require 'lib_ext/gli' # our custom extensions to gli # # Typically, GLI and Highline methods are loaded into the global namespace. # Instead, here we load these into the module LeapCli::Commands in order to # ensure that the cli logic and code is kept isolated to leap_cli/commands/*.rb # # no cheating! # module LeapCli::Commands extend GLI::App extend Forwardable # delegate highline methods to make them available to sub-commands @terminal = HighLine.new def_delegator :@terminal, :ask, 'self.ask' def_delegator :@terminal, :agree, 'self.agree' def_delegator :@terminal, :choose, 'self.choose' def_delegator :@terminal, :say, 'self.say' def_delegator :@terminal, :color, 'self.color' def_delegator :@terminal, :list, 'self.list' # make config manager available as 'manager' def self.manager @manager ||= begin manager = LeapCli::Config::Manager.new manager.load manager end end # make provider config available as 'provider' def self.provider manager.provider end # make leapfile available as 'leapfile' def self.leapfile LeapCli::leapfile end # info about leap command line suite program_desc LeapCli::SUMMARY program_long_desc LeapCli::DESCRIPTION # handle --version ourselves if ARGV.grep(/--version/).any? puts "leap #{LeapCli::VERSION}, ruby #{RUBY_VERSION}" exit(0) end # disable GLI error catching ENV['GLI_DEBUG'] = "true" def error_message(msg) end # load commands and run commands_from('leap_cli/commands') ORIGINAL_ARGV = ARGV.dup begin exit_status = run(ARGV) exit(LeapCli::Util.exit_status || exit_status) rescue StandardError => exc if exc.respond_to? :log exc.log else puts LeapCli.log :error, "%s: %s" % [exc.class, exc.message] puts end if DEBUG raise exc end end end