summaryrefslogtreecommitdiff
path: root/lib/sentry/pagination_parser.rb
blob: fa9c1dd869423d2cc0dee2989272357251dd9f0f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# frozen_string_literal: true

module Sentry
  module PaginationParser
    PATTERN = /rel=\"(?<direction>\w+)\";\sresults=\"(?<results>\w+)\";\scursor=\"(?<cursor>.+)\"/.freeze

    def self.parse(headers)
      links = headers['link'].to_s.split(',')

      links.map { |link| parse_link(link) }.compact.to_h
    end

    def self.parse_link(link)
      match = link.match(PATTERN)

      return unless match
      return if match['results'] != "true"

      [match['direction'], { 'cursor' => match['cursor'] }]
    end
    private_class_method :parse_link
  end
end