diff options
author | Victor Gama <hey@vito.io> | 2023-02-10 16:25:08 -0300 |
---|---|---|
committer | Victor Gama <hey@vito.io> | 2023-02-15 11:43:06 -0300 |
commit | a23fa41a5674485600365985bea2a905e5e087df (patch) | |
tree | c781122a70e710929731ca811cd3f2d7ea4c0023 /lib/slop/types.rb | |
parent | fc4622fc08d7982847ff583ad691ee4ba47f63f8 (diff) | |
download | slop-a23fa41a5674485600365985bea2a905e5e087df.tar.gz |
Add optional type validation
Diffstat (limited to 'lib/slop/types.rb')
-rw-r--r-- | lib/slop/types.rb | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/lib/slop/types.rb b/lib/slop/types.rb index 83e4a0b..a08537d 100644 --- a/lib/slop/types.rb +++ b/lib/slop/types.rb @@ -22,6 +22,13 @@ module Slop attr_accessor :explicit_value FALSE_VALUES = [false, 'false', 'no', 'off', '0'].freeze + TRUE_VALUES = [true, 'true', 'yes', 'on', '1'].freeze + VALID_VALUES = (FALSE_VALUES + TRUE_VALUES).freeze + + def valid?(value) + return true if value.is_a?(String) && value.start_with?("--") + value.nil? || VALID_VALUES.include?(value) + end def call(value) self.explicit_value = value @@ -52,8 +59,14 @@ module Slop # Cast the option argument to an Integer. class IntegerOption < Option + INT_STRING_REGEXP = /\A[+-]?\d+\z/.freeze + + def valid?(value) + value =~ INT_STRING_REGEXP + end + def call(value) - value =~ /\A[+-]?\d+\z/ && value.to_i + value.to_i end end IntOption = IntegerOption @@ -62,8 +75,12 @@ module Slop class FloatOption < Option FLOAT_STRING_REGEXP = /\A[+-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+-]?\d+)?\z/.freeze + def valid?(value) + value =~ FLOAT_STRING_REGEXP + end + def call(value) - value =~ FLOAT_STRING_REGEXP && value.to_f + value.to_f end end |