class HighLine::Paginator

Take the task of paginating some piece of text given a HighLine context

Attributes

highline[R]

@return [HighLine] HighLine context

Public Class Methods

new(highline) click to toggle source

Returns a HighLine::Paginator instance where you can call {#page_print} on it. @param highline [HighLine] context @example

HighLine::Paginator.new(highline).page_print(statement)
# File lib/highline/paginator.rb, line 13
def initialize(highline)
  @highline = highline
end

Public Instance Methods

continue_paging?() click to toggle source

Ask user if they wish to continue paging output. Allows them to type “q” to cancel the paging process.

# File lib/highline/paginator.rb, line 44
def continue_paging?
  command = highline.new_scope.ask(
    "-- press enter/return to continue or q to stop -- "
  ) { |q| q.character = true }
  command !~ /\A[qQ]\Z/ # Only continue paging if Q was not hit.
end
page_print(text) click to toggle source

Page print a series of at most page_at lines for output. After each page is printed, HighLine will pause until the user presses enter/return then display the next page of data.

Note that the final page of output is not printed, but returned instead. This is to support any special handling for the final sequence.

@param text [String] text to be paginated @return [String] last line if paging is aborted

# File lib/highline/paginator.rb, line 27
def page_print(text)
  return text unless highline.page_at

  lines = text.lines.to_a
  while lines.size > highline.page_at
    highline.puts lines.slice!(0...highline.page_at).join
    highline.puts
    # Return last line if user wants to abort paging
    return "...\n#{lines.last}" unless continue_paging?
  end
  lines.join
end