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