Class: HighLine::Paginator

Inherits:
Object show all
Defined in:
lib/highline/paginator.rb

Overview

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(highline) ⇒ Paginator

Returns a HighLine::Paginator instance where you can call #page_print on it.

Examples:

HighLine::Paginator.new(highline).page_print(statement)

Parameters:



14
15
16
# File 'lib/highline/paginator.rb', line 14

def initialize(highline)
  @highline = highline
end

Instance Attribute Details

#highlineHighLine (readonly)

Returns HighLine context.

Returns:



7
8
9
# File 'lib/highline/paginator.rb', line 7

def highline
  @highline
end

Instance Method Details

#continue_paging?Boolean

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

Returns:

  • (Boolean)


45
46
47
48
49
50
# File 'lib/highline/paginator.rb', line 45

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) ⇒ String

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.

Parameters:

  • text (String)

    text to be paginated

Returns:

  • (String)

    last line if paging is aborted



28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/highline/paginator.rb', line 28

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