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>]