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}\"."