66 lines
1.6 KiB
Ruby
66 lines
1.6 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module BulkImports
|
|
module Pipeline
|
|
module Runner
|
|
extend ActiveSupport::Concern
|
|
|
|
included do
|
|
private
|
|
|
|
def extractors
|
|
@extractors ||= self.class.extractors.map(&method(:instantiate))
|
|
end
|
|
|
|
def transformers
|
|
@transformers ||= self.class.transformers.map(&method(:instantiate))
|
|
end
|
|
|
|
def loaders
|
|
@loaders ||= self.class.loaders.map(&method(:instantiate))
|
|
end
|
|
|
|
def pipeline_name
|
|
@pipeline ||= self.class.name
|
|
end
|
|
|
|
def instantiate(class_config)
|
|
class_config[:klass].new(class_config[:options])
|
|
end
|
|
end
|
|
|
|
def run(context)
|
|
info(context, message: "Pipeline started", pipeline: pipeline_name)
|
|
|
|
extractors.each do |extractor|
|
|
extractor.extract(context).each do |entry|
|
|
info(context, extractor: extractor.class.name)
|
|
|
|
transformers.each do |transformer|
|
|
info(context, transformer: transformer.class.name)
|
|
entry = transformer.transform(context, entry)
|
|
end
|
|
|
|
loaders.each do |loader|
|
|
info(context, loader: loader.class.name)
|
|
loader.load(context, entry)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
private # rubocop:disable Lint/UselessAccessModifier
|
|
|
|
def info(context, extra = {})
|
|
logger.info({
|
|
entity: context.entity.id,
|
|
entity_type: context.entity.source_type
|
|
}.merge(extra))
|
|
end
|
|
|
|
def logger
|
|
@logger ||= Gitlab::Import::Logger.build
|
|
end
|
|
end
|
|
end
|
|
end
|