From 9b6e4ce212e77e428a065509f53c5691f42ca469 Mon Sep 17 00:00:00 2001 From: Andrew Kane Date: Thu, 11 Jul 2024 18:25:48 -0700 Subject: [PATCH] Fixed per_page method when paginating beyond max_result_window - fixes #1687 --- CHANGELOG.md | 1 + lib/searchkick/query.rb | 3 ++- test/pagination_test.rb | 5 ++++- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 76bf0ee2..8508de0c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ - Added experimental support for `_raw` to `where` option - Added warning for `exists` with non-`true` values - Added warning for full reindex and `:queue` mode +- Fixed `per_page` method when paginating beyond `max_result_window` - Dropped support for Ruby < 3.1 ## 5.3.1 (2023-11-28) diff --git a/lib/searchkick/query.rb b/lib/searchkick/query.rb index 91d6fe46..bef8be1b 100644 --- a/lib/searchkick/query.rb +++ b/lib/searchkick/query.rb @@ -259,6 +259,7 @@ def prepare scroll = options[:scroll] max_result_window = searchkick_options[:max_result_window] + original_per_page = per_page if max_result_window offset = max_result_window if offset > max_result_window per_page = max_result_window - offset if offset + per_page > max_result_window @@ -558,7 +559,7 @@ def prepare @body = payload @page = page - @per_page = per_page + @per_page = original_per_page @padding = padding @load = load @scroll = scroll diff --git a/test/pagination_test.rb b/test/pagination_test.rb index f44fc857..a0174350 100644 --- a/test/pagination_test.rb +++ b/test/pagination_test.rb @@ -154,7 +154,10 @@ def test_no_deep_paging def test_max_result_window with_options({max_result_window: 10000}, Song) do - assert_empty Song.search("*", offset: 10000, limit: 1).to_a + relation = Song.search("*", offset: 10000, limit: 1) + assert_empty relation.to_a + assert_equal 1, relation.per_page + assert_equal 0, relation.total_pages end end