1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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
|