diff options
Diffstat (limited to 'lib/bulk_imports/common/extractors/rest_extractor.rb')
-rw-r--r-- | lib/bulk_imports/common/extractors/rest_extractor.rb | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/lib/bulk_imports/common/extractors/rest_extractor.rb b/lib/bulk_imports/common/extractors/rest_extractor.rb new file mode 100644 index 00000000000..b18e27fd475 --- /dev/null +++ b/lib/bulk_imports/common/extractors/rest_extractor.rb @@ -0,0 +1,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 |