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