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: