diff --git a/lib/api-pagination.rb b/lib/api-pagination.rb index d8c94d2..1d143b6 100644 --- a/lib/api-pagination.rb +++ b/lib/api-pagination.rb @@ -69,7 +69,7 @@ def pagy_from(collection, options) else count = collection.is_a?(Array) ? collection.count : collection.count(:all) end - + Pagy.new(count: count, items: options[:per_page], page: options[:page]) end @@ -94,7 +94,10 @@ def paginate_with_kaminari(collection, options, paginate_array_options = {}) options[:per_page] = get_default_per_page_for_kaminari(collection) end - collection = Kaminari.paginate_array(collection, paginate_array_options) if collection.is_a?(Array) + if collection.is_a?(Array) || (options.key?(:paginate_array) && !!options[:paginate_array]) + collection = Kaminari.paginate_array(collection, paginate_array_options) + end + collection = collection.page(options[:page]).per(options[:per_page]) collection.without_count if !collection.is_a?(Array) && !ApiPagination.config.include_total [collection, nil] diff --git a/lib/grape/pagination.rb b/lib/grape/pagination.rb index 86799e6..e0db09c 100644 --- a/lib/grape/pagination.rb +++ b/lib/grape/pagination.rb @@ -2,13 +2,14 @@ module Grape module Pagination def self.included(base) Grape::Endpoint.class_eval do - def paginate(collection) + def paginate(collection, options = {}) per_page = ApiPagination.config.per_page_param(params) || route_setting(:per_page) options = { :page => ApiPagination.config.page_param(params), :per_page => [per_page, route_setting(:max_per_page)].compact.min - } + }.merge(options) + collection, pagy = ApiPagination.paginate(collection, options) links = (header['Link'] || "").split(',').map(&:strip)