Module: SimpleFeed::Providers::Hash::Paginator
- Included in:
- Provider
- Defined in:
- lib/simplefeed/providers/hash/paginator.rb
Overview
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.
Instance Method Summary collapse
- #order_events(events, &block) ⇒ Object
- #paginate(user_ids:, page: nil, per_page: feed.per_page, &block) ⇒ Object
- #paginate_items(items, page: nil, per_page: nil) ⇒ Object
Instance Method Details
#order_events(events, &block) ⇒ Object
23 24 25 26 27 28 29 |
# 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) ⇒ Object
11 12 13 14 15 16 17 |
# 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) ⇒ Object
19 20 21 |
# 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 |