diff options
Diffstat (limited to 'lib/leap_cli')
-rw-r--r-- | lib/leap_cli/app.rb | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/lib/leap_cli/app.rb b/lib/leap_cli/app.rb new file mode 100644 index 0000000..90c4ae9 --- /dev/null +++ b/lib/leap_cli/app.rb @@ -0,0 +1,57 @@ +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 + + # + # 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 + + # + # load commands and run + # + commands_from('leap_cli/commands') +end |