diff options
-rw-r--r-- | .travis.yml | 1 | ||||
-rw-r--r-- | CHANGELOG.md | 14 | ||||
-rw-r--r-- | README.md | 88 | ||||
-rw-r--r-- | lib/slop.rb | 2 | ||||
-rw-r--r-- | lib/slop/options.rb | 4 | ||||
-rw-r--r-- | test/options_test.rb | 11 |
6 files changed, 30 insertions, 90 deletions
diff --git a/.travis.yml b/.travis.yml index 5a30500..42041b4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,6 +20,7 @@ rvm: - jruby-9.2.14.0 - jruby-head - ruby-head + - truffleruby-head jdk: - openjdk8 notifications: diff --git a/CHANGELOG.md b/CHANGELOG.md index 6fd1d58..ab46f71 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,20 @@ Changelog ========= +v4.8.2 (2020-07-10) +------------------- + +Bug fixes: + * Fix bug where separator position was messed up if using `help: false` + [#253](https://github.com/leejarvis/slop/issues/253) + +v4.8.1 (2020-03-31) +------------------- + +Bug fixes: + * Fix keyword argument warning. [#251](https://github.com/leejarvis/slop/pull/251) + + v4.8.0 (2020-01-17) ------------------- @@ -3,9 +3,6 @@ Slop Slop is a simple option parser with an easy to remember syntax and friendly API. -Version 4 of Slop is aimed at Ruby 2.0 or later. Please use -[Version 3](https://github.com/leejarvis/slop/tree/v3) for Ruby 1.9 support. - [![Build Status](https://travis-ci.org/leejarvis/slop.svg?branch=master)](http://travis-ci.org/leejarvis/slop) Installation @@ -275,87 +272,4 @@ end Commands -------- -As of version 4, Slop does not have built in support for git-style subcommands. -You can use version 3 of Slop (see `v3` branch). - -Upgrading from version 3 ------------------------- - -Slop v4 is not backwards compatible. The code has been completely rewritten. -If you're already using version 3 you *have* to update your code to use version 4. -Here's an overview of the large changes: - -#### No more `instance_eval` - -Before: - -```ruby -Slop.parse do - on 'v', 'version' do - puts VERSION - end -end -``` - -After: - -```ruby -Slop.parse do |o| - o.on '-v', '--version' do - puts VERSION - end -end -``` - -#### No more `as` for option types - -Instead, the type is declared in the method call. Before: - -```ruby -on 'port=', as: Integer -``` - -After: - -```ruby -o.int '--port' # or integer -``` - -See the custom types section of the document. - -#### No more trailing `=` - -Instead, the "does this option expect an argument?" question is answered by -the option type (i.e `on` and `bool` options do not expect arguments, all -others do). They handle type conversion, too. - -#### Hyphens are required - -This was a hard decision to make, but you must provide prefixed hyphens when -declaring your flags. This improves the implementation nicer and makes things -much less ambiguous, which leads to less error prone code. It also means you -can easily support single hyphen prefix for a long flag, i.e `-hostname` which -you could not do before. It also means you can provide infinite flag aliases: -`o.string '-f', '-x', '--foo', '--bar', 'this is insane'` - -#### Strict is now on by default - -v3 had a `strict` option. v4 has no such option. To suppress errors you can -instead provide the `suppress_errors: true` option to Slop. - -#### No more parse! - -Where v3 has both `Slop.parse` and `Slop.parse!`, v4 only has `parse`. The -former was used to decide whether Slop should or should not mutate the -original args (usually ARGV). This is almost never what you want, and it -can lead to confusion. Instead, `Slop::Result` provides an `arguments` -methods: - -```ruby -opts = Slop.parse do |o| - o.string '--hostname', '...' -end - -# ARGV is "hello --hostname foo bar" -p opts.arguments #=> ["hello", "bar"] -``` +Slop not longer has built in support for git-style subcommands. diff --git a/lib/slop.rb b/lib/slop.rb index adf5b8f..3d7a95c 100644 --- a/lib/slop.rb +++ b/lib/slop.rb @@ -6,7 +6,7 @@ require 'slop/types' require 'slop/error' module Slop - VERSION = '4.8.0' + VERSION = '4.8.2' # Parse an array of options (defaults to ARGV). Accepts an # optional hash of configuration options and block. diff --git a/lib/slop/options.rb b/lib/slop/options.rb index 9a5f5cc..875fcfe 100644 --- a/lib/slop/options.rb +++ b/lib/slop/options.rb @@ -102,13 +102,13 @@ module Slop str = config[:banner] ? "#{banner}\n" : "" len = longest_flag_length - options.select(&:help?).each_with_index.sort_by{ |o,i| [o.tail, i] }.each do |opt, i| + options.select.each_with_index.sort_by{ |o,i| [o.tail, i] }.each do |opt, i| # use the index to fetch an associated separator if sep = separators[i] str << "#{sep}\n" end - str << "#{prefix}#{opt.to_s(offset: len)}\n" + str << "#{prefix}#{opt.to_s(offset: len)}\n" if opt.help? end if sep = separators[options.size] diff --git a/test/options_test.rb b/test/options_test.rb index 2f83fc4..0aa6e67 100644 --- a/test/options_test.rb +++ b/test/options_test.rb @@ -70,6 +70,17 @@ describe Slop::Options do assert_equal [""], @options.separators end + + it "correctly handles options with `help: false`" do + @options.boolean "--opt1" + @options.boolean "--opt2", help: false + @options.separator "other options" + @options.boolean "--opt3", help: false + @options.boolean "--opt4" + + _usage, help = @options.to_s.squeeze(" ").split("\n", 2) + assert_equal "--opt1 \nother options\n --opt4", help.strip + end end describe "#method_missing" do |