slop 4.7.0 → 4.8.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 125a7e982b88caf3675166359579515c0af86540002d463042c336c45de8f310
4
- data.tar.gz: a0518f68ab2a02cb7cdcdc18fbf0fb9134eac55dc903b1486fa569e66b15a18a
3
+ metadata.gz: 9ec00c622e6cf0e93fdcebfa0964225fd2a2be127fcf21191a47bb96a64afb2b
4
+ data.tar.gz: 129ca3a92e02e2ac696c4a1dbc805a6316e59f8802d7c06fe3b071ef4467e6e4
5
5
  SHA512:
6
- metadata.gz: 463bd12f9ab37a1f27ebca2bdb98954d69f3160bb64d6b8d813a319f66bde91f07c9002ebfd5267277fbbe87bfb20dc50faa0b74e7478ffe3e1acad049dd765e
7
- data.tar.gz: 0c5fa72e533dbdf3ff4bfc1f1f5c7c0944aa4e8f1afc41b41ffe7b8c29807be11b111d5f2c218a3f68034dc65243ea527cad4f0a27af56a5fefddce6e20550ba
6
+ metadata.gz: b6280d06c83bafc75d2b2169d0c08ac1470031777aad641a162dda1657dbaa8940dad56ae20431fe7dc34eba52ab6a6f42a8dbb0207ad0f568cc21d5ed84884d
7
+ data.tar.gz: ce64d1d1d442cbb4a09c130e14a7f4d9837d53cf6ed2b4b4c3db1264650ebaba50cf500418737bbf265940dc2f430c14b30641394aca1b5626680fec4d4f4411
data/.travis.yml CHANGED
@@ -13,12 +13,15 @@ rvm:
13
13
  - 2.1
14
14
  - 2.2
15
15
  - 2.3.4
16
- - 2.4.1
17
- - 2.5.3
18
- - 2.6.0
19
- - jruby-9.2.5.0
16
+ - 2.4.9
17
+ - 2.5.7
18
+ - 2.6.5
19
+ - 2.7.0
20
+ - jruby-9.2.9.0
20
21
  - jruby-head
21
22
  - ruby-head
23
+ jdk:
24
+ - openjdk8
22
25
  notifications:
23
26
  email:
24
27
  on_success: change
