forked from davetron5000/gli
-
Notifications
You must be signed in to change notification settings - Fork 0
/
gli
executable file
·72 lines (57 loc) · 1.85 KB
/
gli
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#!/usr/bin/env ruby
# 1.9 adds realpath to resolve symlinks; 1.8 doesn't
# have this method, so we add it so we get resolved symlinks
# and compatibility
unless File.respond_to? :realpath
class File #:nodoc:
def self.realpath path
return realpath(File.readlink(path)) if symlink?(path)
path
end
end
end
$: << File.expand_path(File.dirname(File.realpath(__FILE__)) + '/../lib')
require 'gli'
require 'support/scaffold'
require 'gli_version'
include GLI
program_desc 'gli allows you to create the scaffolding for a GLI-powered application'
version GLI::VERSION
desc 'Be verbose'
switch :v
desc 'Dry run; don''t change the disk'
switch :n
desc 'Root dir of project'
long_desc 'This is the directory where the project''s directory will be made, so if you specify a project name ''foo'' and the root dir of ''.'', the directory ''./foo'' will be created'
default_value '.'
flag [:r,:root]
desc 'Create a new GLI-based project'
long_desc <<EOS
This will create a scaffold command line project that uses GLI
for command line processing. Specifically, this will create
an executable ready to go, as well as a lib and test directory, all
inside the directory named for your project
EOS
arg_name 'project_name [command[ command]*]'
command [:init,:scaffold] do |c|
c.desc 'Create an ext dir'
c.switch [:e,:ext]
c.desc 'Do not create a test dir'
c.switch [:notest]
c.desc 'Overwrite/ignore existing files and directories'
c.switch [:force]
c.action do |g,o,args|
if args.length < 1
raise 'You must specify the name of your project'
end
Scaffold.create_scaffold(g[:r],!o[:notest],o[:e],args[0],args[1..-1],o[:force],g[:n])
end
end
pre do |global,command,options,args|
puts "Executing #{command.name}" if global[:v]
true
end
post do |global,command,options,args|
puts "Executed #{command.name}" if global[:v]
end
exit run(ARGV)