class Stash::Merritt::SubmissionPackage

Attributes

resource[R]
zipfile[R]

Public Class Methods

new(resource:) click to toggle source
# File lib/stash/merritt/submission_package.rb, line 20
def initialize(resource:)
  raise ArgumentError, "Resource (#{resource.id}) must have an identifier before submission" unless resource.identifier_str
  @resource = resource
  @zipfile = create_zipfile
end

Public Instance Methods

cleanup!() click to toggle source
# File lib/stash/merritt/submission_package.rb, line 49
def cleanup!
  FileUtils.remove_dir(workdir)
  @zipfile = nil
end
create_zipfile() click to toggle source
# File lib/stash/merritt/submission_package.rb, line 39
def create_zipfile
  StashDatacite::PublicationYear.ensure_pub_year(resource)
  zipfile_path = File.join(workdir, "#{resource_id}_archive.zip")
  Zip::File.open(zipfile_path, Zip::File::CREATE) do |zipfile|
    builders.each { |builder| write_to_zipfile(zipfile, builder) }
    new_uploads.each { |upload| add_to_zipfile(zipfile, upload) }
  end
  zipfile_path
end
dc3_xml() click to toggle source
# File lib/stash/merritt/submission_package.rb, line 30
def dc3_xml
  @dc3_xml ||= datacite_xml_factory.build_datacite_xml(datacite_3: true)
end
resource_id() click to toggle source
# File lib/stash/merritt/submission_package.rb, line 26
def resource_id
  resource.id
end
resource_title() click to toggle source
# File lib/stash/merritt/submission_package.rb, line 34
def resource_title
  primary_title = resource.titles.where(title_type: nil).first
  primary_title.title.to_s if primary_title
end
to_s() click to toggle source
# File lib/stash/merritt/submission_package.rb, line 54
def to_s
  "#{self.class}: submission package for resource #{resource_id} (#{resource_title}"
end

Private Instance Methods

add_to_zipfile(zipfile, upload) click to toggle source
# File lib/stash/merritt/submission_package.rb, line 65
def add_to_zipfile(zipfile, upload)
  path = File.join(resource.upload_dir, upload.upload_file_name)
  raise ArgumentError, "Upload file '#{upload.upload_file_name}' not found in directory #{resource.upload_dir}" unless File.exist?(path)
  zipfile.add(upload.upload_file_name, path)
end
builders() click to toggle source
# File lib/stash/merritt/submission_package.rb, line 71
def builders # rubocop:disable Metrics/AbcSize
  @builders ||= [
    StashWrapperBuilder.new(dcs_resource: dc4_resource, version_number: version_number, uploads: uploads, embargo_end_date: embargo_end_date),
    MerrittDataciteBuilder.new(datacite_xml_factory),
    MerrittOAIDCBuilder.new(resource_id: resource_id),
    DataONEManifestBuilder.new(uploads),
    MerrittDeleteBuilder.new(resource_id: resource_id),
    MerrittEmbargoBuilder.new(embargo_end_date: embargo_end_date)
  ]
end
datacite_xml_factory() click to toggle source
# File lib/stash/merritt/submission_package.rb, line 102
def datacite_xml_factory
  @datacite_xml_factory ||= Datacite::Mapping::DataciteXMLFactory.new(doi_value: resource.identifier_value, se_resource_id: resource_id, total_size_bytes: total_size_bytes, version: version_number)
end
dc4_resource() click to toggle source
# File lib/stash/merritt/submission_package.rb, line 106
def dc4_resource
  @dc4_resource ||= datacite_xml_factory.build_resource
end
embargo_end_date() click to toggle source
# File lib/stash/merritt/submission_package.rb, line 94
def embargo_end_date
  @embargo_end_date ||= (embargo = resource.embargo) && embargo.end_date
end
new_uploads() click to toggle source
# File lib/stash/merritt/submission_package.rb, line 98
def new_uploads
  resource.new_file_uploads
end
total_size_bytes() click to toggle source
# File lib/stash/merritt/submission_package.rb, line 82
def total_size_bytes
  @total_size_bytes ||= uploads.inject(0) { |sum, u| sum + u.upload_file_size }
end
uploads() click to toggle source
# File lib/stash/merritt/submission_package.rb, line 90
def uploads
  resource.current_file_uploads
end
version_number() click to toggle source
# File lib/stash/merritt/submission_package.rb, line 86
def version_number
  @version_number ||= resource.version_number
end
workdir() click to toggle source
# File lib/stash/merritt/submission_package.rb, line 110
def workdir
  @workdir ||= begin
    path = resource.upload_dir
    FileUtils.mkdir_p(path)
    tmpdir = Dir.mktmpdir('uploads', path)
    File.absolute_path(tmpdir)
  end
end
write_to_zipfile(zipfile, builder) click to toggle source
# File lib/stash/merritt/submission_package.rb, line 60
def write_to_zipfile(zipfile, builder)
  return unless (file = builder.write_file(workdir))
  zipfile.add(builder.file_name, file)
end