Class: TTY::Shell::Question
- Inherits:
-
Object
- Object
- TTY::Shell::Question
- Includes:
- ResponseDelegation
- Defined in:
- lib/tty/shell/question.rb,
lib/tty/shell/question/modifier.rb,
lib/tty/shell/question/validation.rb
Overview
A class representing a command line question
Defined Under Namespace
Classes: Modifier, Validation
Constant Summary collapse
- PREFIX =
' + '- MULTIPLE_PREFIX =
' * '- ERROR_PREFIX =
' ERROR:'
Instance Attribute Summary collapse
-
#character ⇒ Object
readonly
Returns character mode.
-
#default_value ⇒ Object
readonly
private
Store default value.
-
#error ⇒ Object
readonly
Returns the value of attribute error.
-
#modifier ⇒ Object
readonly
Controls character processing of the answer.
-
#statement ⇒ Object
private
Store statement.
-
#valid_values ⇒ Object
readonly
Returns valid answers.
-
#validation ⇒ Object
readonly
Returns the value of attribute validation.
Instance Method Summary collapse
-
#argument(value) ⇒ Question
Ensure that passed argument is present if required option.
-
#char(value = nil) ⇒ self
Set if the input is character based or not.
-
#character? ⇒ Boolean
Check if character intput is set.
-
#clean ⇒ Object
Reset question object.
-
#default(value) ⇒ Object
Set default value.
-
#default? ⇒ Boolean
Check if default value is set.
-
#echo(value = nil) ⇒ Object
Turn terminal echo on or off.
-
#echo? ⇒ Boolean
Chec if echo is set.
-
#error? ⇒ Boolean
Check if error behaviour is set.
-
#evaluate_response(value) ⇒ Object
private
Check if response matches all the requirements set by the question.
-
#in(value = nil) ⇒ Object
Set expect range of values.
-
#in? ⇒ Boolean
Check if range is set.
-
#initialize(shell, options = {}) ⇒ Question
constructor
Initialize a Question.
-
#mask(char = nil) ⇒ self
Set character for masking the STDIN input.
-
#mask? ⇒ Boolean
Check if character mask is set.
-
#modify(*rules) ⇒ Object
Modify string according to the rule given.
-
#on_error(action = nil) ⇒ Object
Setup behaviour when error(s) occur.
-
#prompt(message) ⇒ self
Set a new prompt.
-
#required? ⇒ Boolean
private
Check if required argument present.
-
#valid(values) ⇒ self
Set expected values.
-
#validate(value = nil, &block) ⇒ Question
Set validation rule for an argument.
Methods included from ResponseDelegation
Methods included from Delegatable
Constructor Details
#initialize(shell, options = {}) ⇒ Question
Initialize a Question
55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/tty/shell/question.rb', line 55 def initialize(shell, = {}) @shell = shell || Shell.new @required = .fetch(:required) { false } @echo = .fetch(:echo) { true } @mask = .fetch(:mask) { false } @character = .fetch(:character) { false } @in = .fetch(:in) { false } @modifier = Modifier.new .fetch(:modifier) { [] } @valid_values = .fetch(:valid) { [] } @validation = Validation.new .fetch(:validation) { nil } @default_value = nil @error = false end |
Instance Attribute Details
#character ⇒ Object (readonly)
Returns character mode
46 47 48 |
# File 'lib/tty/shell/question.rb', line 46 def character @character end |
#default_value ⇒ Object (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Store default value.
24 25 26 |
# File 'lib/tty/shell/question.rb', line 24 def default_value @default_value end |
#error ⇒ Object (readonly)
Returns the value of attribute error.
41 42 43 |
# File 'lib/tty/shell/question.rb', line 41 def error @error end |
#modifier ⇒ Object (readonly)
Controls character processing of the answer
34 35 36 |
# File 'lib/tty/shell/question.rb', line 34 def modifier @modifier end |
#statement ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Store statement.
19 20 21 |
# File 'lib/tty/shell/question.rb', line 19 def statement @statement end |
#valid_values ⇒ Object (readonly)
Returns valid answers
39 40 41 |
# File 'lib/tty/shell/question.rb', line 39 def valid_values @valid_values end |
#validation ⇒ Object (readonly)
Returns the value of attribute validation.
29 30 31 |
# File 'lib/tty/shell/question.rb', line 29 def validation @validation end |
Instance Method Details
#argument(value) ⇒ Question
Ensure that passed argument is present if required option
105 106 107 108 109 110 111 112 113 |
# File 'lib/tty/shell/question.rb', line 105 def argument(value) case value when :required @required = true when :optional @required = false end self end |
#char(value = nil) ⇒ self
Set if the input is character based or not
229 230 231 232 233 |
# File 'lib/tty/shell/question.rb', line 229 def char(value = nil) return @character if value.nil? @character = value self end |
#character? ⇒ Boolean
Check if character intput is set
240 241 242 |
# File 'lib/tty/shell/question.rb', line 240 def character? !!@character end |
#clean ⇒ Object
Reset question object.
151 152 153 154 155 156 |
# File 'lib/tty/shell/question.rb', line 151 def clean @statement = nil @default_value = nil @required = false @modifier = nil end |
#default(value) ⇒ Object
Set default value.
85 86 87 88 89 |
# File 'lib/tty/shell/question.rb', line 85 def default(value) return self if value == '' @default_value = value self end |
#default? ⇒ Boolean
Check if default value is set
96 97 98 |
# File 'lib/tty/shell/question.rb', line 96 def default? !!@default_value end |
#echo(value = nil) ⇒ Object
Turn terminal echo on or off. This is used to secure the display so that the entered characters are not echoed back to the screen.
187 188 189 190 191 |
# File 'lib/tty/shell/question.rb', line 187 def echo(value = nil) return @echo if value.nil? @echo = value self end |
#echo? ⇒ Boolean
Chec if echo is set
196 197 198 |
# File 'lib/tty/shell/question.rb', line 196 def echo? !!@echo end |
#error? ⇒ Boolean
Check if error behaviour is set
179 180 181 |
# File 'lib/tty/shell/question.rb', line 179 def error? !!@error end |
#evaluate_response(value) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Check if response matches all the requirements set by the question
271 272 273 274 275 276 277 278 279 280 |
# File 'lib/tty/shell/question.rb', line 271 def evaluate_response(value) return default_value if !value && default? check_required(value) return if value.nil? check_valid(value) unless valid_values.empty? within?(value) validation.valid_value?(value) modifier.apply_to(value) end |
#in(value = nil) ⇒ Object
Set expect range of values
249 250 251 252 253 |
# File 'lib/tty/shell/question.rb', line 249 def in(value = nil) return @in if value.nil? @in = TTY::Coercer::Range.coerce value self end |
#in? ⇒ Boolean
Check if range is set
260 261 262 |
# File 'lib/tty/shell/question.rb', line 260 def in? !!@in end |
#mask(char = nil) ⇒ self
Set character for masking the STDIN input
207 208 209 210 211 |
# File 'lib/tty/shell/question.rb', line 207 def mask(char = nil) return @mask if char.nil? @mask = char self end |
#mask? ⇒ Boolean
Check if character mask is set
218 219 220 |
# File 'lib/tty/shell/question.rb', line 218 def mask? !!@mask end |
#modify(*rules) ⇒ Object
Modify string according to the rule given.
163 164 165 166 |
# File 'lib/tty/shell/question.rb', line 163 def modify(*rules) @modifier = Modifier.new(*rules) self end |
#on_error(action = nil) ⇒ Object
Setup behaviour when error(s) occur
171 172 173 174 |
# File 'lib/tty/shell/question.rb', line 171 def on_error(action = nil) @error = action self end |
#prompt(message) ⇒ self
Set a new prompt
76 77 78 79 80 |
# File 'lib/tty/shell/question.rb', line 76 def prompt() self.statement = shell.say shell.prefix + statement self end |
#required? ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Check if required argument present.
120 121 122 |
# File 'lib/tty/shell/question.rb', line 120 def required? required end |
#valid(values) ⇒ self
Set expected values
143 144 145 146 |
# File 'lib/tty/shell/question.rb', line 143 def valid(values) @valid_values = values self end |
#validate(value = nil, &block) ⇒ Question
Set validation rule for an argument
131 132 133 134 |
# File 'lib/tty/shell/question.rb', line 131 def validate(value = nil, &block) @validation = Validation.new(value || block) self end |