Sha256: 9a95ad986dd56396688efb7a1c8a78b77c98725696b1e0fa8af8fdcf5c3c7855
Contents?: true
Size: 974 Bytes
Versions: 7
Compression:
Stored size: 974 Bytes
Contents
require 'addressable/uri' module GearedPagination class Headers def initialize(page:, controller:) @page, @controller = page, controller end def apply controller.headers.update(headers) if applicable? end private attr_reader :page, :controller delegate :request, to: :controller def headers Hash.new.tap do |h| h["X-Total-Count"] = page.recordset.records_count.to_s h["Link"] = next_page_link_header unless page.last? end end def applicable? request.format&.json? end def next_page_link_header link_header(rel: :next, page: page.next_param).to_s end def link_header(rel:, page:) %{<#{uri(page: page)}>; rel="#{rel}"} end def uri(page:) Addressable::URI.parse(request.url).tap do |uri| uri.query_values = (uri.query_values || {}).merge("page" => page) end.to_s end end end
Version data entries
7 entries across 7 versions & 1 rubygems