class Fixably::ActiveResource::PaginatedCollection

Attributes

limit[R]
offset[R]
parent_association[RW]
parent_resource[RW]
total_items[R]

Public Class Methods

attributes(collection_wrapper) click to toggle source
# File lib/fixably/active_resource/paginated_collection.rb, line 17
def attributes(collection_wrapper)
  if collection_wrapper.respond_to?(:attributes)
    collection_wrapper.attributes
  else
    collection_wrapper
  end
end
new(collection_wrapper = nil) click to toggle source
Calls superclass method
# File lib/fixably/active_resource/paginated_collection.rb, line 33
def initialize(collection_wrapper = nil)
  @limit = collection_wrapper&.fetch("limit") || 0
  @offset = collection_wrapper&.fetch("offset") || 0
  @total_items = collection_wrapper&.fetch("totalItems") do
    collection_wrapper.fetch("total_items")
  end || 0

  collection = collection_wrapper&.fetch("items") || []
  super(collection)
end
paginatable?(value) click to toggle source
# File lib/fixably/active_resource/paginated_collection.rb, line 9
def paginatable?(value)
  collection = attributes(value)
  return false unless collection.is_a?(Hash)

  interface = %w[limit offset total_items items]
  (interface - collection.keys).empty?
end

Public Instance Methods

<<(record) click to toggle source
# File lib/fixably/active_resource/paginated_collection.rb, line 44
def <<(record)
  CreateHasManyRecord.(record: record, collection: self)
end
next_page() click to toggle source
# File lib/fixably/active_resource/paginated_collection.rb, line 65
def next_page
  raise StopIteration, "There are no more pages" unless next_page?

  where(limit: limit, offset: offset + limit)
end
next_page?() click to toggle source
# File lib/fixably/active_resource/paginated_collection.rb, line 71
def next_page?
  (limit + offset) < total_items
end
paginated_each() { |_1| ... } click to toggle source
# File lib/fixably/active_resource/paginated_collection.rb, line 48
def paginated_each
  page = self

  loop do
    page.each { yield(_1) }
    break unless page.next_page?

    page = page.next_page
  end
end
paginated_map() click to toggle source
# File lib/fixably/active_resource/paginated_collection.rb, line 59
def paginated_map
  [].tap do |records|
    paginated_each { records << _1 }
  end
end
previous_page() click to toggle source
# File lib/fixably/active_resource/paginated_collection.rb, line 75
def previous_page
  raise StopIteration, "There are no more pages" unless previous_page?

  new_offset = offset - limit
  new_limit = limit
  new_limit += new_offset if new_offset.negative?
  new_offset = 0 if new_offset.negative?

  where(limit: new_limit, offset: new_offset)
end
previous_page?() click to toggle source
# File lib/fixably/active_resource/paginated_collection.rb, line 86
def previous_page?
  offset.positive?
end