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