class CursorPaginator::Paginator::ActiveRecord

Public Instance Methods

paginate(scope) click to toggle source
# File lib/cursor_paginator/paginator/active_record.rb, line 4
def paginate(scope)
  records = scope.reorder(paginator_options.fetch(:order_key) => order_direction)
  records = filter_by_cursor(records) if options_parser.filter_required?

  result = PaginationResult.new(records, self)
  result
end

Private Instance Methods

filter_by_cursor(collection) click to toggle source
# File lib/cursor_paginator/paginator/active_record.rb, line 14
def filter_by_cursor(collection)
  arel_table      = collection.arel_table
  order_column    = arel_table[paginator_options.fetch(:order_key)]
  primary_column  = arel_table[paginator_options.fetch(:primary_key)]
  cursor_select   = arel_table.project(order_column).where(primary_column.eq(options_parser.cursor))
  where_clause = order_column.public_send(query_operator, cursor_select)

  collection.where(where_clause)
end