class PageUp::Fragment
Constants
- NullResult
Attributes
size[R]
Public Class Methods
new(fragment, page, per_page, total = nil)
click to toggle source
# File lib/page_up/fragment.rb, line 5 def initialize fragment, page, per_page, total = nil @page = page @per_page = per_page @size = total || (fragment.size + offset) @fragment = [].fill(NullResult, 0, offset) + fragment end
Public Instance Methods
[](range)
click to toggle source
# File lib/page_up/fragment.rb, line 13 def [] range until covers? range next_page = page_for(range) result = @callback.call next_page, @per_page @per_page.times do |index| value = result[index] @fragment[index + offset(next_page)] = value end end @fragment[range].compact end
to_a()
click to toggle source
# File lib/page_up/fragment.rb, line 25 def to_a self[0..@size].to_a end
use(&block)
click to toggle source
# File lib/page_up/fragment.rb, line 29 def use &block @callback = block end
Private Instance Methods
covers?(range)
click to toggle source
# File lib/page_up/fragment.rb, line 44 def covers? range !range.any? { |index| @fragment.fetch(index,NullResult) == NullResult } end
offset(page = @page)
click to toggle source
# File lib/page_up/fragment.rb, line 40 def offset page = @page (page - 1) * @per_page end
page_for(range)
click to toggle source
# File lib/page_up/fragment.rb, line 35 def page_for range first_null = range.find { |index| @fragment.fetch(index,NullResult) == NullResult } || range.end + 1 (first_null / @per_page) + 1 end