summaryrefslogtreecommitdiff
path: root/lib/github/client.rb
blob: ac4e3a739f946b7010dc64189648cf3ab5291cf4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
module Github
  class Client
    attr_reader :connection, :rate_limit

    def initialize(options)
      @connection = Faraday.new(url: options.fetch(:url, root_endpoint)) do |faraday|
        faraday.options.open_timeout = options.fetch(:timeout, 60)
        faraday.options.timeout = options.fetch(:timeout, 60)
        faraday.authorization 'token', options.fetch(:token)
        faraday.adapter :net_http
      end

      @rate_limit = RateLimit.new(connection)
    end

    def get(url, query = {})
      exceed, reset_in = rate_limit.get
      sleep reset_in if exceed

      Github::Response.new(connection.get(url, query))
    end

    private

    def root_endpoint
      custom_endpoint || githup_endpoint
    end

    def custom_endpoint
      Gitlab.config.omniauth.providers
                            .find { |provider| provider.name == 'github' }
                            .to_h
                            .dig('args', 'client_options', 'site')
    end

    def github_endpoint
      OmniAuth::Strategies::GitHub.default_options[:client_options][:site]
    end
  end
end