Module: Doing::Pager

Defined in:
lib/doing/pager.rb

Overview

Pagination

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.paginateObject

Boolean determines whether output is paginated



10
11
12
# File 'lib/doing/pager.rb', line 10

def paginate
  @paginate ||= false
end

Class Method Details

.external_pager(text) ⇒ Object

External pager using IO.popen for optimal performance and UX



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/doing/pager.rb', line 41

def external_pager(text)
  pager = which_pager
  Doing.logger.debug('Pager:', "Using external pager: #{pager}")

  begin
    IO.popen(pager, 'w') do |io|
      io.write(text)
      io.close_write
    end
  rescue SystemCallError => e
    # Fallback to direct output if pager fails
    puts text
    Doing.logger.debug('Pager:', "Pager failed, using direct output: #{e}")
  end
end

.page(text) ⇒ Object

Page output. If @paginate is false, just dump to STDOUT

Parameters:

  • text (String)

    text to paginate



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/doing/pager.rb', line 24

def page(text)
  unless @paginate
    puts text
    return
  end

  # Smart pagination: skip pager for small outputs
  if should_skip_pager?(text)
    puts text
    return
  end

  # Use external pager (IO.popen for best performance and UX)
  external_pager(text)
end