lib/ddr/models/permanent_id.rb in ddr-models-2.6.2 vs lib/ddr/models/permanent_id.rb in ddr-models-2.7.0.rc1

- old
+ new

@@ -33,17 +33,19 @@ # ActiveSupport::Notifications event handler def self.call(*args) event = ActiveSupport::Notifications::Event.new(*args) repo_id, identifier_id, reason = event.payload.values_at(:pid, :permanent_id, :reason) case event.name - when /workflow/ - update!(repo_id) if auto_update? - when /^deaccession/ + when Base::UPDATE + if auto_update? && event.payload[:attributes_changed].include?("workflow_state") + update!(repo_id) + end + when Base::DEACCESSION if auto_update? && identifier_id deaccession!(repo_id, identifier_id, reason) end - when /^destroy/ + when Base::DELETE if auto_update? && identifier_id delete!(repo_id, identifier_id, reason) end end end @@ -102,36 +104,39 @@ def repo_id @repo_id ||= @repo_object && @repo_object.id end def assign!(id = nil) - ActiveSupport::Notifications.instrument("assign.permanent_id", pid: repo_object.id) do |payload| - assign(id) - software = [ "ddr-models #{Ddr::Models::VERSION}", Ezid::Client.version ].join("; ") - detail = <<-EOS -Permanent ID: #{repo_object.permanent_id} -Permanent URL: #{repo_object.permanent_url} - -EZID Metadata: -#{identifier.metadata} - EOS - payload.merge!(summary: "Permanent ID assignment", - detail: detail, - software: software, - permanent_id: identifier.id) + if assigned? + raise AlreadyAssigned, + "Repository object \"#{repo_object.id}\" has already been assigned permanent id \"#{repo_object.permanent_id}\"." end + @identifier = case id + when identifier_class + id + when String + find_identifier(id) + when nil + mint_identifier + end + repo_object.reload + repo_object.permanent_id = identifier.id + repo_object.permanent_url = PERMANENT_URL_BASE + identifier.id + repo_object.save! + set_metadata! end def assigned? repo_object.permanent_id end def update! - ActiveSupport::Notifications.instrument("update.permanent_id", pid: repo_object.id) do |payload| - update - payload.merge!(permanent_id: identifier.id) + if !assigned? + raise IdentifierNotAssigned, + "Cannot update identifier for repository object \"#{repo_object.id}\"; not assigned." end + set_status! end def deaccession!(reason = nil) delete_or_make_unavailable(reason || DEACCESSIONED) end @@ -216,37 +221,9 @@ raise IdentifierNotFound, e.message end def mint_identifier(*args) identifier_class.mint(*args) - end - - def update - if !assigned? - raise IdentifierNotAssigned, - "Cannot update identifier for repository object \"#{repo_object.id}\"; not assigned." - end - set_status! - end - - def assign(id = nil) - if assigned? - raise AlreadyAssigned, - "Repository object \"#{repo_object.id}\" has already been assigned permanent id \"#{repo_object.permanent_id}\"." - end - @identifier = case id - when identifier_class - id - when String - find_identifier(id) - when nil - mint_identifier - end - repo_object.reload - repo_object.permanent_id = identifier.id - repo_object.permanent_url = PERMANENT_URL_BASE + identifier.id - repo_object.save! - set_metadata! end def delete_or_make_unavailable(reason) if repo_id && identifier_repo_id && ( identifier_repo_id != repo_id ) raise Error, "Identifier \"#{identifier_id}\" is assigned to a different repository object \"#{repo_id}\"."