Sha256: 41f8e09899d7dbe4c65236b28062eaa13c58bca60d707c90eb20ffc0468b77b6

Contents?: true

Size: 1.65 KB

Versions: 20

Compression:

Stored size: 1.65 KB

Contents

# typed: strict
# frozen_string_literal: true

module ShopifyAPI
  module Clients
    class HttpResponse
      extend T::Sig

      sig { returns(Integer) }
      attr_reader :code

      sig { returns(T::Hash[String, T::Array[String]]) }
      attr_reader :headers

      sig { returns(T.any(T::Hash[String, T.untyped], String)) }
      attr_reader :body

      sig { returns(T.nilable(String)) }
      attr_reader :prev_page_info, :next_page_info

      sig do
        params(
          code: Integer,
          headers: T::Hash[String, T::Array[String]],
          body: T.any(T::Hash[String, T.untyped], String),
        ).void
      end
      def initialize(code:, headers:, body:)
        @code = code
        @headers = headers
        @body = body

        @prev_page_info = T.let(nil, T.nilable(String))
        @next_page_info = T.let(nil, T.nilable(String))
        @prev_page_info, @next_page_info = parse_link_header
      end

      sig { returns(T::Boolean) }
      def ok?
        code >= 200 && code <= 299
      end

      private

      sig { returns(T::Array[T.nilable(String)]) }
      def parse_link_header
        return [nil, nil] if @headers["link"].nil?

        page_info = {}
        T.must(T.must(@headers["link"])[0]).split(",").each do |link|
          rel = T.must(link.match(/rel="(.*?)"/))[1]
          url = T.must(T.must(link.match(/<(.*?)>/))[1])

          T.must(URI.parse(url).query).split("&").each do |param|
            if param.split("=")[0] == "page_info"
              page_info[rel] = param.split("=")[1]
              break
            end
          end
        end

        [page_info["previous"], page_info["next"]]
      end
    end
  end
end

Version data entries

20 entries across 20 versions & 1 rubygems

Version Path
shopify_api-13.3.1 lib/shopify_api/clients/http_response.rb
shopify_api-13.3.0 lib/shopify_api/clients/http_response.rb
shopify_api-13.2.0 lib/shopify_api/clients/http_response.rb
shopify_api-13.1.0 lib/shopify_api/clients/http_response.rb
shopify_api-13.0.0 lib/shopify_api/clients/http_response.rb
shopify_api-12.5.0 lib/shopify_api/clients/http_response.rb
shopify_api-12.4.0 lib/shopify_api/clients/http_response.rb
shopify_api-12.3.0 lib/shopify_api/clients/http_response.rb
shopify_api-12.2.1 lib/shopify_api/clients/http_response.rb
shopify_api-12.2.0 lib/shopify_api/clients/http_response.rb
shopify_api-12.1.0 lib/shopify_api/clients/http_response.rb
shopify_api-12.0.0 lib/shopify_api/clients/http_response.rb
shopify_api-11.1.0 lib/shopify_api/clients/http_response.rb
shopify_api-11.0.1 lib/shopify_api/clients/http_response.rb
shopify_api-11.0.0 lib/shopify_api/clients/http_response.rb
shopify_api-10.1.0 lib/shopify_api/clients/http_response.rb
shopify_api-10.0.3 lib/shopify_api/clients/http_response.rb
shopify_api-10.0.2 lib/shopify_api/clients/http_response.rb
shopify_api-10.0.1 lib/shopify_api/clients/http_response.rb
shopify_api-10.0.0 lib/shopify_api/clients/http_response.rb