Sha256: 0a197c82379e1528ec73a36ecfe95216aeeea23aeb2f8c3490430f0685e1454e

Contents?: true

Size: 1.57 KB

Versions: 14

Compression:

Stored size: 1.57 KB

Contents

# See the Pagy documentation: https://ddnexus.github.io/pagy/docs/extras/metadata
# frozen_string_literal: true

require_relative '../url_helpers'

class Pagy # :nodoc:
  DEFAULT[:metadata] = %i[ scaffold_url first_url prev_url page_url next_url last_url
                           count page items vars pages last in from to prev next series ]

  # Add a specialized backend method for pagination metadata
  module MetadataExtra
    private

    include UrlHelpers

    # Return the metadata hash
    def pagy_metadata(pagy, absolute: nil)
      scaffold_url = pagy_url_for(pagy, PAGE_TOKEN, absolute:)
      {}.tap do |metadata|
        keys = defined?(Calendar) && pagy.is_a?(Calendar) ? pagy.vars[:metadata] - %i[count items] : pagy.vars[:metadata]
        keys.each do |key|
          metadata[key] = case key
                          when :scaffold_url then scaffold_url
                          when :first_url    then scaffold_url.sub(PAGE_TOKEN, 1.to_s)
                          when :prev_url     then scaffold_url.sub(PAGE_TOKEN, pagy.prev.to_s)
                          when :page_url     then scaffold_url.sub(PAGE_TOKEN, pagy.page.to_s)
                          when :next_url     then scaffold_url.sub(PAGE_TOKEN, pagy.next.to_s)
                          when :last_url     then scaffold_url.sub(PAGE_TOKEN, pagy.last.to_s)
                          else pagy.send(key)
                          end
        rescue NoMethodError
          raise VariableError.new(pagy, :metadata, 'to contain known keys', key)
        end
      end
    end
  end
  Backend.prepend MetadataExtra
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
pagy-8.4.5 lib/pagy/extras/metadata.rb
pagy-8.4.4 lib/pagy/extras/metadata.rb
pagy-8.4.3 lib/pagy/extras/metadata.rb
pagy-8.4.2 lib/pagy/extras/metadata.rb
pagy-8.4.1 lib/pagy/extras/metadata.rb
pagy-8.4.0 lib/pagy/extras/metadata.rb
pagy-8.3.0 lib/pagy/extras/metadata.rb
pagy-8.2.2 lib/pagy/extras/metadata.rb
pagy-8.2.1 lib/pagy/extras/metadata.rb
pagy-8.2.0 lib/pagy/extras/metadata.rb
pagy-8.1.2 lib/pagy/extras/metadata.rb
pagy-8.1.1 lib/pagy/extras/metadata.rb
pagy-8.1.0 lib/pagy/extras/metadata.rb
pagy-8.0.2 lib/pagy/extras/metadata.rb