summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHansuk <flavono123@gmail.com>2020-01-17 10:45:22 +0900
committerHansuk <flavono123@gmail.com>2020-01-17 10:45:22 +0900
commite28fbcf19c9e1b6d8875be680c6bb4f40ab0c21c (patch)
tree86cb923b01d602ca410fc6dc1734a3aaf29a3dc8
parent6995484ee3a4a505c1c8705709f8dc00899013b3 (diff)
downloadslop-e28fbcf19c9e1b6d8875be680c6bb4f40ab0c21c.tar.gz
admit comments
- https://github.com/leejarvis/slop/pull/250#discussion_r367361652 - https://github.com/leejarvis/slop/pull/250#discussion_r367420001 Signed-off-by: Hansuk <flavono123@gmail.com>
-rw-r--r--lib/slop/types.rb4
-rw-r--r--test/types_test.rb4
2 files changed, 7 insertions, 1 deletions
diff --git a/lib/slop/types.rb b/lib/slop/types.rb
index c1055ea..c53319c 100644
--- a/lib/slop/types.rb
+++ b/lib/slop/types.rb
@@ -51,8 +51,10 @@ module Slop
# Cast the option argument to a Float.
class FloatOption < Option
+ FLOAT_STRING_REGEXP = /\A[+-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+-]?\d+)?\z/.freeze
+
def call(value)
- value =~ /\A[+-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+-]?\d+)?\z/ && value.to_f
+ value =~ FLOAT_STRING_REGEXP && value.to_f
end
end
diff --git a/test/types_test.rb b/test/types_test.rb
index 728b969..d71c737 100644
--- a/test/types_test.rb
+++ b/test/types_test.rb
@@ -69,15 +69,19 @@ describe Slop::FloatOption do
it "parses scientific notations" do
assert_equal @scientific_notation_value, @result[:scientific_notation]
+
@scientific_notation_value = 4E21
@result = @options.parse %W(--scientific-notation #{@scientific_notation_value})
assert_equal @scientific_notation_value, @result[:scientific_notation]
+
@scientific_notation_value = 4.0e21
@result = @options.parse %W(--scientific-notation #{@scientific_notation_value})
assert_equal @scientific_notation_value, @result[:scientific_notation]
+
@scientific_notation_value = -4e21
@result = @options.parse %W(--scientific-notation #{@scientific_notation_value})
assert_equal @scientific_notation_value, @result[:scientific_notation]
+
@scientific_notation_value = 4e-21
@result = @options.parse %W(--scientific-notation #{@scientific_notation_value})
assert_equal @scientific_notation_value, @result[:scientific_notation]