lib/hyrax/transactions/steps/save.rb in hyrax-4.0.0 vs lib/hyrax/transactions/steps/save.rb in hyrax-5.0.0.rc1
- old
+ new
@@ -27,14 +27,19 @@
# @param [::User, nil] user
#
# @return [Dry::Monads::Result] `Success(work)` if the change_set is
# applied and the resource is saved;
# `Failure([#to_s, change_set.resource])`, otherwise.
+ # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
def call(change_set, user: nil)
begin
+ valid_future_date?(change_set.lease, 'lease_expiration_date') if change_set.respond_to?(:lease) && change_set.lease
+ valid_future_date?(change_set.embargo, 'embargo_release_date') if change_set.respond_to?(:embargo) && change_set.embargo
new_collections = changed_collection_membership(change_set)
+
unsaved = change_set.sync
+ save_lease_or_embargo(unsaved)
saved = @persister.save(resource: unsaved)
rescue StandardError => err
return Failure(["Failed save on #{change_set}\n\t#{err.message}", change_set.resource])
end
@@ -46,11 +51,27 @@
user ||= ::User.find_by_user_key(saved.depositor)
publish_changes(resource: saved, user: user, new: unsaved.new_record, new_collections: new_collections)
Success(saved)
end
+ # rubocop:enable Metrics/MethodLength, Metrics/AbcSize
private
+
+ def valid_future_date?(item, attribute)
+ raise StandardError, "#{item.model} must use a future date" if item.fields[attribute] < Time.zone.now
+ end
+
+ def save_lease_or_embargo(unsaved)
+ if unsaved.embargo.present?
+ unsaved.embargo.embargo_release_date = unsaved.embargo.embargo_release_date&.to_datetime
+ unsaved.embargo = @persister.save(resource: unsaved.embargo)
+ end
+ return if unsaved.lease.blank?
+
+ unsaved.lease.lease_expiration_date = unsaved.lease.lease_expiration_date&.to_datetime
+ unsaved.lease = @persister.save(resource: unsaved.lease)
+ end
##
# @param [Hyrax::ChangeSet] change_set
#
# @return [Array<Valkyrie::ID>]