class Stash::Merritt::SubmissionJob

Attributes

resource_id[R]
url_helpers[R]

Public Class Methods

new(resource_id:, url_helpers:) click to toggle source
# File lib/stash/merritt/submission_job.rb, line 12
def initialize(resource_id:, url_helpers:)
  @resource_id = resource_id
  @url_helpers = url_helpers
end

Public Instance Methods

description() click to toggle source
# File lib/stash/merritt/submission_job.rb, line 24
def description
  @description ||= begin
    resource = StashEngine::Resource.find(resource_id)
    description_for(resource)
  rescue => e
    log.error("Can't find resource #{resource_id}: #{e}\n#{e.backtrace.join("\n")}")
    "#{self.class} for missing resource #{resource_id}"
  end
end
submit!() click to toggle source
# File lib/stash/merritt/submission_job.rb, line 17
def submit!
  log.info("#{Time.now.xmlschema} #{description}")
  do_submit!
rescue => e
  Stash::Repo::SubmissionResult.failure(resource_id: resource_id, request_desc: description, error: e)
end

Private Instance Methods

cleanup(package) click to toggle source
# File lib/stash/merritt/submission_job.rb, line 86
def cleanup(package)
  log.info("#{Time.now.xmlschema} #{self.class}: cleaning up temporary files for resource #{resource_id} (#{resource.identifier_str})")
  package.cleanup!
end
create_package() click to toggle source
# File lib/stash/merritt/submission_job.rb, line 69
def create_package
  ensure_identifier
  log.info("#{Time.now.xmlschema} #{self.class}: creating package for resource #{resource_id} (#{resource.identifier_str})")
  SubmissionPackage.new(resource: resource)
end
description_for(resource) click to toggle source
# File lib/stash/merritt/submission_job.rb, line 91
def description_for(resource)
  msg = "#{self.class} for resource #{resource_id} (#{resource.identifier_str}): "
  msg << if (update_uri = resource.update_uri)
           "posting update to #{update_uri}"
         else
           "posting new object to #{resource.tenant.sword_params[:collection_uri]}"
         end
  msg << " (tenant: #{resource.tenant_id})"
end
do_submit!() click to toggle source
# File lib/stash/merritt/submission_job.rb, line 36
def do_submit!
  package = create_package
  submit(package)
  update_metadata(package.dc3_xml)
  cleanup(package)
  Stash::Repo::SubmissionResult.success(resource_id: resource_id, request_desc: description, message: 'Success')
end
ensure_identifier() click to toggle source
# File lib/stash/merritt/submission_job.rb, line 63
def ensure_identifier
  return if resource.identifier
  log.info("#{Time.now.xmlschema} #{self.class}: minting new identifier for resource #{resource_id}")
  resource.ensure_identifier(ezid_helper.mint_id)
end
ezid_helper() click to toggle source
# File lib/stash/merritt/submission_job.rb, line 59
def ezid_helper
  @ezid_helper ||= EzidHelper.new(resource: resource)
end
landing_page_url() click to toggle source
# File lib/stash/merritt/submission_job.rb, line 52
def landing_page_url
  @landing_page_url ||= begin
    path_to_landing = url_helpers.show_path(resource.identifier_str)
    tenant.landing_url(path_to_landing)
  end
end
resource() click to toggle source
# File lib/stash/merritt/submission_job.rb, line 44
def resource
  @resource ||= StashEngine::Resource.find(resource_id)
end
submit(package) click to toggle source
# File lib/stash/merritt/submission_job.rb, line 75
def submit(package)
  log.info("#{Time.now.xmlschema} #{self.class}: submitting resource #{resource_id} (#{resource.identifier_str})")
  sword_helper = SwordHelper.new(package: package, logger: log)
  sword_helper.submit!
end
tenant() click to toggle source
# File lib/stash/merritt/submission_job.rb, line 48
def tenant
  @tenant ||= resource.tenant
end
update_metadata(dc3_xml) click to toggle source
# File lib/stash/merritt/submission_job.rb, line 81
def update_metadata(dc3_xml)
  log.info("#{Time.now.xmlschema} #{self.class}: updating identifier landing page (#{landing_page_url}) and metadata for resource #{resource_id} (#{resource.identifier_str})")
  ezid_helper.update_metadata(dc3_xml: dc3_xml, landing_page_url: landing_page_url)
end