Class: Pry::Pager::PageTracker

Inherits:
Object
  • Object
show all
Defined in:
lib/pry/pager.rb

Overview

‘PageTracker` tracks output to determine whether it’s likely to take up a whole page. This doesn’t need to be super precise, but we can use it for ‘SimplePager` and to avoid invoking the system pager unnecessarily.

One simplifying assumption is that we don’t need ‘#page?` to return `true` on the basis of an incomplete line. Long lines should be counted as multiple lines, but we don’t have to transition from ‘false` to `true` until we see a newline.

Instance Method Summary collapse

Constructor Details

#initialize(rows, cols) ⇒ PageTracker

Returns a new instance of PageTracker.



214
215
216
217
218
# File 'lib/pry/pager.rb', line 214

def initialize(rows, cols)
  @rows = rows
  @cols = cols
  reset
end

Instance Method Details

#page?Boolean

Returns:

  • (Boolean)


231
232
233
# File 'lib/pry/pager.rb', line 231

def page?
  @row >= @rows
end

#record(str) ⇒ Object



220
221
222
223
224
225
226
227
228
229
# File 'lib/pry/pager.rb', line 220

def record(str)
  str.lines.each do |line|
    if line.end_with? "\n"
      @row += ((@col + line_length(line) - 1) / @cols) + 1
      @col  = 0
    else
      @col += line_length(line)
    end
  end
end

#resetObject



235
236
237
238
# File 'lib/pry/pager.rb', line 235

def reset
  @row = 0
  @col = 0
end