-
Notifications
You must be signed in to change notification settings - Fork 105
Changelog
All future release notes are in the releases section
-
--versionnow just shows the version, courtesy @brianknight10 (see 138,143) - Synopsis is now more honest - doesn't show
[command options]if there aren't any, courtesy @calestar (see 147) - A falsey exit from
prewill now cause the app to exit nonzero (or with an exception ifGLI_DEBUGis set), (see 146) - Support for terminal detection on solaris (see 129)
Biggest change is:
Redesign of how subcommands are handled to enable each subcommand to have its own space of arguments and options.
To enable this, you must subcommand_option_handling :normal
subcommand_option_handling :normalThis is inserted into new applications, but isn't the default for backwards compatibility.
Subcommands can't use flags or switches the parent uses:
command :tasks do |c|
c.flag :long
c.command :list do |list|
c.flag :long # <---- runtime error
c.action do |*|
end
end
endSubcommands can't use a flag/switch with the same name as another subcommand with the same parent:
command :tasks do |c|
c.command :list do |list|
c.flag :long
c.action do |*|
end
end
c.command :new do |new|
c.flag :long # <----- runtime error
c.action do |*|
end
end
endEach subcommand has its own "flagspace":
command :tasks do |c|
c.flag :long
c.command :list do |list|
c.flag :long
c.action do |*|
end
end
c.command :new do |new|
c.flag :long # <----- runtime error
c.action do |*|
end
end
endYou might do this:
> my_app tasks --long given-to-command list --long given-to-list-subcommand
> my_app tasks --long given-to-command new --long given-to-list-subcommand
The reason for an RC is that it required a fair amount of re-working of the code, so I want to be sure nothings subtle was broken.
Old behavior is the default: https://github.com/davetron5000/gli/blob/fully-nested-subcommands/lib/gli/app.rb#L262
- Re-fix issue where sub-sub commands were not getting documented properly (see 131 again)
- Make dirs up to config dir if needed (see 139, thanks @aussielunix!)
- Fix issue where default command with no description caused a crash (see 131)
- Add back the "skips" overrides for the help command (see 124)
- Fix hard-coded
todoin scaffold (see 118, thanks to @pengwynn) - Require
pathnameexplicitly (see 112) - Doc typos (see 120, thanks again to @pengwynn!)
- Options are ordered based on help command order (e.g. manual vs. alphabetic) as opposed to being always alpha, working on 1.8 Rubies (The fix for 114 was insufficient)
- Switches can now be defaulted to "on" (see 86)
- Options are ordered based on help command order (e.g. manual vs. alphabetic) as opposed to being always alpha (see 114)
- Bugfix for help output when using an unknown command. Help advised you to use
gliand not the actual app name to get help. (see 111)
- Expand
commands_fromto allow for requiring files from an absolute path outside the load path, so as to allow for runtime plugins, courtesy @pengwynn (see 109)
- Bugfix in scaffold, courtesy @pengwynn, (see 108)
- Options now available as strings and symbols from
optionsandglobal_optionshashes passed toactionblocks (see 106) - Proper verbatim help output that I botched initially. Now,
:verbatimdoes no wrapping of any kind. Courtesy, @d1 (see 107)
- Fix bug in
_doccommand on 1.8 rubies
- Improve format of rdoc from the
_doccommand - App can get a
long_desc(see 101) -
-hfor a command or subcommand shows help for that command or subcommand (see 104) - Allow flag default values to be masked, e.g. for passwords in a config file (see 71)
- Allow manual ordering of help commands, instead of sorting (see 83)
- Better control of help text wrapping; can disable or enable only for TTY (see 100)
- Can document command arguments as optional and/or multiple (see 85)
- Restore
-cto the help command and make it work with sub commands for shell completion assistance (see 105) - Option to leave
ARGVunmodified (see 103)
- Subcommands
- Better help output
- Way more features when declaring flags and switches
-
OptionParserunderneath, so you get all of it's power (and none of it's weaknesses) - Switches are negatable by default
- Bootstraped apps are better, including aruba, an rvmrc, and more modern filenames
- More easily place command declarations in external files
- Enhanced rdoc
- Make
include GLIbackwards-compatible (butGLI.runfail with a useful message) - Fixed bug where
default_commanddidn't work for top level commands. Fix courtesy @v-yarotsky - Added around hook for automatic-resource-management of global setup. Idea courtesy @v-yarotsky
- Doc fixes from @v-yarotsky and @aterris
- Various bug fixes
- Can add multi-paragraph descriptions via a double line break
- New command,
default_command - Bugfixes related to scaffolded apps
- File permissions on created config files set more strictly, (see #58), thanks @bemurphy!)
- Fixes #57 by removing the
-Rfrom the rdoc call in the gemspec
- Added back the load path stuff I removed in 1.3.4, since it was causing problems running locally. Need a better solution and/or wait for GLI 2
- 1.9.3 support
- Stop futzing with the load path in
gliand in generated code
- Fix bug with word-wrapping help text ( See #51, thanks babysnakes!)
- Fix bug where omitting all
desccalls results in no documentation (closed #48) - Get the home directory in a more x-platform way (closed #47)
- Added simplecov for 1.9.2 code coverage
- Some other fixes to make dev tools compatible with various rubies
Thanks to gnufied for the patches!
- Use
/usr/bin/envinstead of/usr/bin/rubyingliand scaffolded apps - Allow flags to appear after arguments
-
Gemfile.lockno longer tracked in git, per best practices
- Help now shows the default values based on what's in the configuration (closed #10)
- Fixed bug where options specified in config cannot be overridden on the command line (closed #43)
- Scaffolded apps no longer require a 1.8.7-only test class (closed #42)
- You can now skip pre and post blocks per command (see Hooks for more)
- You can specify a program description and it shows up in the help (closed #40)
- JRuby support (i.e. just made sure it actually works on JRuby)
- Test coverage of the
glicommand and a basic scaffolded site (closed #30)
- Help output now makes distinction between global and command options
- Error messages on bad invocations now give you a clue as to where to look (e.g. use 'gli help' for list of commands)
- Using
gemspecandadd_development_dependencyinstead of putting gems in the Gemfile - Massive overhaul of rubydoc; everything's consistent, up to date, and usable now
- Created the all-important cheatsheet
- Refactored some nasty methods
- Corrected gemspec to include all the files
- Fixed issue with Ruby 1.9
casestatement
This version is broken, as it doesn't include ONE file in the .gem
This version is broken, as it doesn't include two files in the .gem, and is not compatible with Ruby 1.9
- new GLI apps will exit nonzero on errors (see Error Handling)
- Support for custom exit codes
- GLI now uses an environment variable to allow for debugging caught exceptions
- GLI now uses the width of the terminal for displaying help messages, not just hard-coding 80
- Changed uses of
map(&:symbol)to older form, since this doesn't work on 100% of Ruby 1.8.7s.
- Changed default data structure of options back to a
Hash. If you want to use theOpenStructsubclassOptions, simply putuse_openstruct truein your command line definition.
- Added ability to use
helpcommand to list commands suitable for creating bash completion script -
optionsandglobal_optionswill now contain values for all aliases of each flag and switch, so if you created a flag withflag [:f,:flag]and the user specifies-f fooon the command line, bothoptions[:f]andoptions[:flag]will have the valuefoo. Same behavior for--flag=foo. - You may now no-longer use names that have already been used. So if you declare a switch
switch :fooand then later declare a flagflag [:f,:foo], you get anArgumentError. This is only checked within relevant scope, so you can still use the same option names between commands, and you can still have the same option name once in global and once in command scope. This is really a bugfix as the behavior of GLI was not clear before. -
long_descnow shows up in generated rdoc for flags and switches - Scaffoling now generates a usable
Gemfilefor bundler - More direct support for version numbers in GLI-managed apps
Changed the way we locate FILE's directory; if it's a symlink it would've have worked. Required adding :realpath method to File for pre 1.9.2 rubies