module SimpleFeed::Providers::Hash::Paginator

Include this module into any provider etc that has access to the feed.fetch methods, and it will provide paginate method based on all.

Of course this is not very efficient, because it requires fetching all events for the user.

Public Instance Methods

order_events(events) { |a, b| ... } click to toggle source
# File lib/simplefeed/providers/hash/paginator.rb, line 23
def order_events(events, &block)
  return nil unless events

  events.sort do |a, b|
    block ? yield(a, b) : b.at <=> a.at
  end
end
paginate(user_ids:, page: nil, per_page: feed.per_page, &block) click to toggle source
# File lib/simplefeed/providers/hash/paginator.rb, line 11
def paginate(user_ids:, page: nil, per_page: feed.per_page, &block)
  response = feed.fetch(user_ids: user_ids)
  response = SimpleFeed::Response.new(response.to_h)
  response.transform do |*, events|
    paginate_items(order_events(events, &block), page: page, per_page: per_page)
  end
end
paginate_items(items, page: nil, per_page: nil) click to toggle source
# File lib/simplefeed/providers/hash/paginator.rb, line 19
def paginate_items(items, page: nil, per_page: nil)
  page && page > 0 ? items[((page - 1) * per_page)...(page * per_page)] : items
end