gli 1.1.1 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +42 -12
- data/lib/gli.rb +13 -1
- data/lib/gli_version.rb +1 -1
- metadata +17 -5
data/README.rdoc
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
= Git-Like Interface Command Line Parser
|
2
2
|
|
3
3
|
Author:: Dave Copeland (mailto:davetron5000 at g mail dot com)
|
4
|
-
Copyright:: Copyright (c)
|
4
|
+
Copyright:: Copyright (c) 2010 by Dave Copeland
|
5
5
|
License:: Distributes under the Apache License, see LICENSE.txt in the source distro
|
6
6
|
|
7
7
|
This is a DSL you can use to create a command line interface like git, gem or svn, in that the first argument is a command, and there are global and command specific flags.
|
@@ -24,6 +24,15 @@ This will create a basic scaffold project in <tt>./my_proj</tt> with:
|
|
24
24
|
* a README shell
|
25
25
|
* Rakefile that can generate RDoc, package your Gem and run tests
|
26
26
|
|
27
|
+
== Supported Platforms
|
28
|
+
|
29
|
+
Known to work on
|
30
|
+
|
31
|
+
* 1.8.7
|
32
|
+
* 1.9.2
|
33
|
+
|
34
|
+
Though likely works on various other versions
|
35
|
+
|
27
36
|
=== Example
|
28
37
|
|
29
38
|
This example demonstrates most of the features of GLI.
|
@@ -48,18 +57,19 @@ the file will be located relative to the current user's home directory (which is
|
|
48
57
|
|
49
58
|
config_file '.glirc'
|
50
59
|
|
51
|
-
the configuration file
|
52
60
|
This describes a command line switch "-n" that is global to all commands and specified before
|
53
61
|
the command name on the command line.
|
54
62
|
|
55
63
|
desc 'Dry run; don\'t change the disk'
|
56
64
|
switch :n
|
57
65
|
|
58
|
-
The following describes a command line flag that is global and has a default value of '<tt>.</tt>'
|
59
|
-
|
66
|
+
The following describes a command line flag that is global and has a default value of '<tt>.</tt>' (in GLI parlance,
|
67
|
+
a "flag" is a command line switch that takes an option). It also
|
68
|
+
specifies a short and long description of its argument. This is used to print command line help and to generate
|
69
|
+
rdoc documentation. Note that we
|
60
70
|
have specified two different aliases for this flag. <tt>-r</tt> (because it is listed first) is the default
|
61
71
|
one and <tt>--root</tt> (note two-dash syntax) is also supported. This means that <tt>-r some_dir</tt> and <tt>--root=some_dir</tt> mean
|
62
|
-
the same thing to the application
|
72
|
+
the same thing to the application, but that your code should look for <tt>:r</tt>.
|
63
73
|
|
64
74
|
desc 'Root dir in which to create project'
|
65
75
|
long_desc 'This is the location where your project ill be created. A subdirectory named for your project will be created here, and THAT directory will contain the generated files'
|
@@ -67,7 +77,7 @@ the same thing to the application.
|
|
67
77
|
arg_name 'root_dir'
|
68
78
|
flag [:r,:root]
|
69
79
|
|
70
|
-
|
80
|
+
Next, we specify a command. Inside the block we can use the same sorts of things as we did above to define flags
|
71
81
|
and switches specific to the command. These must come after the command name. Also note that we use <tt>arg_name</tt>
|
72
82
|
here to describe the arguments this command accepts.
|
73
83
|
|
@@ -81,15 +91,23 @@ here to describe the arguments this command accepts.
|
|
81
91
|
c.desc 'Overwrite/ignore existing files and directories'
|
82
92
|
c.switch [:force]
|
83
93
|
|
84
|
-
|
85
|
-
|
86
|
-
|
94
|
+
Next, while we are still inside the <tt>command</tt> block,
|
95
|
+
we specify the actual code to execute when the command is chosen by the user. We define a block that
|
96
|
+
will be given the global options (as a Hash), the command-specific options (as a Hash) and the command
|
97
|
+
line arguments. The hashes keys are symbols based upon the switches and flags. For a switch or
|
98
|
+
flag named "-r", we would use <tt>:r</tt>.
|
87
99
|
|
88
100
|
c.action do |global_options,options,args|
|
89
101
|
if args.length < 1
|
90
102
|
raise 'You must specify the name of your project'
|
91
103
|
end
|
92
|
-
Scaffold.create_scaffold(
|
104
|
+
Scaffold.create_scaffold(global_options[:r],
|
105
|
+
!options[:notest],
|
106
|
+
options[:e],
|
107
|
+
args[0],
|
108
|
+
args[1..-1],
|
109
|
+
ooptions[:force],
|
110
|
+
global_options[:n])
|
93
111
|
end
|
94
112
|
end
|
95
113
|
|
@@ -98,7 +116,8 @@ You can also specify some global code to run before, after and on errors:
|
|
98
116
|
pre do |global_options,command,options,args|
|
99
117
|
puts "After parsing, but before #{command.name} is run"
|
100
118
|
return true
|
101
|
-
# return false if we want to skip command execution for some reason
|
119
|
+
# return false if we want to skip command execution for some reason,
|
120
|
+
# such as some global precondition not having been met
|
102
121
|
end
|
103
122
|
|
104
123
|
post do |global_options,command,options,args|
|
@@ -123,7 +142,8 @@ What this gives you:
|
|
123
142
|
* Error handling when flags do not receive arguments or unknown flags or switches are given
|
124
143
|
* Error handling when an unknown command is specified
|
125
144
|
* Default values for flags if they are not specified by the user (switches all default to false)
|
126
|
-
* An easy way to allow
|
145
|
+
* An easy way to allow user or site-specific defaults for options via a config file for your app
|
146
|
+
* Nice RDoc describing how to use your application (you can see an example in the rdoc version of this file for the <tt>gli</tt> command)
|
127
147
|
|
128
148
|
What this doesn't give you:
|
129
149
|
|
@@ -170,6 +190,16 @@ command of your application is created, to allow the user edit the config file
|
|
170
190
|
This allows you to design your application to have it's behavior _entirely_ affected by command line options, with sensible
|
171
191
|
defaults stored in a configuration file.
|
172
192
|
|
193
|
+
== Generating RDoc
|
194
|
+
|
195
|
+
All gli-based applications include a "hidden" command named <tt>rdoc</tt>. When you execute this command, a file called <tt>yourapp.rdoc</tt>
|
196
|
+
is created in the current directory. This contains a rdoc-formatted helpfile for your command line application. This can be useful
|
197
|
+
in packaging your application to share with others. This is also the only place in which the <tt>long_desc</tt> values are currently
|
198
|
+
used.
|
199
|
+
|
200
|
+
If your application has a <tt>README.rdoc</tt> already, you can simply add <tt>:include:yourapp.rdoc</tt> to the bottom and it will
|
201
|
+
be included when you generate and publish your rdoc (note that it will *not* show up on github).
|
202
|
+
|
173
203
|
== Reference
|
174
204
|
|
175
205
|
|
data/lib/gli.rb
CHANGED
@@ -40,6 +40,7 @@ module GLI
|
|
40
40
|
|
41
41
|
# describe the argument name of the next flag
|
42
42
|
def arg_name(name); @@next_arg_name = name; end
|
43
|
+
|
43
44
|
# set the default value of the next flag
|
44
45
|
def default_value(val); @@next_default_value = val; end
|
45
46
|
|
@@ -255,7 +256,18 @@ module GLI
|
|
255
256
|
|
256
257
|
flag_hash.each do |name,flag|
|
257
258
|
value = flag.get_value!(try_me)
|
258
|
-
|
259
|
+
# So, there's a case where the first time we request the value for a flag,
|
260
|
+
# we get the default and not the user-provided value. The next time we request
|
261
|
+
# it, we want to override it with the real value.
|
262
|
+
# HOWEVER, sometimes this happens in reverse, so we want to err on taking the
|
263
|
+
# user-provided, non-default value where possible.
|
264
|
+
if value
|
265
|
+
if options[name]
|
266
|
+
options[name] = value if options[name] == flag.default_value
|
267
|
+
else
|
268
|
+
options[name] = value
|
269
|
+
end
|
270
|
+
end
|
259
271
|
end
|
260
272
|
|
261
273
|
if try_me.empty?
|
data/lib/gli_version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 23
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 1
|
8
|
+
- 1
|
9
|
+
- 2
|
10
|
+
version: 1.1.2
|
5
11
|
platform: ruby
|
6
12
|
authors:
|
7
13
|
- David Copeland
|
@@ -9,7 +15,7 @@ autorequire:
|
|
9
15
|
bindir: bin
|
10
16
|
cert_chain: []
|
11
17
|
|
12
|
-
date: 2010-
|
18
|
+
date: 2010-10-19 00:00:00 -04:00
|
13
19
|
default_executable:
|
14
20
|
dependencies: []
|
15
21
|
|
@@ -52,21 +58,27 @@ require_paths:
|
|
52
58
|
- lib
|
53
59
|
- lib
|
54
60
|
required_ruby_version: !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
55
62
|
requirements:
|
56
63
|
- - ">="
|
57
64
|
- !ruby/object:Gem::Version
|
65
|
+
hash: 3
|
66
|
+
segments:
|
67
|
+
- 0
|
58
68
|
version: "0"
|
59
|
-
version:
|
60
69
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
|
+
none: false
|
61
71
|
requirements:
|
62
72
|
- - ">="
|
63
73
|
- !ruby/object:Gem::Version
|
74
|
+
hash: 3
|
75
|
+
segments:
|
76
|
+
- 0
|
64
77
|
version: "0"
|
65
|
-
version:
|
66
78
|
requirements: []
|
67
79
|
|
68
80
|
rubyforge_project: gli
|
69
|
-
rubygems_version: 1.3.
|
81
|
+
rubygems_version: 1.3.7
|
70
82
|
signing_key:
|
71
83
|
specification_version: 3
|
72
84
|
summary: A Git Like Interface for building command line apps
|