lib/tty/prompt/question.rb in tty-prompt-0.13.2 vs lib/tty/prompt/question.rb in tty-prompt-0.14.0
- old
+ new
@@ -105,20 +105,21 @@
#
# @api private
def render
@errors = []
until @done
- question = render_question
- @prompt.print(question)
- result = process_input(question)
+ result = process_input(render_question)
if result.failure?
@errors = result.errors
@prompt.print(render_error(result.errors))
else
@done = true
end
- @prompt.print(refresh(question.lines.count))
+ question = render_question
+ input_line = question + result.value.to_s
+ total_lines = @prompt.count_screen_lines(input_line)
+ @prompt.print(refresh(question.lines.count, total_lines))
end
@prompt.print(render_question)
convert_result(result.value)
end
@@ -162,36 +163,36 @@
#
# @return [String]
#
# @api private
def render_error(errors)
- errors.reduce('') do |acc, err|
- newline = (@echo ? '' : "\n")
- acc << newline + @prompt.decorate('>>', :red) + ' ' + err
+ errors.reduce([]) do |acc, err|
+ acc << @prompt.decorate('>>', :red) + ' ' + err
acc
- end
+ end.join("\n")
end
# Determine area of the screen to clear
#
# @param [Integer] lines
# number of lines to clear
#
# @return [String]
#
# @api private
- def refresh(lines)
+ def refresh(lines, lines_to_clear)
output = ''
if @done
- if @errors.count.zero? && @echo
+ if @errors.count.zero?
output << @prompt.cursor.up(lines)
else
lines += @errors.count
+ lines_to_clear += @errors.count
end
else
output << @prompt.cursor.up(lines)
end
- output + @prompt.clear_lines(lines)
+ output + @prompt.clear_lines(lines_to_clear)
end
# Convert value to expected type
#
# @param [Object] value