aboutsummaryrefslogtreecommitdiff
path: root/lib/leap_cli/app.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/leap_cli/app.rb')
-rw-r--r--lib/leap_cli/app.rb57
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