gitlab-org--gitlab-foss/lib/gitlab/pagination/keyset/header_builder.rb

45 lines
1.1 KiB
Ruby

# frozen_string_literal: true
module Gitlab
module Pagination
module Keyset
class HeaderBuilder
attr_reader :request_context
delegate :params, :header, :request, to: :request_context
def initialize(request_context)
@request_context = request_context
end
def add_next_page_header(query_params)
link = next_page_link(page_href(query_params))
header('Links', link)
header('Link', link)
end
private
def next_page_link(href)
%(<#{href}>; rel="next")
end
def page_href(query_params)
base_request_uri.tap do |uri|
uri.query = updated_params(query_params).to_query
end.to_s
end
def base_request_uri
@base_request_uri ||= URI.parse(request.url).tap do |uri|
uri.host = Gitlab.config.gitlab.host
uri.port = Gitlab.config.gitlab.port
end
end
def updated_params(query_params)
params.merge(query_params)
end
end
end
end
end