class CursorPaginator::Paginator::Array
Public Instance Methods
paginate(scope)
click to toggle source
# File lib/cursor_paginator/paginator/array.rb, line 4 def paginate(scope) records = scope.sort_by(&paginator_options.fetch(:order_key)) records = filter_by_cursor(records) if options_parser.filter_required? records = records.reverse if order_direction == :desc PaginationResult.new(records, self) end
Private Instance Methods
filter_by_cursor(collection)
click to toggle source
# File lib/cursor_paginator/paginator/array.rb, line 14 def filter_by_cursor(collection) cursor_index = find_cursor_index(collection) return [] if cursor_index.blank? left, right = split_collection(collection, cursor_index) query_operator == :lt ? left : right end
find_cursor_index(collection)
click to toggle source
# File lib/cursor_paginator/paginator/array.rb, line 23 def find_cursor_index(collection) collection.index do |item| item.public_send(paginator_options.fetch(:primary_key)) == options_parser.cursor end end
split_collection(collection, cursor_index)
click to toggle source
# File lib/cursor_paginator/paginator/array.rb, line 29 def split_collection(collection, cursor_index) left, right = collection.partition.with_index { |_, i| i <= cursor_index } left.pop [left, right] end