Sha256: e348599e921400cc26638f35532afd4e6e5837f20eb355c850b9b661009f5d6a

Contents?: true

Size: 910 Bytes

Versions: 9

Compression:

Stored size: 910 Bytes

Contents

module ShopifyAPI
  class InvalidPaginationLinksError < StandardError; end

  class PaginationLinkHeaders
    LinkHeader = Struct.new(:url, :rel)
    attr_reader :previous_link, :next_link

    def initialize(link_header)
      links = parse_link_header(link_header)
      @previous_link = links.find { |link| link.rel == :previous }
      @next_link = links.find { |link| link.rel == :next }

      self
    end

    private

    def parse_link_header(link_header)
      return [] unless link_header.present?
      links = link_header.split(',')
      links.map do |link|
        parts = link.split('; ')
        raise ShopifyAPI::InvalidPaginationLinksError.new("Invalid link header: url and rel expected") unless parts.length == 2

        url = parts[0][/<(.*)>/, 1]
        rel = parts[1][/rel="(.*)"/, 1]&.to_sym

        url = URI.parse(url)
        LinkHeader.new(url, rel)
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
shopify_api-9.1.0 lib/shopify_api/pagination_link_headers.rb
shopify_api-9.0.4 lib/shopify_api/pagination_link_headers.rb
shopify_api-9.0.3 lib/shopify_api/pagination_link_headers.rb
shopify_api-9.0.2 lib/shopify_api/pagination_link_headers.rb
shopify_api-9.0.1 lib/shopify_api/pagination_link_headers.rb
shopify_api-9.0.0 lib/shopify_api/pagination_link_headers.rb
shopify_api-8.1.0 lib/shopify_api/pagination_link_headers.rb
shopify_api-8.0.0 lib/shopify_api/pagination_link_headers.rb
shopify_api-7.1.0 lib/shopify_api/pagination_link_headers.rb