#!/usr/bin/env ruby if ARGV.include?('--debug') || ARGV.include?('-d') DEBUG=true begin if RUBY_VERSION =~ /^2/ require 'byebug' else require 'debugger' end rescue LoadError end else $VERBOSE=nil DEBUG=false end TEST = false LEAP_CLI_BASE_DIR = File.expand_path('..', File.dirname(File.symlink?(__FILE__) ? File.readlink(__FILE__) : __FILE__)) begin # First, try to load the leap_cli code that is local to this `leap` command. # If that fails, then we try to load leap_cli as a gem. require File.join(LEAP_CLI_BASE_DIR, 'lib','leap_cli','load_paths') require 'leap_cli' rescue LoadError require 'leap_cli' end require 'gli' require 'leap_cli/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 # 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 LeapCli::Bootstrap::setup(ARGV) # handle --version ourselves (and not GLI) if ARGV.grep(/--version/).any? LeapCli::Bootstrap::handle_version(self) else LeapCli::Bootstrap::load_libraries(self) end # disable GLI error catching ENV['GLI_DEBUG'] = "true" def error_message(msg) end # run command 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 else exit(1) end end end