diff options
author | Abinoam P. Marques Jr <abinoam@gmail.com> | 2023-01-02 18:15:50 -0300 |
---|---|---|
committer | Abinoam P. Marques Jr <abinoam@gmail.com> | 2023-01-02 18:15:50 -0300 |
commit | 1f283a07fb070a5919474116399a07a4808e00b6 (patch) | |
tree | 2b4f69c23bf656a95ac57d991149aa1dae0c4f70 | |
parent | d58af89b5b82d44ddb1769acfaa92c2dc3758a26 (diff) | |
download | highline-1f283a07fb070a5919474116399a07a4808e00b6.tar.gz |
Add custom parser / custom validation example
-rw-r--r-- | examples/custom_parser_custom_validator.rb | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/examples/custom_parser_custom_validator.rb b/examples/custom_parser_custom_validator.rb new file mode 100644 index 0000000..0744e7b --- /dev/null +++ b/examples/custom_parser_custom_validator.rb @@ -0,0 +1,39 @@ +require 'highline' + +cli = HighLine.new + +# The parser +class ArrayOfNumbersFromString + def self.parse(string) + string.scan(/\d+/).map(&:to_i) + end +end + +# The validator +class ArrayOfNumbersFromStringInRange + def self.in?(range) + new(range) + end + + attr_reader :range + + def initialize(range) + @range = range + end + + def valid?(answer) + ary = ArrayOfNumbersFromString.parse(answer) + ary.all? ->(number) { range.include? number } + end + + def inspect + "in range #@range validator" + end +end + +answer = cli.ask("Which number? (0 or <Enter> to skip): ", ArrayOfNumbersFromString) { |q| + q.validate = ArrayOfNumbersFromStringInRange.in?(0..10) + q.default = 0 +} + +puts "Your answer was: #{answer} and it was correctly validated and coerced into an #{answer.class}" |