blob: 0744e7bd9beef3bd1f79551478a19b19517f8b21 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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}"
|