class ResponseCollection

Attributes

length[RW]
load_more_call[RW]
paged_objects[RW]
per_page[RW]
size[RW]
total[RW]

Public Class Methods

new(options = {}) click to toggle source

seed_page, total, per_page, load_more_call

# File lib/bright/response_collection.rb, line 10
def initialize(options = {})
  @paged_objects = {0 => options[:seed_page]}
  @total = options[:total].to_i
  @per_page = options[:per_page].to_i
  @pages = @per_page > 0 ? (@total.to_f / @per_page.to_f).ceil : 0
  @load_more_call = options[:load_more_call]
end

Public Instance Methods

each() { |obj| ... } click to toggle source
# File lib/bright/response_collection.rb, line 18
def each
  current_page = -1
  while (current_page += 1) < @pages do
    objects = [@paged_objects[current_page]].flatten.compact
    next_page_no = current_page + 1
    if load_more_call and @paged_objects[next_page_no].nil? and next_page_no < @pages
      next_page_thread = Thread.new do
        load_more_call.call(next_page_no)
      end
    else
      next_page_thread = nil
    end
    objects.each do |obj|
      yield obj
    end
    @paged_objects[next_page_no] = next_page_thread.value if next_page_thread
  end
end
empty?() click to toggle source
# File lib/bright/response_collection.rb, line 52
def empty?
  total <= 0
end
last() click to toggle source
# File lib/bright/response_collection.rb, line 37
def last
  last_page_no = @pages - 1
  if load_more_call and (last_page = @paged_objects[last_page_no]).nil?
    last_page = @paged_objects[last_page_no] = load_more_call.call(last_page_no)
  end
  last_page.last
end
loaded_results() click to toggle source
# File lib/bright/response_collection.rb, line 45
def loaded_results
  @paged_objects.values.flatten
end