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

rest_extractor.rb « extractors « common « bulk_imports « lib - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: b18e27fd475e8bd3c428d6c4d66435b0536955dc (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
# frozen_string_literal: true

module BulkImports
  module Common
    module Extractors
      class RestExtractor
        def initialize(options = {})
          @query = options[:query]
        end

        def extract(context)
          client = http_client(context.configuration)
          params = query.to_h(context)
          response = client.get(params[:resource], params[:query])

          BulkImports::Pipeline::ExtractedData.new(
            data: response.parsed_response,
            page_info: page_info(response.headers)
          )
        end

        private

        attr_reader :query

        def http_client(configuration)
          @http_client ||= BulkImports::Clients::Http.new(
            uri: configuration.url,
            token: configuration.access_token,
            per_page: 100
          )
        end

        def page_info(headers)
          next_page = headers['x-next-page']

          {
            'has_next_page' => next_page.present?,
            'next_page' => next_page
          }
        end
      end
    end
  end
end