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