data/CHANGELOG.md CHANGED
@@ -1,12 +1,33 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
+ v4.8.1 (2020-03-31)
5
+ -------------------
6
+
7
+ Bug fixes:
8
+ * Fix keyword argument warning. [#251](https://github.com/leejarvis/slop/pull/251)
9
+
10
+
11
+ v4.8.0 (2020-01-17)
12
+ -------------------
13
+
14
+ Features:
15
+ * Add support for prefixing integer values with `+` character
16
+ [#243](https://github.com/leejarvis/slop/pull/243) (Juha Ylitalo)
17
+ * Add support for parsing floats with scientific notation
18
+ [#250](https://github.com/leejarvis/slop/pull/250) (Hansuk Hong)
19
+
20
+ Maintenance:
21
+ * Add 2.7.0 to CI and fix warnings
22
+ [#248](https://github.com/leejarvis/slop/pull/248) (Juha Ylitalo, Andrew Kane)
23
+
4
24
  v4.7.0 (2019-06-29)
5
25
  -------------------
6
26
 
7
27
  Features:
8
28
  * Add `Slop::Result#fetch`. It returns the value of given option, or raises an error if given option is not present. [#232](https://github.com/leejarvis/slop/pull/232) ([Giovanni Benussi](https://github.com/giovannibenussi))
9
29
  * Adding a separator without passing any arguments now creates a separator with the empty string. [#238](https://github.com/leejarvis/slop/pull/238) ([Teemu Matilainen](https://github.com/tmatilai))
30
+
10
31
  Bug fixes
11
32
  * Ensure non-string option types have their flags consumed properly [#241] (Sutou Kouhei)
12
33
 
data/lib/slop/options.rb CHANGED
@@ -24,12 +24,12 @@ module Slop
24
24
  # The String banner prefixed to the help string.
25
25
  attr_accessor :banner
26
26
 
27
- def initialize(**config)
27
+ def initialize(**config, &block)
28
28
  @options = []
29
29
  @separators = []
30
30
  @banner = config[:banner].is_a?(String) ? config[:banner] : config.fetch(:banner, "usage: #{$0} [options]")
31
31
  @config = DEFAULT_CONFIG.merge(config)
32
- @parser = Parser.new(self, @config)
32
+ @parser = Parser.new(self, **@config)
33
33
 
34
34
  yield self if block_given?
35
35
  end
@@ -52,7 +52,7 @@ module Slop
52
52
  desc = flags.pop unless flags.last.start_with?('-')
53
53
  config = self.config.merge(config)
54
54
  klass = Slop.string_to_option_class(config[:type].to_s)
55
- option = klass.new(flags, desc, config, &block)
55
+ option = klass.new(flags, desc, **config, &block)
56
56
 
57
57
  add_option option
58
58
  end
@@ -82,7 +82,7 @@ module Slop
82
82
  def method_missing(name, *args, **config, &block)
83
83
  if respond_to_missing?(name)
84
84
  config[:type] = name
85
- on(*args, config, &block)
85
+ on(*args, **config, &block)
86
86
  else
87
87
  super
88
88
  end
data/lib/slop/parser.rb CHANGED
@@ -52,7 +52,6 @@ module Slop
52
52
 
53
53
  # support `foo=bar`
54
54
  orig_flag = flag.dup
55
- orig_arg = arg
56
55
  if match = flag.match(/([^=]+)=([^=]+)/)
57
56
  flag, arg = match.captures
58
57
  end
data/lib/slop/types.rb CHANGED
@@ -44,16 +44,17 @@ module Slop
44
44
  # Cast the option argument to an Integer.
45
45
  class IntegerOption < Option
46
46
  def call(value)
47
- value =~ /\A-?\d+\z/ && value.to_i
47
+ value =~ /\A[+-]?\d+\z/ && value.to_i
48
48
  end
49
49
  end
50
50
  IntOption = IntegerOption
51
51
 
52
52
  # Cast the option argument to a Float.
53
53
  class FloatOption < Option
54
+ FLOAT_STRING_REGEXP = /\A[+-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+-]?\d+)?\z/.freeze
55
+
54
56
  def call(value)
55
- # TODO: scientific notation, etc.
56
- value =~ /\A-?\d*\.*\d+\z/ && value.to_f
57
+ value =~ FLOAT_STRING_REGEXP && value.to_f
57
58
  end
58
59
  end
59
60
 
data/lib/slop.rb CHANGED
@@ -6,7 +6,7 @@ require 'slop/types'
6
6
  require 'slop/error'
7
7
 
8
8
  module Slop
9
- VERSION = '4.7.0'
9
+ VERSION = '4.8.1'
10
10
 
11
11
  # Parse an array of options (defaults to ARGV). Accepts an
12
12
  # optional hash of configuration options and block.
@@ -20,7 +20,7 @@ module Slop
20
20
  #
21
21
  # Returns a Slop::Result.
22
22
  def self.parse(items = ARGV, **config, &block)
23
- Options.new(config, &block).parse(items)
23
+ Options.new(**config, &block).parse(items)
24
24
  end
25
25
 
26
26
  # Example:
data/test/option_test.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  require 'test_helper'
2
2
 
3
3
  describe Slop::Option do
4
- def option(*args)
5
- Slop::Option.new(*args)
4
+ def option(*args, **kwargs, &block)
5
+ Slop::Option.new(*args, **kwargs, &block)
6
6
  end
7
7
 
8
8
  describe "#flag" do
data/test/options_test.rb CHANGED
@@ -121,11 +121,11 @@ describe Slop::Options do
121
121
 
122
122
  describe "custom banner" do
123
123
  it "is prefixed with defined banner" do
124
- @options_config = Slop::Options.new({banner: "custom banner"})
124
+ @options_config = Slop::Options.new(**{banner: "custom banner"})
125
125
  assert_match(/^custom banner/, @options_config.to_s)
126
126
  end
127
127
  it "banner is disabled" do
128
- @options_config = Slop::Options.new({banner: false})
128
+ @options_config = Slop::Options.new(**{banner: false})
129
129
  assert_match("", @options_config.to_s)
130
130
  end
131
131
  end
data/test/slop_test.rb CHANGED
@@ -1,6 +1,16 @@
1
1
  require "test_helper"
2
2
 
3
3
  describe Slop do
4
+ describe ".parse" do
5
+ it "parses a list of arguments" do
6
+ result = Slop.parse(%w[--name Lee]) do |o|
7
+ o.string "--name"
8
+ end
9
+
10
+ assert_equal "Lee", result[:name]
11
+ end
12
+ end
13
+
4
14
  describe ".option_defined?" do
5
15
  it "handles bad constant names" do
6
16
  assert_equal false, Slop.option_defined?("Foo?Bar")
data/test/types_test.rb CHANGED
@@ -32,11 +32,15 @@ describe Slop::IntegerOption do
32
32
  before do
33
33
  @options = Slop::Options.new
34
34
  @age = @options.integer "--age"
35
- @result = @options.parse %w(--age 20)
35
+ @minus = @options.integer "--minus"
36
+ @plus = @options.integer "--plus"
37
+ @result = @options.parse %w(--age 20 --minus -10 --plus +30)
36
38
  end
37
39
 
38
40
  it "returns the value as an integer" do
39
41
  assert_equal 20, @result[:age]
42
+ assert_equal (-10), @result[:minus]
43
+ assert_equal 30, @result[:plus]
40
44
  end
41
45
 
42
46
  it "returns nil for non-numbers by default" do
@@ -50,11 +54,37 @@ describe Slop::FloatOption do
50
54
  @options = Slop::Options.new
51
55
  @apr = @options.float "--apr"
52
56
  @apr_value = 2.9
53
- @result = @options.parse %W(--apr #{@apr_value})
57
+ @minus = @options.float "--minus"
58
+ @plus = @options.float "--plus"
59
+ @scientific_notation = @options.float "--scientific-notation"
60
+ @scientific_notation_value = 4e21
61
+ @result = @options.parse %W(--apr #{@apr_value} --minus -6.1 --plus +9.4 --scientific-notation #{@scientific_notation_value})
54
62
  end
55
63
 
56
64
  it "returns the value as a float" do
57
65
  assert_equal @apr_value, @result[:apr]
66
+ assert_equal (-6.1), @result[:minus]
67
+ assert_equal 9.4, @result[:plus]
68
+ end
69
+
70
+ it "parses scientific notations" do
71
+ assert_equal @scientific_notation_value, @result[:scientific_notation]
72
+
73
+ @scientific_notation_value = 4E21
74
+ @result = @options.parse %W(--scientific-notation #{@scientific_notation_value})
75
+ assert_equal @scientific_notation_value, @result[:scientific_notation]
76
+
77
+ @scientific_notation_value = 4.0e21
78
+ @result = @options.parse %W(--scientific-notation #{@scientific_notation_value})
79
+ assert_equal @scientific_notation_value, @result[:scientific_notation]
80
+
81
+ @scientific_notation_value = -4e21
82
+ @result = @options.parse %W(--scientific-notation #{@scientific_notation_value})
83
+ assert_equal @scientific_notation_value, @result[:scientific_notation]
84
+
85
+ @scientific_notation_value = 4e-21
86
+ @result = @options.parse %W(--scientific-notation #{@scientific_notation_value})
87
+ assert_equal @scientific_notation_value, @result[:scientific_notation]
58
88
  end
59
89
 
60
90
  it "returns nil for non-numbers by default" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slop
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.7.0
4
+ version: 4.8.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lee Jarvis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-06-29 00:00:00.000000000 Z
11
+ date: 2020-03-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -86,8 +86,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
86
86
  - !ruby/object:Gem::Version
87
87
  version: '0'
88
88
  requirements: []
89
- rubyforge_project:
90
- rubygems_version: 2.7.6
89
+ rubygems_version: 3.0.3
91
90
  signing_key:
92
91
  specification_version: 4
93
92
  summary: Simple Lightweight Option Parsing