Class: TTY::Shell::Question

Inherits:
Object
  • Object
show all
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

Instance Method Summary collapse

Methods included from ResponseDelegation

#dispatch

Methods included from Delegatable

#delegatable_method

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, options = {})
  @shell         = shell || Shell.new
  @required      = options.fetch(:required) { false }
  @echo          = options.fetch(:echo) { true }
  @mask          = options.fetch(:mask) { false  }
  @character     = options.fetch(:character) { false }
  @in            = options.fetch(:in) { false }
  @modifier      = Modifier.new options.fetch(:modifier) { [] }
  @valid_values  = options.fetch(:valid) { [] }
  @validation    = Validation.new options.fetch(:validation) { nil }
  @default_value = nil
  @error         = false
end

Instance Attribute Details

#characterObject (readonly)

Returns character mode



46
47
48
# File 'lib/tty/shell/question.rb', line 46

def character
  @character
end

#default_valueObject (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

#errorObject (readonly)

Returns the value of attribute error.



41
42
43
# File 'lib/tty/shell/question.rb', line 41

def error
  @error
end

#modifierObject (readonly)

Controls character processing of the answer



34
35
36
# File 'lib/tty/shell/question.rb', line 34

def modifier
  @modifier
end

#statementObject

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_valuesObject (readonly)

Returns valid answers



39
40
41
# File 'lib/tty/shell/question.rb', line 39

def valid_values
  @valid_values
end

#validationObject (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

Returns:



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

Parameters:

  • value (Boolean) (defaults to: nil)

Returns:

  • (self)


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

Returns:

  • (Boolean)


240
241
242
# File 'lib/tty/shell/question.rb', line 240

def character?
  !!@character
end

#cleanObject

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

Returns:

  • (Boolean)


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

Returns:

  • (Boolean)


196
197
198
# File 'lib/tty/shell/question.rb', line 196

def echo?
  !!@echo
end

#error?Boolean

Check if error behaviour is set

Returns:

  • (Boolean)


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

Parameters:

  • value (Object)

Returns:

  • (Object)


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

Parameters:

  • value (String) (defaults to: nil)


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

Returns:

  • (Boolean)


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

Parameters:

  • character (String)

Returns:

  • (self)


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

Returns:

  • (Boolean)


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.

Parameters:

  • rule (Symbol)


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

Parameters:

  • message (String)

Returns:

  • (self)


76
77
78
79
80
# File 'lib/tty/shell/question.rb', line 76

def prompt(message)
  self.statement = message
  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.

Returns:

  • (Boolean)


120
121
122
# File 'lib/tty/shell/question.rb', line 120

def required?
  required
end

#valid(values) ⇒ self

Set expected values

Parameters:

  • values (Array)

Returns:

  • (self)


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

Parameters:

  • value (Object) (defaults to: nil)

Returns:



131
132
133
134
# File 'lib/tty/shell/question.rb', line 131

def validate(value = nil, &block)
  @validation = Validation.new(value || block)
  self
end