Welcome to mirror list, hosted at ThFree Co, Russian Federation.

proxy.rb « clients « github_import « gitlab « lib - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: b12df40464034b758cfc6851c8f483016ebd8ac2 (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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# frozen_string_literal: true

module Gitlab
  module GithubImport
    module Clients
      class Proxy
        attr_reader :client

        def initialize(access_token, client_options)
          @client = pick_client(access_token, client_options)
        end

        def repos(search_text, options)
          return { repos: filtered(client.repos, search_text) } if use_legacy?

          if use_graphql?
            fetch_repos_via_graphql(search_text, options)
          else
            fetch_repos_via_rest(search_text, options)
          end
        end

        private

        def fetch_repos_via_rest(search_text, options)
          { repos: client.search_repos_by_name(search_text, options)[:items] }
        end

        def fetch_repos_via_graphql(search_text, options)
          response = client.search_repos_by_name_graphql(search_text, options)
          {
            repos: response.dig(:data, :search, :nodes),
            page_info: response.dig(:data, :search, :pageInfo)
          }
        end

        def pick_client(access_token, client_options)
          return Gitlab::GithubImport::Client.new(access_token) unless use_legacy?

          Gitlab::LegacyGithubImport::Client.new(access_token, **client_options)
        end

        def filtered(collection, search_text)
          return collection if search_text.blank?

          collection.select { |item| item[:name].to_s.downcase.include?(search_text) }
        end

        def use_legacy?
          Feature.disabled?(:remove_legacy_github_client)
        end

        def use_graphql?
          Feature.enabled?(:github_client_fetch_repos_via_graphql)
        end
      end
    end
  end
end