Sha256: 610a086653c476e66081e253abb8a7182809189314818b085e5189fbc8244778

Contents?: true

Size: 1.27 KB

Versions: 2

Compression:

Stored size: 1.27 KB

Contents

# See the Pagy documentation: https://ddnexus.github.io/pagy/extras/headers
# encoding: utf-8
# frozen_string_literal: true

class Pagy
  # Add specialized backend methods to add pagination response headers
  module Backend ; private

    VARS[:headers] = { items: 'Page-Items', count: 'Total-Count', pages: 'Total-Pages' }

    include Helpers

    def pagy_headers_merge(pagy)
      response.headers.merge!(pagy_headers(pagy))
    end

    def pagy_headers(pagy)
      hash = pagy_headers_hash(pagy)
      hash['Link'] = hash['Link'].map{|rel, link| %(<#{link}>; rel="#{rel}")}.join(', ')
      hash
    end

    def pagy_headers_hash(pagy)
      countless = defined?(Pagy::Countless) && pagy.is_a?(Pagy::Countless)
      rels      = { 'first' => 1, 'prev' => pagy.prev, 'next' => pagy.next }; rels['last'] = pagy.last unless countless
      url_str   = pagy_url_for(Frontend::MARKER, pagy, :url)
      hash      = { 'Link' => Hash[rels.map{|rel, n|[rel, url_str.sub(Frontend::MARKER, n.to_s)] if n}.compact] }
      headers   = pagy.vars[:headers]
      hash[headers[:items]] = pagy.vars[:items] if headers[:items]
      unless countless
        hash[headers[:pages]] = pagy.pages if headers[:pages]
        hash[headers[:count]] = pagy.count if headers[:count]
      end
      hash
    end

  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
pagy-2.1.1 lib/pagy/extras/headers.rb
pagy-2.1.0 lib/pagy/extras/headers.rb