class ActiveModel::PaginationSerializer

Public Instance Methods

initialize_with_pagination(object, opts={}) click to toggle source
# File lib/active_model/pagination_serializer.rb, line 3
def initialize_with_pagination(object, opts={})
  per_page = object.limit_value
  offset = object.offset_value
  current_page = offset ? (offset / per_page) + 1 : 1
  total_items = item_count(object)
  total_pages = per_page ? (total_items / per_page.to_f).ceil : 1
  prev_page = current_page - 1
  prev_page = nil if prev_page < 1
  next_page = current_page + 1
  next_page = nil if next_page > total_pages

  opts[:meta] ||= {}
  opts[:meta][:current_page] = current_page
  opts[:meta][:total_pages] = total_pages
  opts[:meta][:total_items] = total_items
  opts[:meta][:prev_page] = prev_page
  opts[:meta][:next_page] = next_page
  opts[:meta][:per_page] = per_page

  initialize_without_pagination(object, opts)
end

Private Instance Methods

item_count(object) click to toggle source
# File lib/active_model/pagination_serializer.rb, line 29
def item_count(object)
  initial_count = object.limit(nil).offset(nil).count(:all)

  (initial_count.respond_to? :count) ? initial_count.count : initial_count
end