From fe3061dfa0408e0af61cf1b1bb45907cd8be8ae9 Mon Sep 17 00:00:00 2001
From: Domizio Demichelis
Date: Wed, 15 Jan 2025 18:23:55 +0700
Subject: [PATCH] WIP: Countless keep last
---
gem/lib/pagy.rb | 1 -
gem/lib/pagy/backend.rb | 1 -
gem/lib/pagy/console.rb | 1 -
gem/lib/pagy/extras/gearbox.rb | 1 -
gem/lib/pagy/extras/i18n.rb | 1 -
gem/lib/pagy/extras/size.rb | 1 -
gem/lib/pagy/frontend.rb | 1 -
gem/lib/pagy/helpers/i18n.rb | 1 -
gem/lib/pagy/helpers/url.rb | 1 +
gem/lib/pagy/keyset.rb | 1 -
gem/lib/pagy/keyset/adapters/active_record.rb | 1 -
gem/lib/pagy/keyset/adapters/sequel.rb | 1 -
gem/lib/pagy/keyset/augmented.rb | 1 -
gem/lib/pagy/loaders/backend.rb | 32 +--
gem/lib/pagy/mixins/arel.rb | 1 -
gem/lib/pagy/mixins/array.rb | 1 -
gem/lib/pagy/mixins/bootstrap.rb | 1 -
gem/lib/pagy/mixins/bulma.rb | 1 -
gem/lib/pagy/mixins/calendar.rb | 1 -
gem/lib/pagy/mixins/countless.rb | 12 +-
gem/lib/pagy/mixins/elasticsearch_rails.rb | 1 -
gem/lib/pagy/mixins/headers.rb | 1 -
gem/lib/pagy/mixins/keyset.rb | 1 -
gem/lib/pagy/mixins/keyset_augmented.rb | 3 +-
gem/lib/pagy/mixins/meilisearch.rb | 1 -
gem/lib/pagy/mixins/metadata.rb | 1 -
gem/lib/pagy/mixins/pagy.rb | 1 -
gem/lib/pagy/mixins/pagy_helpers.rb | 1 -
gem/lib/pagy/mixins/searchkick.rb | 1 -
gem/lib/pagy/offset.rb | 1 -
gem/lib/pagy/offset/calendar.rb | 1 -
gem/lib/pagy/offset/calendar/day.rb | 1 -
gem/lib/pagy/offset/calendar/month.rb | 1 -
gem/lib/pagy/offset/calendar/quarter.rb | 1 -
gem/lib/pagy/offset/calendar/week.rb | 1 -
gem/lib/pagy/offset/calendar/year.rb | 1 -
gem/lib/pagy/offset/countless.rb | 7 +-
test/helpers/nav_tests.rb | 2 +
test/pagy/backend/jsonapi_test.rb | 1 -
test/pagy/backend_test.rb | 1 -
test/pagy/extras/i18n_extra_test.rb | 3 +-
test/pagy/frontend_test.rb | 1 -
test/pagy/mixins/arel_test.rb | 1 -
test/pagy/mixins/array_test.rb | 1 -
test/pagy/mixins/bootstrap_test.rb.yaml | 113 +++++----
test/pagy/mixins/bulma_test.rb.yaml | 135 +++++------
test/pagy/mixins/calendar_test.rb | 1 -
test/pagy/mixins/countless_test.rb | 11 +-
test/pagy/mixins/elasticsearch_rails_test.rb | 1 -
test/pagy/mixins/headers_test.rb | 1 -
test/pagy/mixins/headers_test.rb.yaml | 108 ++++-----
test/pagy/mixins/keyset_augmented_test.rb | 6 +-
test/pagy/mixins/pagy_test.rb.yaml | 217 +++++++++---------
53 files changed, 321 insertions(+), 369 deletions(-)
diff --git a/gem/lib/pagy.rb b/gem/lib/pagy.rb
index d44240332..6a86a53ca 100644
--- a/gem/lib/pagy.rb
+++ b/gem/lib/pagy.rb
@@ -1,4 +1,3 @@
-# See Pagy API documentation: https://ddnexus.github.io/pagy/docs/api/pagy
# frozen_string_literal: true
require 'pathname'
diff --git a/gem/lib/pagy/backend.rb b/gem/lib/pagy/backend.rb
index 841ca7b70..dac9d2c8b 100644
--- a/gem/lib/pagy/backend.rb
+++ b/gem/lib/pagy/backend.rb
@@ -1,4 +1,3 @@
-# See Pagy::Backend API documentation: https://ddnexus.github.io/pagy/docs/api/backend
# frozen_string_literal: true
require_relative 'helpers/url'
diff --git a/gem/lib/pagy/console.rb b/gem/lib/pagy/console.rb
index 1ab56e8be..bb6ba6160 100644
--- a/gem/lib/pagy/console.rb
+++ b/gem/lib/pagy/console.rb
@@ -1,4 +1,3 @@
-# See Pagy::Console API documentation: https://ddnexus.github.io/pagy/docs/api/console
# frozen_string_literal: true
require_relative '../pagy' # so you can require just the extra in the console
diff --git a/gem/lib/pagy/extras/gearbox.rb b/gem/lib/pagy/extras/gearbox.rb
index 8df854cfb..da2e9076d 100644
--- a/gem/lib/pagy/extras/gearbox.rb
+++ b/gem/lib/pagy/extras/gearbox.rb
@@ -1,4 +1,3 @@
-# See the Pagy documentation: https://ddnexus.github.io/pagy/docs/extras/gearbox
# frozen_string_literal: true
require_relative '../offset'
diff --git a/gem/lib/pagy/extras/i18n.rb b/gem/lib/pagy/extras/i18n.rb
index c82d4774d..98c0741a3 100644
--- a/gem/lib/pagy/extras/i18n.rb
+++ b/gem/lib/pagy/extras/i18n.rb
@@ -1,4 +1,3 @@
-# See the Pagy documentation: https://ddnexus.github.io/pagy/docs/extras/i18n
# frozen_string_literal: true
class Pagy
diff --git a/gem/lib/pagy/extras/size.rb b/gem/lib/pagy/extras/size.rb
index 9917cf675..b805cd89c 100644
--- a/gem/lib/pagy/extras/size.rb
+++ b/gem/lib/pagy/extras/size.rb
@@ -1,4 +1,3 @@
-# See the Pagy documentation: https://ddnexus.github.io/pagy/docs/extras/size
# frozen_string_literal: true
class Pagy
diff --git a/gem/lib/pagy/frontend.rb b/gem/lib/pagy/frontend.rb
index f3520f162..1864c3740 100644
--- a/gem/lib/pagy/frontend.rb
+++ b/gem/lib/pagy/frontend.rb
@@ -1,4 +1,3 @@
-# See Pagy::Frontend API documentation: https://ddnexus.github.io/pagy/docs/api/frontend
# frozen_string_literal: true
require_relative 'helpers/b64'
diff --git a/gem/lib/pagy/helpers/i18n.rb b/gem/lib/pagy/helpers/i18n.rb
index f2216e70a..6ca80f928 100644
--- a/gem/lib/pagy/helpers/i18n.rb
+++ b/gem/lib/pagy/helpers/i18n.rb
@@ -1,4 +1,3 @@
-# See Pagy::I18n API documentation https://ddnexus.github.io/pagy/docs/api/i18n
# frozen_string_literal: true
require 'yaml'
diff --git a/gem/lib/pagy/helpers/url.rb b/gem/lib/pagy/helpers/url.rb
index 87619a976..6e74c7dd9 100644
--- a/gem/lib/pagy/helpers/url.rb
+++ b/gem/lib/pagy/helpers/url.rb
@@ -45,6 +45,7 @@ def escape(str)
def pagy_page_url(pagy, page, absolute: false, fragment: nil, **)
request_var, pagy_params = (vars = pagy.vars).values_at(:request, :params)
page_name, limit_name = vars.values_at(:page_sym, :limit_sym).map(&:to_s)
+ page = "#{page}+#{pagy.last}" if /^Pagy::Offset::Countless/.match?(pagy.class.name)
query_params = request_var ? (request_var[:query_params] || {}) : request.GET.clone(freeze: false)
page_and_limit = { page_name => page }.tap { |h| h[limit_name] = vars[:limit] if vars[:limit_requestable] }
query_params.merge!(vars[:jsonapi] ? { 'page' => page_and_limit } : page_and_limit)
diff --git a/gem/lib/pagy/keyset.rb b/gem/lib/pagy/keyset.rb
index 9f096310b..4af4e0427 100644
--- a/gem/lib/pagy/keyset.rb
+++ b/gem/lib/pagy/keyset.rb
@@ -1,4 +1,3 @@
-# See Pagy API documentation: https://ddnexus.github.io/pagy/docs/api/keyset
# frozen_string_literal: true
require 'json'
diff --git a/gem/lib/pagy/keyset/adapters/active_record.rb b/gem/lib/pagy/keyset/adapters/active_record.rb
index 2e35ced10..4aaf1aab2 100644
--- a/gem/lib/pagy/keyset/adapters/active_record.rb
+++ b/gem/lib/pagy/keyset/adapters/active_record.rb
@@ -1,4 +1,3 @@
-# See Pagy API documentation: https://ddnexus.github.io/pagy/docs/api/keyset
# frozen_string_literal: true
class Pagy
diff --git a/gem/lib/pagy/keyset/adapters/sequel.rb b/gem/lib/pagy/keyset/adapters/sequel.rb
index f1cd4ddb6..b00a7031a 100644
--- a/gem/lib/pagy/keyset/adapters/sequel.rb
+++ b/gem/lib/pagy/keyset/adapters/sequel.rb
@@ -1,4 +1,3 @@
-# See Pagy API documentation: https://ddnexus.github.io/pagy/docs/api/keyset
# frozen_string_literal: true
class Pagy
diff --git a/gem/lib/pagy/keyset/augmented.rb b/gem/lib/pagy/keyset/augmented.rb
index b50242106..3ea547bdb 100644
--- a/gem/lib/pagy/keyset/augmented.rb
+++ b/gem/lib/pagy/keyset/augmented.rb
@@ -1,4 +1,3 @@
-# See Pagy::Offset::Countless API documentation: https://ddnexus.github.io/pagy/docs/api/keyset_for_ui
# frozen_string_literal: true
class Pagy
diff --git a/gem/lib/pagy/loaders/backend.rb b/gem/lib/pagy/loaders/backend.rb
index d29ad95c0..1a42b1c2a 100644
--- a/gem/lib/pagy/loaders/backend.rb
+++ b/gem/lib/pagy/loaders/backend.rb
@@ -9,22 +9,22 @@ def pagy_load_backend(...)
send(method_sym, ...)
end
- BACKEND_METHOD_MIXINS = { pagy_arel: PAGY_PATH.join('mixins/arel').to_s,
- pagy_array: PAGY_PATH.join('mixins/array').to_s,
- pagy_calendar: PAGY_PATH.join('mixins/calendar').to_s,
- pagy_countless: PAGY_PATH.join('mixins/countless').to_s,
- pagy_elasticsearch_rails: PAGY_PATH.join('mixins/elasticsearch_rails').to_s,
- pagy_headers: PAGY_PATH.join('mixins/headers').to_s,
- pagy_headers_merge: PAGY_PATH.join('mixins/headers').to_s,
- pagy_keyset: PAGY_PATH.join('mixins/keyset').to_s,
- pagy_keyset_first_url: PAGY_PATH.join('mixins/keyset').to_s,
- pagy_keyset_next_url: PAGY_PATH.join('mixins/keyset').to_s,
- pagy_keyset_augmented_js: PAGY_PATH.join('mixins/keyset_augmented').to_s,
- pagy_meilisearch: PAGY_PATH.join('mixins/meilisearch').to_s,
- pagy_links: PAGY_PATH.join('mixins/links'),
- pagy_metadata: PAGY_PATH.join('mixins/metadata').to_s,
- pagy_offset: PAGY_PATH.join('mixins/offset').to_s,
- pagy_searchkick: PAGY_PATH.join('mixins/searchkick').to_s }.freeze
+ BACKEND_METHOD_MIXINS = { pagy_arel: PAGY_PATH.join('mixins/arel').to_s,
+ pagy_array: PAGY_PATH.join('mixins/array').to_s,
+ pagy_calendar: PAGY_PATH.join('mixins/calendar').to_s,
+ pagy_countless: PAGY_PATH.join('mixins/countless').to_s,
+ pagy_elasticsearch_rails: PAGY_PATH.join('mixins/elasticsearch_rails').to_s,
+ pagy_headers: PAGY_PATH.join('mixins/headers').to_s,
+ pagy_headers_merge: PAGY_PATH.join('mixins/headers').to_s,
+ pagy_keyset: PAGY_PATH.join('mixins/keyset').to_s,
+ pagy_keyset_first_url: PAGY_PATH.join('mixins/keyset').to_s,
+ pagy_keyset_next_url: PAGY_PATH.join('mixins/keyset').to_s,
+ pagy_keyset_augmented_js: PAGY_PATH.join('mixins/keyset_augmented').to_s,
+ pagy_meilisearch: PAGY_PATH.join('mixins/meilisearch').to_s,
+ pagy_links: PAGY_PATH.join('mixins/links'),
+ pagy_metadata: PAGY_PATH.join('mixins/metadata').to_s,
+ pagy_offset: PAGY_PATH.join('mixins/offset').to_s,
+ pagy_searchkick: PAGY_PATH.join('mixins/searchkick').to_s }.freeze
BACKEND_METHOD_MIXINS.each_key do |method|
class_eval "alias #{method} pagy_load_backend", __FILE__, __LINE__ # alias pagy_* pagy_load_backend
diff --git a/gem/lib/pagy/mixins/arel.rb b/gem/lib/pagy/mixins/arel.rb
index c82c14309..cb31fc63a 100644
--- a/gem/lib/pagy/mixins/arel.rb
+++ b/gem/lib/pagy/mixins/arel.rb
@@ -1,4 +1,3 @@
-# See the Pagy documentation: https://ddnexus.github.io/pagy/docs/extras/arel
# frozen_string_literal: true
require_relative 'offset' # require the offset mixin
diff --git a/gem/lib/pagy/mixins/array.rb b/gem/lib/pagy/mixins/array.rb
index 9e58ba280..82d250140 100644
--- a/gem/lib/pagy/mixins/array.rb
+++ b/gem/lib/pagy/mixins/array.rb
@@ -1,4 +1,3 @@
-# See the Pagy documentation: https://ddnexus.github.io/pagy/docs/extras/array
# frozen_string_literal: true
require_relative '../offset'
diff --git a/gem/lib/pagy/mixins/bootstrap.rb b/gem/lib/pagy/mixins/bootstrap.rb
index 5d5123d46..9cb24ea74 100644
--- a/gem/lib/pagy/mixins/bootstrap.rb
+++ b/gem/lib/pagy/mixins/bootstrap.rb
@@ -1,4 +1,3 @@
-# See the Pagy documentation: https://ddnexus.github.io/pagy/docs/extras/bootstrap
# frozen_string_literal: true
class Pagy
diff --git a/gem/lib/pagy/mixins/bulma.rb b/gem/lib/pagy/mixins/bulma.rb
index 8d71661b9..438552274 100644
--- a/gem/lib/pagy/mixins/bulma.rb
+++ b/gem/lib/pagy/mixins/bulma.rb
@@ -1,4 +1,3 @@
-# See the Pagy documentation: https://ddnexus.github.io/pagy/docs/extras/bulma
# frozen_string_literal: true
class Pagy
diff --git a/gem/lib/pagy/mixins/calendar.rb b/gem/lib/pagy/mixins/calendar.rb
index 701f141b8..02b571e66 100644
--- a/gem/lib/pagy/mixins/calendar.rb
+++ b/gem/lib/pagy/mixins/calendar.rb
@@ -1,4 +1,3 @@
-# See the Pagy documentation: https://ddnexus.github.io/pagy/docs/extras/calendar
# frozen_string_literal: true
class Pagy
diff --git a/gem/lib/pagy/mixins/countless.rb b/gem/lib/pagy/mixins/countless.rb
index 9908b52c3..40af7adc2 100644
--- a/gem/lib/pagy/mixins/countless.rb
+++ b/gem/lib/pagy/mixins/countless.rb
@@ -1,4 +1,3 @@
-# See the Pagy documentation: https://ddnexus.github.io/pagy/docs/extras/countless
# frozen_string_literal: true
require_relative '../offset/countless'
@@ -10,8 +9,17 @@ class Pagy
# Return Pagy object and records
def pagy_countless(collection, **vars)
+ if vars[:page].nil?
+ page = pagy_get_page(vars, force_integer: false) # accept nil and strings
+ if page.is_a?(String)
+ p, l = page.split.map(&:to_i)
+ vars[:page] = p
+ vars[:last] = l
+ else
+ vars[:page] = 1
+ end
+ end
vars[:limit] ||= pagy_get_limit(vars)
- vars[:page] ||= pagy_get_page(vars)
pagy = Offset::Countless.new(**vars)
[pagy, pagy_countless_get_items(collection, pagy)]
end
diff --git a/gem/lib/pagy/mixins/elasticsearch_rails.rb b/gem/lib/pagy/mixins/elasticsearch_rails.rb
index 840c1d280..58ca3b60d 100644
--- a/gem/lib/pagy/mixins/elasticsearch_rails.rb
+++ b/gem/lib/pagy/mixins/elasticsearch_rails.rb
@@ -1,4 +1,3 @@
-# See the Pagy documentation: https://ddnexus.github.io/pagy/docs/extras/elasticsearch_rails
# frozen_string_literal: true
require_relative '../offset/elasticsearch_rails'
diff --git a/gem/lib/pagy/mixins/headers.rb b/gem/lib/pagy/mixins/headers.rb
index 19de95c2f..6320f0e41 100644
--- a/gem/lib/pagy/mixins/headers.rb
+++ b/gem/lib/pagy/mixins/headers.rb
@@ -1,4 +1,3 @@
-# See the Pagy documentation: https://ddnexus.github.io/pagy/docs/extras/headers
# frozen_string_literal: true
require_relative '../helpers/url'
diff --git a/gem/lib/pagy/mixins/keyset.rb b/gem/lib/pagy/mixins/keyset.rb
index 1777d27d7..fd2272ff5 100644
--- a/gem/lib/pagy/mixins/keyset.rb
+++ b/gem/lib/pagy/mixins/keyset.rb
@@ -1,4 +1,3 @@
-# See the Pagy documentation: https://ddnexus.github.io/pagy/docs/extras/keyset
# frozen_string_literal: true
require_relative '../keyset'
diff --git a/gem/lib/pagy/mixins/keyset_augmented.rb b/gem/lib/pagy/mixins/keyset_augmented.rb
index 7ad2f0231..265dd8f75 100644
--- a/gem/lib/pagy/mixins/keyset_augmented.rb
+++ b/gem/lib/pagy/mixins/keyset_augmented.rb
@@ -1,4 +1,3 @@
-# See the Pagy documentation: https://ddnexus.github.io/pagy/docs/extras/keyset_frontendble
# frozen_string_literal: true
class Pagy
@@ -7,7 +6,7 @@ class Pagy
# Return Pagy::Keyset::Augmented object and paginated records
def pagy_keyset_augmented_js(set, **vars)
page = pagy_get_page(vars, force_integer: false) # allow nil
- if page.to_i.positive? # numeric page -> no augmentation -> fallback
+ if page&.match(' ') # countless page -> no augmentation -> fallback
return pagy_countless(set, **vars)
elsif page.is_a?(String) # augmented page param
page_args = JSON.parse(B64.urlsafe_decode(page))
diff --git a/gem/lib/pagy/mixins/meilisearch.rb b/gem/lib/pagy/mixins/meilisearch.rb
index ed05be925..9d140ca2c 100644
--- a/gem/lib/pagy/mixins/meilisearch.rb
+++ b/gem/lib/pagy/mixins/meilisearch.rb
@@ -1,4 +1,3 @@
-# See the Pagy documentation: https://ddnexus.github.io/pagy/docs/extras/meilisearch
# frozen_string_literal: true
require_relative '../offset/meilisearch'
diff --git a/gem/lib/pagy/mixins/metadata.rb b/gem/lib/pagy/mixins/metadata.rb
index 30b2af264..9413435dd 100644
--- a/gem/lib/pagy/mixins/metadata.rb
+++ b/gem/lib/pagy/mixins/metadata.rb
@@ -1,4 +1,3 @@
-# See the Pagy documentation: https://ddnexus.github.io/pagy/docs/extras/metadata
# frozen_string_literal: true
require_relative '../helpers/url'
diff --git a/gem/lib/pagy/mixins/pagy.rb b/gem/lib/pagy/mixins/pagy.rb
index 8b0f1e7ad..63a5afbd0 100644
--- a/gem/lib/pagy/mixins/pagy.rb
+++ b/gem/lib/pagy/mixins/pagy.rb
@@ -1,4 +1,3 @@
-# See the Pagy documentation: https://ddnexus.github.io/pagy/docs/extras/pagy
# frozen_string_literal: true
class Pagy
diff --git a/gem/lib/pagy/mixins/pagy_helpers.rb b/gem/lib/pagy/mixins/pagy_helpers.rb
index 3740c062c..f07688709 100644
--- a/gem/lib/pagy/mixins/pagy_helpers.rb
+++ b/gem/lib/pagy/mixins/pagy_helpers.rb
@@ -1,4 +1,3 @@
-# See the Pagy documentation: https://ddnexus.github.io/pagy/docs/extras/pagy
# frozen_string_literal: true
class Pagy
diff --git a/gem/lib/pagy/mixins/searchkick.rb b/gem/lib/pagy/mixins/searchkick.rb
index 2a796eeb1..ba50fe86a 100644
--- a/gem/lib/pagy/mixins/searchkick.rb
+++ b/gem/lib/pagy/mixins/searchkick.rb
@@ -1,4 +1,3 @@
-# See the Pagy documentation: https://ddnexus.github.io/pagy/docs/extras/searchkick
# frozen_string_literal: true
require_relative '../offset/searchkick'
diff --git a/gem/lib/pagy/offset.rb b/gem/lib/pagy/offset.rb
index a4042d69a..f7b0ae98a 100644
--- a/gem/lib/pagy/offset.rb
+++ b/gem/lib/pagy/offset.rb
@@ -1,4 +1,3 @@
-# See Pagy::Offset API documentation: https://ddnexus.github.io/pagy/docs/api/pagy/offset
# frozen_string_literal: true
class Pagy
diff --git a/gem/lib/pagy/offset/calendar.rb b/gem/lib/pagy/offset/calendar.rb
index c9e92c39b..956d39f9d 100644
--- a/gem/lib/pagy/offset/calendar.rb
+++ b/gem/lib/pagy/offset/calendar.rb
@@ -1,4 +1,3 @@
-# See Pagy::Offset::Countless API documentation: https://ddnexus.github.io/pagy/docs/api/calendar
# frozen_string_literal: true
require 'active_support'
diff --git a/gem/lib/pagy/offset/calendar/day.rb b/gem/lib/pagy/offset/calendar/day.rb
index f2ed096a8..2c5476614 100644
--- a/gem/lib/pagy/offset/calendar/day.rb
+++ b/gem/lib/pagy/offset/calendar/day.rb
@@ -1,4 +1,3 @@
-# See Pagy::Offset::Countless API documentation: https://ddnexus.github.io/pagy/docs/api/calendar
# frozen_string_literal: true
class Pagy
diff --git a/gem/lib/pagy/offset/calendar/month.rb b/gem/lib/pagy/offset/calendar/month.rb
index e33f9d8e3..5e3bbee4f 100644
--- a/gem/lib/pagy/offset/calendar/month.rb
+++ b/gem/lib/pagy/offset/calendar/month.rb
@@ -1,4 +1,3 @@
-# See Pagy::Offset::Countless API documentation: https://ddnexus.github.io/pagy/docs/api/calendar
# frozen_string_literal: true
class Pagy # :nodoc:
diff --git a/gem/lib/pagy/offset/calendar/quarter.rb b/gem/lib/pagy/offset/calendar/quarter.rb
index 1a1f457e2..579dedf71 100644
--- a/gem/lib/pagy/offset/calendar/quarter.rb
+++ b/gem/lib/pagy/offset/calendar/quarter.rb
@@ -1,4 +1,3 @@
-# See Pagy::Offset::Countless API documentation: https://ddnexus.github.io/pagy/docs/api/calendar
# frozen_string_literal: true
class Pagy # :nodoc:
diff --git a/gem/lib/pagy/offset/calendar/week.rb b/gem/lib/pagy/offset/calendar/week.rb
index c4f027010..be0706a41 100644
--- a/gem/lib/pagy/offset/calendar/week.rb
+++ b/gem/lib/pagy/offset/calendar/week.rb
@@ -1,4 +1,3 @@
-# See Pagy::Offset::Countless API documentation: https://ddnexus.github.io/pagy/docs/api/calendar
# frozen_string_literal: true
class Pagy
diff --git a/gem/lib/pagy/offset/calendar/year.rb b/gem/lib/pagy/offset/calendar/year.rb
index 6f13fccf8..0c19e8127 100644
--- a/gem/lib/pagy/offset/calendar/year.rb
+++ b/gem/lib/pagy/offset/calendar/year.rb
@@ -1,4 +1,3 @@
-# See Pagy::Offset::Countless API documentation: https://ddnexus.github.io/pagy/docs/api/calendar
# frozen_string_literal: true
class Pagy # :nodoc:
diff --git a/gem/lib/pagy/offset/countless.rb b/gem/lib/pagy/offset/countless.rb
index b09c4f113..35f0f6571 100644
--- a/gem/lib/pagy/offset/countless.rb
+++ b/gem/lib/pagy/offset/countless.rb
@@ -1,4 +1,3 @@
-# See Pagy::Offset::Countless API documentation: https://ddnexus.github.io/pagy/docs/api/offset/countless
# frozen_string_literal: true
class Pagy
@@ -13,7 +12,7 @@ def initialize(**vars) # rubocop:disable Lint/MissingSuper
assign_and_check(page: 1, outset: 0)
assign_limit
assign_offset
- @last = @vars[:last]
+ @last = vars[:last].to_i
end
def self.predict_last? = false
@@ -22,8 +21,8 @@ def self.predict_last? = false
def finalize(fetched_size)
raise OverflowError.new(self, :page, "to be < #{@page}", @page) if fetched_size.zero? && @page > 1
- @last ||= fetched_size > @limit ? @page + 1 : @page
- @last = @vars[:max_pages] if @vars[:max_pages] && @last > @vars[:max_pages]
+ @last = fetched_size > @limit ? @page + 1 : @page unless @last && @page < @last
+ @last = @vars[:max_pages] if @vars[:max_pages] && @last > @vars[:max_pages]
raise OverflowError.new(self, :page, "in 1..#{@last}", @page) if @page > @last
@in = [fetched_size, @limit].min
diff --git a/test/helpers/nav_tests.rb b/test/helpers/nav_tests.rb
index 9cef661a9..896ec5f26 100644
--- a/test/helpers/nav_tests.rb
+++ b/test/helpers/nav_tests.rb
@@ -4,7 +4,9 @@
require_relative '../mock_helpers/app'
require_relative '../files/models'
+# required because we use the class that does not load the mixin, so wenmiss the extra pagy_data
require 'pagy/mixins/keyset_augmented'
+
module NavTests
def app
MockApp.new
diff --git a/test/pagy/backend/jsonapi_test.rb b/test/pagy/backend/jsonapi_test.rb
index 6f26079d1..04eb038fb 100644
--- a/test/pagy/backend/jsonapi_test.rb
+++ b/test/pagy/backend/jsonapi_test.rb
@@ -1,7 +1,6 @@
# frozen_string_literal: true
require_relative '../../test_helper'
-
require_relative '../../mock_helpers/collection'
require_relative '../../files/models'
require_relative '../../mock_helpers/app'
diff --git a/test/pagy/backend_test.rb b/test/pagy/backend_test.rb
index 782abf0e7..1c027b112 100644
--- a/test/pagy/backend_test.rb
+++ b/test/pagy/backend_test.rb
@@ -1,7 +1,6 @@
# frozen_string_literal: true
require_relative '../test_helper'
-
require_relative '../mock_helpers/collection'
require_relative '../mock_helpers/app'
diff --git a/test/pagy/extras/i18n_extra_test.rb b/test/pagy/extras/i18n_extra_test.rb
index 48aa1a9c7..93230aaad 100644
--- a/test/pagy/extras/i18n_extra_test.rb
+++ b/test/pagy/extras/i18n_extra_test.rb
@@ -1,11 +1,10 @@
# frozen_string_literal: true
require_relative '../../test_helper'
+require_relative '../../mock_helpers/app'
require 'i18n'
require 'pagy/extras/i18n'
-require_relative '../../mock_helpers/app'
-
describe 'pagy/extras/i18n' do
let(:app) { MockApp.new }
diff --git a/test/pagy/frontend_test.rb b/test/pagy/frontend_test.rb
index 4ad3ff79d..748e21ef4 100644
--- a/test/pagy/frontend_test.rb
+++ b/test/pagy/frontend_test.rb
@@ -1,7 +1,6 @@
# frozen_string_literal: true
require_relative '../test_helper'
-
require_relative '../mock_helpers/pagy_buggy'
require_relative '../mock_helpers/app'
diff --git a/test/pagy/mixins/arel_test.rb b/test/pagy/mixins/arel_test.rb
index 8d99edf80..aa25be927 100644
--- a/test/pagy/mixins/arel_test.rb
+++ b/test/pagy/mixins/arel_test.rb
@@ -1,7 +1,6 @@
# frozen_string_literal: true
require_relative '../../test_helper'
-
require_relative '../../mock_helpers/arel'
require_relative '../../mock_helpers/collection'
require_relative '../../mock_helpers/app'
diff --git a/test/pagy/mixins/array_test.rb b/test/pagy/mixins/array_test.rb
index 43df953f9..198469196 100644
--- a/test/pagy/mixins/array_test.rb
+++ b/test/pagy/mixins/array_test.rb
@@ -1,7 +1,6 @@
# frozen_string_literal: true
require_relative '../../test_helper'
-
require_relative '../../mock_helpers/app'
describe 'pagy/mixins/array' do
diff --git a/test/pagy/mixins/bootstrap_test.rb.yaml b/test/pagy/mixins/bootstrap_test.rb.yaml
index 4720d160f..a8982e28f 100644
--- a/test/pagy/mixins/bootstrap_test.rb.yaml
+++ b/test/pagy/mixins/bootstrap_test.rb.yaml
@@ -1,53 +1,4 @@
---
-pagy/mixins/bootstrap___pagy_bootstrap_combo_nav_js_test_0001_renders_first,_intermediate_and_last_pages:
- :plain_1: ''
- :extras_1: ''
- :plain_3: ''
- :extras_3: ''
- :plain_6: ''
- :extras_6: ''
pagy/mixins/bootstrap___pagy_bootstrap_nav_test_0001_renders_first,_intermediate_and_last_pages:
:plain_1:
+pagy/mixins/bootstrap___pagy_bootstrap_combo_nav_js_test_0001_renders_first,_intermediate_and_last_pages:
+ :plain_1: ''
+ :extras_1: ''
+ :plain_3: ''
+ :extras_3: ''
+ :plain_6: ''
+ :extras_6: ''
pagy/mixins/bootstrap___pagy_bootstrap_nav_js_test_0002_renders_first,_intermediate_and_last_pages_with_required_steps:
:plain_1:
:extras_1:
:keyset:
-pagy/mixins/bootstrap___pagy_bootstrap_nav_js_test_0001_renders_single_and_multiple_pages_when_used_with_Pagy__Countless:
- :plain_1_0:
- :extras_1_0:
- :plain_2_23:
- :extras_2_23:
pagy/mixins/bootstrap___pagy_bootstrap_nav_js_test_0001_renders_single_and_multiple_pages_when_used_with_Pagy__Offset__Countless:
- :plain_1_0:
+ :plain_1_0:
:extras_1_0:
- :plain_2_23:
+ data-pagy="WyJuaiIsWyI8dWwgY2xhc3M9XCJwYWdpbmF0aW9uXCI+PGxpIGNsYXNzPVwicGFnZS1pdGVtIHByZXYgZGlzYWJsZWRcIj48YSByb2xlPVwibGlua1wiIGNsYXNzPVwicGFnZS1saW5rXCIgYXJpYS1kaXNhYmxlZD1cInRydWVcIiBhcmlhLWxhYmVsPVwiUHJldmlvdXNcIj4mbHQ7PC9hPjwvbGk+IiwiPGxpIGNsYXNzPVwicGFnZS1pdGVtXCI+PGEgYW5jaG9yX3N0cmluZyBocmVmPVwiL2Zvbz9wYWdlPVAgKzFcIiBjbGFzcz1cInBhZ2UtbGlua1wiPkw8L2E+PC9saT4iLCI8bGkgY2xhc3M9XCJwYWdlLWl0ZW0gYWN0aXZlXCI+PGEgcm9sZT1cImxpbmtcIiBjbGFzcz1cInBhZ2UtbGlua1wiIGFyaWEtY3VycmVudD1cInBhZ2VcIiBhcmlhLWRpc2FibGVkPVwidHJ1ZVwiPkw8L2E+PC9saT4iLCI8bGkgY2xhc3M9XCJwYWdlLWl0ZW0gZ2FwIGRpc2FibGVkXCI+PGEgcm9sZT1cImxpbmtcIiBjbGFzcz1cInBhZ2UtbGlua1wiIGFyaWEtZGlzYWJsZWQ9XCJ0cnVlXCI+JmhlbGxpcDs8L2E+PC9saT4iLCI8bGkgY2xhc3M9XCJwYWdlLWl0ZW0gbmV4dCBkaXNhYmxlZFwiPjxhIHJvbGU9XCJsaW5rXCIgY2xhc3M9XCJwYWdlLWxpbmtcIiBhcmlhLWRpc2FibGVkPVwidHJ1ZVwiIGFyaWEtbGFiZWw9XCJOZXh0XCI+Jmd0OzwvYT48L2xpPjwvdWw+Il0sWzYwMCwwXSxbWyIxIl0sWyIxIl1dLG51bGxd">
+ :plain_2_23:
:extras_2_23:
+ data-pagy="WyJuaiIsWyI8dWwgY2xhc3M9XCJwYWdpbmF0aW9uXCI+PGxpIGNsYXNzPVwicGFnZS1pdGVtIHByZXZcIj48YSBhbmNob3Jfc3RyaW5nIGhyZWY9XCIvZm9vP3BhZ2U9MSszXCIgY2xhc3M9XCJwYWdlLWxpbmtcIiBhcmlhLWxhYmVsPVwiUHJldmlvdXNcIj4mbHQ7PC9hPjwvbGk+IiwiPGxpIGNsYXNzPVwicGFnZS1pdGVtXCI+PGEgYW5jaG9yX3N0cmluZyBocmVmPVwiL2Zvbz9wYWdlPVAgKzNcIiBjbGFzcz1cInBhZ2UtbGlua1wiPkw8L2E+PC9saT4iLCI8bGkgY2xhc3M9XCJwYWdlLWl0ZW0gYWN0aXZlXCI+PGEgcm9sZT1cImxpbmtcIiBjbGFzcz1cInBhZ2UtbGlua1wiIGFyaWEtY3VycmVudD1cInBhZ2VcIiBhcmlhLWRpc2FibGVkPVwidHJ1ZVwiPkw8L2E+PC9saT4iLCI8bGkgY2xhc3M9XCJwYWdlLWl0ZW0gZ2FwIGRpc2FibGVkXCI+PGEgcm9sZT1cImxpbmtcIiBjbGFzcz1cInBhZ2UtbGlua1wiIGFyaWEtZGlzYWJsZWQ9XCJ0cnVlXCI+JmhlbGxpcDs8L2E+PC9saT4iLCI8bGkgY2xhc3M9XCJwYWdlLWl0ZW0gbmV4dFwiPjxhIGFuY2hvcl9zdHJpbmcgaHJlZj1cIi9mb28/cGFnZT0zKzNcIiBjbGFzcz1cInBhZ2UtbGlua1wiIGFyaWEtbGFiZWw9XCJOZXh0XCI+Jmd0OzwvYT48L2xpPjwvdWw+Il0sWzYwMCwwXSxbWzEsIjIiLDNdLFsxLCIyIiwzXV0sbnVsbF0=">
diff --git a/test/pagy/mixins/bulma_test.rb.yaml b/test/pagy/mixins/bulma_test.rb.yaml
index 8aef5974c..ac2522ef4 100644
--- a/test/pagy/mixins/bulma_test.rb.yaml
+++ b/test/pagy/mixins/bulma_test.rb.yaml
@@ -1,4 +1,63 @@
---
+pagy/mixins/bulma___pagy_bulma_nav_test_0001_renders_first,_intermediate_and_last_pages:
+ :plain_1:
+ :extras_1:
+ :plain_20:
+ :extras_20:
+ :plain_50:
+ :extras_50:
+ :keyset:
pagy/mixins/bulma___pagy_bulma_combo_nav_js_test_0001_renders_first,_intermediate_and_last_pages:
:plain_1: ''
-pagy/mixins/bulma___pagy_bulma_nav_js_test_0001_renders_single_and_multiple_pages_when_used_with_Pagy__Countless:
- :plain_1_0:
- :extras_1_0:
- :plain_2_23:
- :extras_2_23:
pagy/mixins/bulma___pagy_bulma_nav_js_test_0002_renders_first,_intermediate_and_last_pages_with_required_steps:
:plain_1:
@@ -77,71 +127,12 @@ pagy/mixins/bulma___pagy_bulma_nav_js_test_0002_renders_first,_intermediate_and_
aria-label="Pages" data-pagy="WyJuaiIsWyI8YSBhbmNob3Jfc3RyaW5nIGhyZWY9XCIvZm9vP3BhZ2U9NDlcIiBjbGFzcz1cInBhZ2luYXRpb24tcHJldmlvdXNcIiBhcmlhLWxhYmVsPVwiUHJldmlvdXNcIj4mbHQ7PC9hPjxhIHJvbGU9XCJsaW5rXCIgY2xhc3M9XCJwYWdpbmF0aW9uLW5leHRcIiBkaXNhYmxlZCBhcmlhLWRpc2FibGVkPVwidHJ1ZVwiIGFyaWEtbGFiZWw9XCJOZXh0XCI+Jmd0OzwvYT48dWwgY2xhc3M9XCJwYWdpbmF0aW9uLWxpc3RcIj4iLCI8bGk+PGEgYW5jaG9yX3N0cmluZyBocmVmPVwiL2Zvbz9wYWdlPVAgXCIgY2xhc3M9XCJwYWdpbmF0aW9uLWxpbmtcIj5MPC9hPjwvbGk+IiwiPGxpPjxhIHJvbGU9XCJsaW5rXCIgY2xhc3M9XCJwYWdpbmF0aW9uLWxpbmsgaXMtY3VycmVudFwiIGFyaWEtY3VycmVudD1cInBhZ2VcIiBhcmlhLWRpc2FibGVkPVwidHJ1ZVwiPkw8L2E+PC9saT4iLCI8bGk+PHNwYW4gY2xhc3M9XCJwYWdpbmF0aW9uLWVsbGlwc2lzXCI+JmhlbGxpcDs8L3NwYW4+PC9saT4iLCI8L3VsPiJdLFs2MDAsMF0sW1sxLCJnYXAiLDQ2LDQ3LDQ4LDQ5LCI1MCJdLFs0Niw0Nyw0OCw0OSwiNTAiXV0sbnVsbF0=">
:keyset:
-pagy/mixins/bulma___pagy_bulma_nav_test_0001_renders_first,_intermediate_and_last_pages:
- :plain_1:
- :extras_1:
- :plain_20:
- :extras_20:
- :plain_50:
- :extras_50:
- :keyset:
pagy/mixins/bulma___pagy_bulma_nav_js_test_0001_renders_single_and_multiple_pages_when_used_with_Pagy__Offset__Countless:
:plain_1_0:
+ data-pagy="WyJuaiIsWyI8YSByb2xlPVwibGlua1wiIGNsYXNzPVwicGFnaW5hdGlvbi1wcmV2aW91c1wiIGRpc2FibGVkIGFyaWEtZGlzYWJsZWQ9XCJ0cnVlXCIgYXJpYS1sYWJlbD1cIlByZXZpb3VzXCI+Jmx0OzwvYT48YSByb2xlPVwibGlua1wiIGNsYXNzPVwicGFnaW5hdGlvbi1uZXh0XCIgZGlzYWJsZWQgYXJpYS1kaXNhYmxlZD1cInRydWVcIiBhcmlhLWxhYmVsPVwiTmV4dFwiPiZndDs8L2E+PHVsIGNsYXNzPVwicGFnaW5hdGlvbi1saXN0XCI+IiwiPGxpPjxhIGhyZWY9XCIvZm9vP3BhZ2U9UCArMVwiIGNsYXNzPVwicGFnaW5hdGlvbi1saW5rXCI+TDwvYT48L2xpPiIsIjxsaT48YSByb2xlPVwibGlua1wiIGNsYXNzPVwicGFnaW5hdGlvbi1saW5rIGlzLWN1cnJlbnRcIiBhcmlhLWN1cnJlbnQ9XCJwYWdlXCIgYXJpYS1kaXNhYmxlZD1cInRydWVcIj5MPC9hPjwvbGk+IiwiPGxpPjxzcGFuIGNsYXNzPVwicGFnaW5hdGlvbi1lbGxpcHNpc1wiPiZoZWxsaXA7PC9zcGFuPjwvbGk+IiwiPC91bD4iXSxbMF0sW1siMSJdXSxudWxsXQ==">
:extras_1_0:
+ is-centered" aria-label="Page" data-pagy="WyJuaiIsWyI8YSByb2xlPVwibGlua1wiIGNsYXNzPVwicGFnaW5hdGlvbi1wcmV2aW91c1wiIGRpc2FibGVkIGFyaWEtZGlzYWJsZWQ9XCJ0cnVlXCIgYXJpYS1sYWJlbD1cIlByZXZpb3VzXCI+Jmx0OzwvYT48YSByb2xlPVwibGlua1wiIGNsYXNzPVwicGFnaW5hdGlvbi1uZXh0XCIgZGlzYWJsZWQgYXJpYS1kaXNhYmxlZD1cInRydWVcIiBhcmlhLWxhYmVsPVwiTmV4dFwiPiZndDs8L2E+PHVsIGNsYXNzPVwicGFnaW5hdGlvbi1saXN0XCI+IiwiPGxpPjxhIGFuY2hvcl9zdHJpbmcgaHJlZj1cIi9mb28/cGFnZT1QICsxXCIgY2xhc3M9XCJwYWdpbmF0aW9uLWxpbmtcIj5MPC9hPjwvbGk+IiwiPGxpPjxhIHJvbGU9XCJsaW5rXCIgY2xhc3M9XCJwYWdpbmF0aW9uLWxpbmsgaXMtY3VycmVudFwiIGFyaWEtY3VycmVudD1cInBhZ2VcIiBhcmlhLWRpc2FibGVkPVwidHJ1ZVwiPkw8L2E+PC9saT4iLCI8bGk+PHNwYW4gY2xhc3M9XCJwYWdpbmF0aW9uLWVsbGlwc2lzXCI+JmhlbGxpcDs8L3NwYW4+PC9saT4iLCI8L3VsPiJdLFs2MDAsMF0sW1siMSJdLFsiMSJdXSxudWxsXQ==">
:plain_2_23:
+ data-pagy="WyJuaiIsWyI8YSBocmVmPVwiL2Zvbz9wYWdlPTErM1wiIGNsYXNzPVwicGFnaW5hdGlvbi1wcmV2aW91c1wiIGFyaWEtbGFiZWw9XCJQcmV2aW91c1wiPiZsdDs8L2E+PGEgaHJlZj1cIi9mb28/cGFnZT0zKzNcIiBjbGFzcz1cInBhZ2luYXRpb24tbmV4dFwiIGFyaWEtbGFiZWw9XCJOZXh0XCI+Jmd0OzwvYT48dWwgY2xhc3M9XCJwYWdpbmF0aW9uLWxpc3RcIj4iLCI8bGk+PGEgaHJlZj1cIi9mb28/cGFnZT1QICszXCIgY2xhc3M9XCJwYWdpbmF0aW9uLWxpbmtcIj5MPC9hPjwvbGk+IiwiPGxpPjxhIHJvbGU9XCJsaW5rXCIgY2xhc3M9XCJwYWdpbmF0aW9uLWxpbmsgaXMtY3VycmVudFwiIGFyaWEtY3VycmVudD1cInBhZ2VcIiBhcmlhLWRpc2FibGVkPVwidHJ1ZVwiPkw8L2E+PC9saT4iLCI8bGk+PHNwYW4gY2xhc3M9XCJwYWdpbmF0aW9uLWVsbGlwc2lzXCI+JmhlbGxpcDs8L3NwYW4+PC9saT4iLCI8L3VsPiJdLFswXSxbWzEsIjIiLDNdXSxudWxsXQ==">
:extras_2_23:
+ is-centered" aria-label="Pages" data-pagy="WyJuaiIsWyI8YSBhbmNob3Jfc3RyaW5nIGhyZWY9XCIvZm9vP3BhZ2U9MSszXCIgY2xhc3M9XCJwYWdpbmF0aW9uLXByZXZpb3VzXCIgYXJpYS1sYWJlbD1cIlByZXZpb3VzXCI+Jmx0OzwvYT48YSBhbmNob3Jfc3RyaW5nIGhyZWY9XCIvZm9vP3BhZ2U9MyszXCIgY2xhc3M9XCJwYWdpbmF0aW9uLW5leHRcIiBhcmlhLWxhYmVsPVwiTmV4dFwiPiZndDs8L2E+PHVsIGNsYXNzPVwicGFnaW5hdGlvbi1saXN0XCI+IiwiPGxpPjxhIGFuY2hvcl9zdHJpbmcgaHJlZj1cIi9mb28/cGFnZT1QICszXCIgY2xhc3M9XCJwYWdpbmF0aW9uLWxpbmtcIj5MPC9hPjwvbGk+IiwiPGxpPjxhIHJvbGU9XCJsaW5rXCIgY2xhc3M9XCJwYWdpbmF0aW9uLWxpbmsgaXMtY3VycmVudFwiIGFyaWEtY3VycmVudD1cInBhZ2VcIiBhcmlhLWRpc2FibGVkPVwidHJ1ZVwiPkw8L2E+PC9saT4iLCI8bGk+PHNwYW4gY2xhc3M9XCJwYWdpbmF0aW9uLWVsbGlwc2lzXCI+JmhlbGxpcDs8L3NwYW4+PC9saT4iLCI8L3VsPiJdLFs2MDAsMF0sW1sxLCIyIiwzXSxbMSwiMiIsM11dLG51bGxd">
diff --git a/test/pagy/mixins/calendar_test.rb b/test/pagy/mixins/calendar_test.rb
index 92a697825..c03e55fac 100644
--- a/test/pagy/mixins/calendar_test.rb
+++ b/test/pagy/mixins/calendar_test.rb
@@ -1,7 +1,6 @@
# frozen_string_literal: true
require_relative '../../test_helper'
-
require_relative '../../files/models'
require_relative '../../mock_helpers/app'
diff --git a/test/pagy/mixins/countless_test.rb b/test/pagy/mixins/countless_test.rb
index 94821a50e..2c76f3b4a 100644
--- a/test/pagy/mixins/countless_test.rb
+++ b/test/pagy/mixins/countless_test.rb
@@ -1,7 +1,6 @@
# frozen_string_literal: true
require_relative '../../test_helper'
-
require_relative '../../mock_helpers/collection'
require_relative '../../mock_helpers/app'
@@ -92,4 +91,14 @@
_(pagy.next).must_be_nil
end
end
+ describe 'Keep last' do
+ it 'shows series including last page' do
+ Pagy::DEFAULT[:page_sym] = :page
+ pagy, = MockApp.new(params: {page: '25 50'}).send(:pagy_countless, @collection)
+ _(pagy.series).must_equal [1, :gap, 24, "25", 26, :gap, 50]
+ _(pagy.count).must_be_nil
+ _(pagy.prev).must_equal 24
+ _(pagy.next).must_equal 26
+ end
+ end
end
diff --git a/test/pagy/mixins/elasticsearch_rails_test.rb b/test/pagy/mixins/elasticsearch_rails_test.rb
index 3e22ad0e7..67ef7917f 100644
--- a/test/pagy/mixins/elasticsearch_rails_test.rb
+++ b/test/pagy/mixins/elasticsearch_rails_test.rb
@@ -1,7 +1,6 @@
# frozen_string_literal: true
require_relative '../../test_helper'
-
require_relative '../../mock_helpers/elasticsearch_rails'
require_relative '../../mock_helpers/collection'
require_relative '../../mock_helpers/app'
diff --git a/test/pagy/mixins/headers_test.rb b/test/pagy/mixins/headers_test.rb
index b514e3e40..b2ba4f739 100644
--- a/test/pagy/mixins/headers_test.rb
+++ b/test/pagy/mixins/headers_test.rb
@@ -1,7 +1,6 @@
# frozen_string_literal: true
require_relative '../../test_helper'
-
require_relative '../../mock_helpers/collection'
require_relative '../../mock_helpers/app'
require_relative '../../files/models'
diff --git a/test/pagy/mixins/headers_test.rb.yaml b/test/pagy/mixins/headers_test.rb.yaml
index 70f603eaa..e9919d7f9 100644
--- a/test/pagy/mixins/headers_test.rb.yaml
+++ b/test/pagy/mixins/headers_test.rb.yaml
@@ -1,13 +1,4 @@
---
-pagy/mixins/headers___pagy_headers_merge_with_Calendar_test_0001_returns_the_full_headers_hash:
- :response: !ruby/hash:Rack::Headers
- link: ; rel="first", ;
- rel="prev", ; rel="next", ;
- rel="last"
- current-page: '3'
- page-items: '20'
- total-pages: '26'
- total-count: '505'
pagy/mixins/headers___pagy_headers_merge_test_0001_returns_the_full_headers_hash:
:response: !ruby/hash:Rack::Headers
link: ; rel="first", ;
@@ -17,38 +8,30 @@ pagy/mixins/headers___pagy_headers_merge_test_0001_returns_the_full_headers_hash
page-items: '20'
total-pages: '50'
total-count: '1000'
-pagy/mixins/headers___pagy_headers_test_0003_returns_custom_headers_hash:
- :headers:
- link: ; rel="first", ;
- rel="next", ; rel="last"
-pagy/mixins/headers___pagy_headers_test_0006_omit_next_on_last_page:
+pagy/mixins/headers___pagy_headers_test_0004_returns_the_countless_headers_hash:
:headers:
- link: ; rel="first", ;
- rel="prev", ; rel="last"
- current-page: '50'
+ link: ; rel="first", ;
+ rel="next"
+ current-page: '1'
page-items: '20'
- total-pages: '50'
- total-count: '1000'
-pagy/mixins/headers___pagy_headers_test_0004_returns_the_countless_headers_hash:
+pagy/mixins/headers___pagy_headers_test_0001_returns_the_full_headers_hash:
:headers:
link: ; rel="first", ;
- rel="next"
+ rel="next", ; rel="last"
current-page: '1'
page-items: '20'
+ total-pages: '50'
+ total-count: '1000'
pagy/mixins/headers___pagy_headers_test_0002_returns_custom_headers_hash:
:headers:
link: ; rel="first", ;
rel="next", ; rel="last"
Per-Page: '20'
Total: '1000'
-pagy/mixins/headers___pagy_headers_test_0001_returns_the_full_headers_hash:
+pagy/mixins/headers___pagy_headers_test_0003_returns_custom_headers_hash:
:headers:
link: ; rel="first", ;
rel="next", ; rel="last"
- current-page: '1'
- page-items: '20'
- total-pages: '50'
- total-count: '1000'
pagy/mixins/headers___pagy_headers_test_0005_omit_prev_on_first_page:
:headers:
link: ; rel="first", ;
@@ -57,53 +40,47 @@ pagy/mixins/headers___pagy_headers_test_0005_omit_prev_on_first_page:
page-items: '20'
total-pages: '50'
total-count: '1000'
-pagy/mixins/headers___pagy_headers_with_Keyset_test_0002_returns_custom_headers_hash:
- :headers:
- link: ; rel="first", ;
- rel="next"
- Page: WzIwXQ
- Per-Page: '20'
-pagy/mixins/headers___pagy_headers_with_Keyset_test_0003_omit_next_on_last_page:
- :headers:
- link: ; rel="first"
- page-items: '50'
-pagy/mixins/headers___pagy_headers_with_Keyset_test_0001_returns_the_full_headers_hash:
+pagy/mixins/headers___pagy_headers_test_0006_omit_next_on_last_page:
:headers:
- link: ; rel="first", ;
- rel="next"
+ link: ; rel="first", ;
+ rel="prev", ; rel="last"
+ current-page: '50'
page-items: '20'
-pagy/mixins/headers___pagy_headers_with_Calendar_test_0003_returns_custom_headers_hash:
- :headers:
- link: ; rel="first", ;
- rel="next", ; rel="last"
-pagy/mixins/headers___pagy_headers_with_Calendar_test_0006_omit_next_on_last_page:
- :headers:
- link: ; rel="first", ;
- rel="prev", ; rel="last"
- current-page: '26'
+ total-pages: '50'
+ total-count: '1000'
+pagy/mixins/headers___pagy_headers_merge_with_Calendar_test_0001_returns_the_full_headers_hash:
+ :response: !ruby/hash:Rack::Headers
+ link: ; rel="first", ;
+ rel="prev", ; rel="next", ;
+ rel="last"
+ current-page: '3'
page-items: '20'
total-pages: '26'
total-count: '505'
pagy/mixins/headers___pagy_headers_with_Calendar_test_0004_returns_the_countless_headers_hash:
:headers:
- link: ; rel="first", ;
+ link: ; rel="first", ;
rel="next"
current-page: '1'
page-items: '20'
+pagy/mixins/headers___pagy_headers_with_Calendar_test_0001_returns_the_full_headers_hash:
+ :headers:
+ link: ; rel="first", ;
+ rel="next", ; rel="last"
+ current-page: '1'
+ page-items: '20'
+ total-pages: '26'
+ total-count: '505'
pagy/mixins/headers___pagy_headers_with_Calendar_test_0002_returns_custom_headers_hash:
:headers:
link: ; rel="first", ;
rel="next", ; rel="last"
Per-Page: '20'
Total: '505'
-pagy/mixins/headers___pagy_headers_with_Calendar_test_0001_returns_the_full_headers_hash:
+pagy/mixins/headers___pagy_headers_with_Calendar_test_0003_returns_custom_headers_hash:
:headers:
link: ; rel="first", ;
rel="next", ; rel="last"
- current-page: '1'
- page-items: '20'
- total-pages: '26'
- total-count: '505'
pagy/mixins/headers___pagy_headers_with_Calendar_test_0005_omit_prev_on_first_page:
:headers:
link: ; rel="first", ;
@@ -112,3 +89,26 @@ pagy/mixins/headers___pagy_headers_with_Calendar_test_0005_omit_prev_on_first_pa
page-items: '20'
total-pages: '26'
total-count: '505'
+pagy/mixins/headers___pagy_headers_with_Calendar_test_0006_omit_next_on_last_page:
+ :headers:
+ link: ; rel="first", ;
+ rel="prev", ; rel="last"
+ current-page: '26'
+ page-items: '20'
+ total-pages: '26'
+ total-count: '505'
+pagy/mixins/headers___pagy_headers_with_Keyset_test_0003_omit_next_on_last_page:
+ :headers:
+ link: ; rel="first"
+ page-items: '50'
+pagy/mixins/headers___pagy_headers_with_Keyset_test_0001_returns_the_full_headers_hash:
+ :headers:
+ link: ; rel="first", ;
+ rel="next"
+ page-items: '20'
+pagy/mixins/headers___pagy_headers_with_Keyset_test_0002_returns_custom_headers_hash:
+ :headers:
+ link: ; rel="first", ;
+ rel="next"
+ Page: WzIwXQ
+ Per-Page: '20'
diff --git a/test/pagy/mixins/keyset_augmented_test.rb b/test/pagy/mixins/keyset_augmented_test.rb
index c2a220089..8f02f65c0 100644
--- a/test/pagy/mixins/keyset_augmented_test.rb
+++ b/test/pagy/mixins/keyset_augmented_test.rb
@@ -1,7 +1,6 @@
# frozen_string_literal: true
require_relative '../../test_helper'
-
require_relative '../../files/models'
require_relative '../../mock_helpers/app'
@@ -44,11 +43,10 @@
_(pagy.next).must_equal 2
_(pagy.update).must_equal [nil, [1, 1, [10]]]
end
- it 'fallback to Countless if page param is a number' do
- app = MockApp.new(cookie: 'pagy=ppp')
+ it 'fallback to Countless if page param is a string with space' do
+ app = MockApp.new(cookie: 'pagy=ppp', params: { page: '2 3' })
pagy, records = app.send(:pagy_keyset_augmented_js,
model.order(:id),
- page: 2,
tuple_comparison: true,
limit: 10)
_(pagy).must_be_kind_of Pagy::Offset::Countless
diff --git a/test/pagy/mixins/pagy_test.rb.yaml b/test/pagy/mixins/pagy_test.rb.yaml
index c23e9349d..c4345380e 100644
--- a/test/pagy/mixins/pagy_test.rb.yaml
+++ b/test/pagy/mixins/pagy_test.rb.yaml
@@ -1,47 +1,34 @@
---
-pagy/mixins/pagy___pagy_next_a_test_0004_renders_the_pagy_next_a_for_page_50:
- :r1: >
- :r2: >
- :r3: NEXT
- :r4: NEXT
-pagy/mixins/pagy___pagy_next_a_test_0001_renders_the_pagy_next_a_for_page_1:
- :r1: >
- :r2: >
- :r3: NEXT
- :r4: NEXT
-pagy/mixins/pagy___pagy_next_a_test_0002_renders_the_pagy_next_a_for_page_3:
- :r1: >
- :r2: >
- :r3: NEXT
- :r4: NEXT
-pagy/mixins/pagy___pagy_next_a_test_0003_renders_the_pagy_next_a_for_page_6:
- :r1: >
- :r2: >
- :r3: NEXT
- :r4: NEXT
-pagy/mixins/pagy___pagy_nav_js_test_0002_renders_first,_intermediate_and_last_pages_with_required_steps:
- :plain_1:
- :extras_1:
- :plain_20:
- :extras_20:
- :plain_50:
- :extras_50:
- :keyset:
-pagy/mixins/pagy___pagy_nav_js_test_0001_renders_single_and_multiple_pages_when_used_with_Pagy__Countless:
- :plain_1_0:
- :extras_1_0:
- :plain_2_23:
- :extras_2_23:
+pagy/mixins/pagy___pagy_prev_url_test_0004_renders_the_pagy_prev_url_for_page_50:
+ :r1: "/foo?page=49"
+ :r2: "/foo?page=49+50"
+ :r3: http://example.com:3000/foo?page=49
+ :r4: http://example.com:3000/foo?page=49+50
+pagy/mixins/pagy___pagy_prev_url_test_0003_renders_the_pagy_prev_url_for_page_6:
+ :r1: "/foo?page=5"
+ :r2: "/foo?page=5+7"
+ :r3: http://example.com:3000/foo?page=5
+ :r4: http://example.com:3000/foo?page=5+7
+pagy/mixins/pagy___pagy_prev_url_test_0001_renders_the_pagy_prev_url_for_page_1:
+ :r1:
+ :r2:
+ :r3:
+ :r4:
+pagy/mixins/pagy___pagy_prev_url_test_0002_renders_the_pagy_prev_url_for_page_3:
+ :r1: "/foo?page=2"
+ :r2: "/foo?page=2+4"
+ :r3: http://example.com:3000/foo?page=2
+ :r4: http://example.com:3000/foo?page=2+4
pagy/mixins/pagy___pagy_prev_link_test_0004_renders_the_pagy_prev_link_for_page_50:
:r1:
- :r2:
+ :r2:
:r3:
- :r4:
+ :r4:
+pagy/mixins/pagy___pagy_prev_link_test_0003_renders_the_pagy_prev_link_for_page_6:
+ :r1:
+ :r2:
+ :r3:
+ :r4:
pagy/mixins/pagy___pagy_prev_link_test_0001_renders_the_pagy_prev_link_for_page_1:
:r1:
:r2:
@@ -49,34 +36,29 @@ pagy/mixins/pagy___pagy_prev_link_test_0001_renders_the_pagy_prev_link_for_page_
:r4:
pagy/mixins/pagy___pagy_prev_link_test_0002_renders_the_pagy_prev_link_for_page_3:
:r1:
- :r2:
+ :r2:
:r3:
- :r4:
-pagy/mixins/pagy___pagy_prev_link_test_0003_renders_the_pagy_prev_link_for_page_6:
- :r1:
- :r2:
- :r3:
- :r4:
+ :r4:
pagy/mixins/pagy___pagy_next_url_test_0004_renders_the_pagy_next_url_for_page_50:
:r1:
:r2:
:r3:
:r4:
+pagy/mixins/pagy___pagy_next_url_test_0003_renders_the_pagy_next_url_for_page_6:
+ :r1: "/foo?page=7"
+ :r2: "/foo?page=7+7"
+ :r3: http://example.com:3000/foo?page=7
+ :r4: http://example.com:3000/foo?page=7+7
pagy/mixins/pagy___pagy_next_url_test_0001_renders_the_pagy_next_url_for_page_1:
:r1: "/foo?page=2"
- :r2: "/foo?page=2"
+ :r2: "/foo?page=2+2"
:r3: http://example.com:3000/foo?page=2
- :r4: http://example.com:3000/foo?page=2
+ :r4: http://example.com:3000/foo?page=2+2
pagy/mixins/pagy___pagy_next_url_test_0002_renders_the_pagy_next_url_for_page_3:
:r1: "/foo?page=4"
- :r2: "/foo?page=4"
+ :r2: "/foo?page=4+4"
:r3: http://example.com:3000/foo?page=4
- :r4: http://example.com:3000/foo?page=4
-pagy/mixins/pagy___pagy_next_url_test_0003_renders_the_pagy_next_url_for_page_6:
- :r1: "/foo?page=7"
- :r2: "/foo?page=7"
- :r3: http://example.com:3000/foo?page=7
- :r4: http://example.com:3000/foo?page=7
+ :r4: http://example.com:3000/foo?page=4+4
pagy/mixins/pagy___pagy_nav_test_0001_renders_first,_intermediate_and_last_pages:
:plain_1:
+pagy/mixins/pagy___pagy_prev_a_test_0004_renders_the_pagy_prev_a_for_page_50:
+ :r1: <
+ :r2: <
+ :r3: PREV
+ :r4: PREV
+pagy/mixins/pagy___pagy_prev_a_test_0003_renders_the_pagy_prev_a_for_page_6:
+ :r1: <
+ :r2: <
+ :r3: PREV
+ :r4: PREV
+pagy/mixins/pagy___pagy_prev_a_test_0001_renders_the_pagy_prev_a_for_page_1:
+ :r1: <
+ :r2: <
+ :r3: PREV
+ :r4: PREV
+pagy/mixins/pagy___pagy_prev_a_test_0002_renders_the_pagy_prev_a_for_page_3:
+ :r1: <
+ :r2: <
+ :r3: PREV
+ :r4: PREV
+pagy/mixins/pagy___pagy_nav_js_test_0001_renders_single_and_multiple_pages_when_used_with_Pagy__Offset__Countless:
+ :plain_1_0:
+ :extras_1_0:
+ :plain_2_23:
+ :extras_2_23:
+pagy/mixins/pagy___pagy_nav_js_test_0002_renders_first,_intermediate_and_last_pages_with_required_steps:
+ :plain_1:
+ :extras_1:
+ :plain_20:
+ :extras_20:
+ :plain_50:
+ :extras_50:
+ :keyset:
pagy/mixins/pagy___pagy_next_link_test_0004_renders_the_pagy_next_link_for_page_50:
:r1:
:r2:
:r3:
:r4:
+pagy/mixins/pagy___pagy_next_link_test_0003_renders_the_pagy_next_link_for_page_6:
+ :r1:
+ :r2:
+ :r3:
+ :r4:
pagy/mixins/pagy___pagy_next_link_test_0001_renders_the_pagy_next_link_for_page_1:
:r1:
- :r2:
+ :r2:
:r3:
- :r4:
+ :r4:
pagy/mixins/pagy___pagy_next_link_test_0002_renders_the_pagy_next_link_for_page_3:
:r1:
- :r2:
+ :r2:
:r3:
- :r4:
-pagy/mixins/pagy___pagy_next_link_test_0003_renders_the_pagy_next_link_for_page_6:
- :r1:
- :r2:
- :r3:
- :r4:
+ :r4:
+pagy/mixins/pagy___pagy_next_a_test_0004_renders_the_pagy_next_a_for_page_50:
+ :r1: >
+ :r2: >
+ :r3: NEXT
+ :r4: NEXT
+pagy/mixins/pagy___pagy_next_a_test_0003_renders_the_pagy_next_a_for_page_6:
+ :r1: >
+ :r2: >
+ :r3: NEXT
+ :r4: NEXT
+pagy/mixins/pagy___pagy_next_a_test_0001_renders_the_pagy_next_a_for_page_1:
+ :r1: >
+ :r2: >
+ :r3: NEXT
+ :r4: NEXT
+pagy/mixins/pagy___pagy_next_a_test_0002_renders_the_pagy_next_a_for_page_3:
+ :r1: >
+ :r2: >
+ :r3: NEXT
+ :r4: NEXT
pagy/mixins/pagy___pagy_combo_nav_js_test_0001_renders_first,_intermediate_and_last_pages:
:plain_1: ''
-pagy/mixins/pagy___pagy_prev_url_test_0004_renders_the_pagy_prev_url_for_page_50:
- :r1: "/foo?page=49"
- :r2: "/foo?page=49"
- :r3: http://example.com:3000/foo?page=49
- :r4: http://example.com:3000/foo?page=49
-pagy/mixins/pagy___pagy_prev_url_test_0001_renders_the_pagy_prev_url_for_page_1:
- :r1:
- :r2:
- :r3:
- :r4:
-pagy/mixins/pagy___pagy_prev_url_test_0002_renders_the_pagy_prev_url_for_page_3:
- :r1: "/foo?page=2"
- :r2: "/foo?page=2"
- :r3: http://example.com:3000/foo?page=2
- :r4: http://example.com:3000/foo?page=2
-pagy/mixins/pagy___pagy_prev_url_test_0003_renders_the_pagy_prev_url_for_page_6:
- :r1: "/foo?page=5"
- :r2: "/foo?page=5"
- :r3: http://example.com:3000/foo?page=5
- :r4: http://example.com:3000/foo?page=5
-pagy/mixins/pagy___pagy_prev_a_test_0004_renders_the_pagy_prev_a_for_page_50:
- :r1: <
- :r2: <
- :r3: PREV
- :r4: PREV
-pagy/mixins/pagy___pagy_prev_a_test_0001_renders_the_pagy_prev_a_for_page_1:
- :r1: <
- :r2: <
- :r3: PREV
- :r4: PREV
-pagy/mixins/pagy___pagy_prev_a_test_0002_renders_the_pagy_prev_a_for_page_3:
- :r1: <
- :r2: <
- :r3: PREV
- :r4: PREV
-pagy/mixins/pagy___pagy_prev_a_test_0003_renders_the_pagy_prev_a_for_page_6:
- :r1: <
- :r2: <
- :r3: PREV
- :r4: PREV
-pagy/mixins/pagy___pagy_nav_js_test_0001_renders_single_and_multiple_pages_when_used_with_Pagy__Offset__Countless:
- :plain_1_0:
- :extras_1_0:
- :plain_2_23:
- :extras_2_23: