Sha256: 5d07e9f181c5cb172d01c294994c455229ab56a78a9db8fbb3f785362fc9e5a1

Contents?: true

Size: 949 Bytes

Versions: 1

Compression:

Stored size: 949 Bytes

Contents

# frozen_string_literal: true

module IndieWeb
  module Endpoints
    # @api private
    class ResponseHeadersParser
      # @param response [HTTP::Response]
      def initialize(response)
        @headers = response.headers.get('link')
        @uri = response.uri
      end

      # @param identifier [Symbol]
      # @return [Array<String>, nil]
      def results_for(identifier)
        # Reject endpoints that contain a fragment identifier
        parsed_headers[identifier]&.filter_map do |header|
          header.target_uri unless HTTP::URI.parse(header.target_uri).fragment
        end
      end

      private

      # @return [Array<String>]
      attr_reader :headers

      # @return [HTTP::URI]
      attr_reader :uri

      # @return [Hash{Symbol => Array<LinkHeaderParser::LinkHeader>}]
      def parsed_headers
        @parsed_headers ||= LinkHeaderParser.parse(headers, base: uri).group_by_relation_type
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
indieweb-endpoints-8.0.0 lib/indieweb/endpoints/response_headers_parser.rb