main
 1# frozen_string_literal: true
 2
 3module Scim
 4  module Kit
 5    class Http
 6      attr_reader :driver, :retries
 7
 8      def initialize(driver: Http.default_driver, retries: 3)
 9        @driver = driver
10        @retries = retries
11      end
12
13      def get(uri)
14        driver.with_retry(retries: retries) do |client|
15          response = client.get(uri)
16          ok?(response) ? JSON.parse(response.body, symbolize_names: true) : {}
17        end
18      rescue *Net::Hippie::CONNECTION_ERRORS => error
19        Scim::Kit.logger.error(error)
20        {}
21      end
22
23      def self.default_driver
24        @default_driver ||= Net::Hippie::Client.new(
25          follow_redirects: 3,
26          headers: headers,
27          logger: Scim::Kit.logger,
28          open_timeout: 1,
29          read_timeout: 5
30        )
31      end
32
33      def self.headers
34        {
35          'Accept' => 'application/scim+json',
36          'Content-Type' => 'application/scim+json',
37          'User-Agent' => "scim/kit #{Scim::Kit::VERSION}"
38        }
39      end
40
41      private
42
43      def ok?(response)
44        response.is_a?(Net::HTTPSuccess)
45      end
46    end
47  end
48end