# Cri News ## 2.15.8 Fixes: * Don’t explicitly set default values for options (#99) This release reverts a backwards-incompatible change introduced in 2.15.7. To illustrate this, compare the behavior of the following command in recent versions of Cri: ```ruby option :f, :force, 'use force', argument: :forbidden run do |opts, args, cmd| puts "Options = #{opts.inspect}" puts "Force? #{opts[:force]}" puts "Option given? #{opts.key?(:force)}" end ``` In Cri 2.15.6, the default is not set in the options hash, so the value is `nil` and `#key?` returns false: ```sh % ./run Options = {} Force? nil Option given? false ``` This behavior was inconsistent with what was documented: flag options were (and still are) documented to default to `false` rather than `nil`. In Cri 2.15.7, the default value is `false`, and explicitly set in the options hash (`#key?` returns `true`): ```sh % ./run Options = {:force=>false} Force? false Option given? true ``` This change made it impossible to detect options that were not explicitly specified, because the behavior of `#key?` also changed. In Cri 2.15.8, the default value is also `false` (as in 2.15.7), but not explicitly set in the options hash (`#key?` returns `false`, as in 2.15.6): ```sh % ./run Options = {} Force? false Option given? false ``` This backwards-incompatible change was not intentional. To fix issue #94, a change in behavior was needed, but this change also affected other, previously-undefined behavior. The new behavior in 2.15.8 should fix the bug fixed in 2.15.7 (#94, #96), without causing the problems introduced in that version. ## 2.15.7 Fixes: * Options with a forbidden argument now default to false, rather than nil (#94, #96) ## 2.15.6 Fixes: * Fixed problem with help header not being shown if the summary is missing (#93) ## 2.15.5 Fixes: * Restored compatibility with Ruby 2.3. (#91) ## 2.15.4 Fixes: * Removed dependency on `colored`, which restores functionality to gems that `colored` breaks (e.g. `awesome_print`) (#89, #90) ## 2.15.3 Fixes: * Made `ArgumentList#each` callable without a block, in which case it returns an `Enumerator` (mimicking `Array`) (#87, #88) ## 2.15.2 Fixes: * Fixed option propagation for two levels or more (#85, #86) ## 2.15.1 Fixes: * Made -h/--help not fail when parameters are defined for the command that -h/--help is called on (#76, #78) Enhancements: * Made `#option` raise an error when unrecognised parameters are passed to it (#77) [Marc-André Lafortune] ## 2.15.0 Features: * Added support for parameter transformation (#72) ## 2.14.0 Features: * Added `Cri::Command.load_file` ## 2.13.0 Features: * Added support for explicitly specifying zero parameters using `#no_params` (#71) ## 2.12.0 Features: * Added support for parameter naming and validation (#70) ## 2.11.0 Features: * Added support for transforming option values (#68) ## 2.10.1 Fixes: * Restored Ruby 2.1 compatibility (for now) ## 2.10.0 Features: * Added support for skipping option parsing (#62) [Tim Sharpe] This release drops support for Ruby 2.1, which is no longer supported. ## 2.9.1 Fixes: * Made default values be always returned, even when not explicitly specified (#57, #58) ## 2.9.0 Features: * Allowed specifying default option value (#55) Enhancements: * Added support for specifying values for combined options (#56) ## 2.8.0 Features: * Allowed passing `hard_exit: false` to `Command#run` to prevent `SystemExit` (#51) * Allowed specifying the default subcommand (#54) ## 2.7.1 Fixes: * Fixed some grammatical mistakes ## 2.7.0 Features: * Added support for hidden options (#43, #44) [Bart Mesuere] Enhancements: * Added option values to help output (#37, #40, #41) * Made option descriptions wrap (#36, #45) [Bart Mesuere] ## 2.6.1 * Disable ANSI color codes when not supported (#31, #32) ## 2.6.0 * Added support for multi-valued options (#29) [Toon Willems] ## 2.5.0 * Made the default help command handle subcommands (#27) * Added `#raw` method to argument arrays, returning all arguments including `--` (#22) ## 2.4.1 * Fixed ordering of option groups on Ruby 1.8.x (#14, #15) * Fixed ordering of commands when --verbose is passed (#16, #18) ## 2.4.0 * Allowed either short or long option to be, eh, optional (#9, #10) [Ken Coar] * Fixed wrap-and-indent behavior (#12) [Ken Coar] * Moved version information into `cri/version` ## 2.3.0 * Added colors (#1) * Added support for marking commands as hidden ## 2.2.1 * Made command help sort subcommands ## 2.2.0 * Allowed commands with subcommands to have a run block ## 2.1.0 * Added support for runners * Split up local/global command options ## 2.0.2 * Added command filename to stack traces ## 2.0.1 * Sorted ambiguous command names * Restored compatibility with Ruby 1.8.x ## 2.0.0 * Added DSL * Added support for nested commands ## 1.0.1 * Made gem actually include code. D'oh. ## 1.0.0 * Initial release!