debian-mirror-gitlab/app/models/concerns/ci/artifactable.rb

41 lines
916 B
Ruby
Raw Normal View History

2020-10-24 23:57:45 +05:30
# frozen_string_literal: true
module Ci
module Artifactable
extend ActiveSupport::Concern
2020-11-24 15:15:51 +05:30
NotSupportedAdapterError = Class.new(StandardError)
2020-10-24 23:57:45 +05:30
FILE_FORMAT_ADAPTERS = {
gzip: Gitlab::Ci::Build::Artifacts::Adapters::GzipStream,
raw: Gitlab::Ci::Build::Artifacts::Adapters::RawStream
}.freeze
included do
enum file_format: {
raw: 1,
zip: 2,
gzip: 3
}, _suffix: true
2020-11-24 15:15:51 +05:30
scope :expired, -> (limit) { where('expire_at < ?', Time.current).limit(limit) }
end
def each_blob(&blk)
unless file_format_adapter_class
raise NotSupportedAdapterError, 'This file format requires a dedicated adapter'
end
file.open do |stream|
file_format_adapter_class.new(stream).each_blob(&blk)
end
end
private
def file_format_adapter_class
FILE_FORMAT_ADAPTERS[file_format.to_sym]
2020-10-24 23:57:45 +05:30
end
end
end