Sha256: 046bec49fa7822b1b89ee89b6e2acba7a5b0d2707d6b8e03e708eedef6ff3600

Contents?: true

Size: 1.61 KB

Versions: 2

Compression:

Stored size: 1.61 KB

Contents

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

class Pagy
  # Add a specialized backend method for pagination metadata
  module Backend
  private

    METADATA = %i[ scaffold_url first_url prev_url page_url next_url last_url
                   count page items vars pages last from to prev next series
               ].tap do |metadata|
                 metadata << :sequels if VARS.key?(:steps)  # :steps gets defined along with the #sequels method
               end.freeze

    VARS[:metadata] = METADATA.dup

    include Helpers

    def pagy_metadata(pagy, url=nil)
      names   = pagy.vars[:metadata]
      unknown = names - METADATA
      raise VariableError.new(pagy), "unknown metadata #{unknown.inspect}" \
            unless unknown.empty?

      scaffold_url = pagy_url_for(PAGE_PLACEHOLDER, pagy, url)
      {}.tap do |metadata|
        names.each do |key|
          metadata[key] = case key
                          when :scaffold_url then scaffold_url
                          when :first_url    then scaffold_url.sub(PAGE_PLACEHOLDER, 1.to_s)
                          when :prev_url     then scaffold_url.sub(PAGE_PLACEHOLDER, pagy.prev.to_s)
                          when :page_url     then scaffold_url.sub(PAGE_PLACEHOLDER, pagy.page.to_s)
                          when :next_url     then scaffold_url.sub(PAGE_PLACEHOLDER, pagy.next.to_s)
                          when :last_url     then scaffold_url.sub(PAGE_PLACEHOLDER, pagy.last.to_s)
                          else pagy.send(key)
                          end
        end
      end
    end

  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
pagy-4.3.0 lib/pagy/extras/metadata.rb
pagy-4.2.0 lib/pagy/extras/metadata.rb