Class: BulkImports::Clients::HTTP
- Inherits:
-
Object
- Object
- BulkImports::Clients::HTTP
- Includes:
- Gitlab::Utils::StrongMemoize
- Defined in:
- lib/bulk_imports/clients/http.rb
Constant Summary collapse
- API_VERSION =
'v4'
- DEFAULT_PAGE =
1
- DEFAULT_PER_PAGE =
30
- PAT_ENDPOINT_MIN_VERSION =
'15.5.0'
- SIDEKIQ_REQUEST_TIMEOUT =
60
Instance Method Summary collapse
- #compatible_for_project_migration? ⇒ Boolean
- #each_page(method, resource, query = {}, &block) ⇒ Object
- #get(resource, query = {}) ⇒ Object
- #head(resource) ⇒ Object
-
#initialize(url:, token:, page: DEFAULT_PAGE, per_page: DEFAULT_PER_PAGE, api_version: API_VERSION) ⇒ HTTP
constructor
A new instance of HTTP.
- #instance_enterprise ⇒ Object
- #instance_version ⇒ Object
- #options ⇒ Object
- #post(resource, body = {}) ⇒ Object
- #resource_url(resource) ⇒ Object
- #stream(resource, &block) ⇒ Object
- #validate_import_scopes! ⇒ Object
- #validate_instance_version! ⇒ Object
Constructor Details
#initialize(url:, token:, page: DEFAULT_PAGE, per_page: DEFAULT_PER_PAGE, api_version: API_VERSION) ⇒ HTTP
Returns a new instance of HTTP.
14 15 16 17 18 19 20 21 |
# File 'lib/bulk_imports/clients/http.rb', line 14 def initialize(url:, token:, page: DEFAULT_PAGE, per_page: DEFAULT_PER_PAGE, api_version: API_VERSION) @url = url @token = token&.strip @page = page @per_page = per_page @api_version = api_version @compatible_instance_version = false end |
Instance Method Details
#compatible_for_project_migration? ⇒ Boolean
67 68 69 |
# File 'lib/bulk_imports/clients/http.rb', line 67 def compatible_for_project_migration? instance_version >= BulkImport.min_gl_version_for_project_migration end |
#each_page(method, resource, query = {}, &block) ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/bulk_imports/clients/http.rb', line 39 def each_page(method, resource, query = {}, &block) return to_enum(__method__, method, resource, query) unless block next_page = @page while next_page @page = next_page.to_i response = self.public_send(method, resource, query) # rubocop: disable GitlabSecurity/PublicSend collection = response.parsed_response next_page = response.headers['x-next-page'].presence yield collection end end |
#get(resource, query = {}) ⇒ Object
23 24 25 |
# File 'lib/bulk_imports/clients/http.rb', line 23 def get(resource, query = {}) request(:get, resource, query: query.reverse_merge(request_query)) end |
#head(resource) ⇒ Object
31 32 33 |
# File 'lib/bulk_imports/clients/http.rb', line 31 def head(resource) request(:head, resource) end |
#instance_enterprise ⇒ Object
63 64 65 |
# File 'lib/bulk_imports/clients/http.rb', line 63 def instance_enterprise Gitlab::Utils.to_boolean(['enterprise'], default: true) end |
#instance_version ⇒ Object
59 60 61 |
# File 'lib/bulk_imports/clients/http.rb', line 59 def instance_version Gitlab::VersionInfo.parse(['version']) end |
#options ⇒ Object
71 72 73 |
# File 'lib/bulk_imports/clients/http.rb', line 71 def { headers: { 'Content-Type' => 'application/json' }, query: { private_token: @token } } end |
#post(resource, body = {}) ⇒ Object
27 28 29 |
# File 'lib/bulk_imports/clients/http.rb', line 27 def post(resource, body = {}) request(:post, resource, body: body) end |
#resource_url(resource) ⇒ Object
55 56 57 |
# File 'lib/bulk_imports/clients/http.rb', line 55 def resource_url(resource) Gitlab::Utils.append_path(api_url, resource) end |
#stream(resource, &block) ⇒ Object
35 36 37 |
# File 'lib/bulk_imports/clients/http.rb', line 35 def stream(resource, &block) request(:get, resource, stream_body: true, &block) end |
#validate_import_scopes! ⇒ Object
75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/bulk_imports/clients/http.rb', line 75 def validate_import_scopes! return true unless instance_version >= ::Gitlab::VersionInfo.parse(PAT_ENDPOINT_MIN_VERSION) response = with_error_handling do Gitlab::HTTP.get(resource_url("personal_access_tokens/self"), ) end return true if response['scopes']&.include?('api') raise ::BulkImports::Error.scope_validation_failure end |
#validate_instance_version! ⇒ Object
87 88 89 90 91 92 93 |
# File 'lib/bulk_imports/clients/http.rb', line 87 def validate_instance_version! raise ::BulkImports::Error.invalid_url unless instance_version.valid? return true unless instance_version.major < BulkImport::MIN_MAJOR_VERSION raise ::BulkImports::Error.unsupported_gitlab_version end |