destroying.rb revision 246c94208917051fd0f0d22dce3c80ef60fb94e2
fdc557286bc9f92c5f3bb49096ff6e2bcec0ea79Timo Sirainenmodule Repository::Destroying
fdc557286bc9f92c5f3bb49096ff6e2bcec0ea79Timo Sirainen extend ActiveSupport::Concern
fdc557286bc9f92c5f3bb49096ff6e2bcec0ea79Timo Sirainen
fdc557286bc9f92c5f3bb49096ff6e2bcec0ea79Timo Sirainen included do
fdc557286bc9f92c5f3bb49096ff6e2bcec0ea79Timo Sirainen scope :destroying, ->() { unscoped.where(is_destroying: true) }
fdc557286bc9f92c5f3bb49096ff6e2bcec0ea79Timo Sirainen scope :active, ->() { where(is_destroying: false) }
fdc557286bc9f92c5f3bb49096ff6e2bcec0ea79Timo Sirainen default_scope ->() { active }
fdc557286bc9f92c5f3bb49096ff6e2bcec0ea79Timo Sirainen end
fdc557286bc9f92c5f3bb49096ff6e2bcec0ea79Timo Sirainen
fdc557286bc9f92c5f3bb49096ff6e2bcec0ea79Timo Sirainen # Only use `destroy_asynchronously` if you want to destroy a repository.
fdc557286bc9f92c5f3bb49096ff6e2bcec0ea79Timo Sirainen # It prepares the deletion by setting a flag, which enables the deletion
fdc557286bc9f92c5f3bb49096ff6e2bcec0ea79Timo Sirainen # of its ontologies.
fdc557286bc9f92c5f3bb49096ff6e2bcec0ea79Timo Sirainen def destroy
d5cebe7f98e63d4e2822863ef2faa4971e8b3a5dTimo Sirainen Rails.logger.info("Destroy #{self.class} #{self} (id: #{id})")
fdc557286bc9f92c5f3bb49096ff6e2bcec0ea79Timo Sirainen super
d5cebe7f98e63d4e2822863ef2faa4971e8b3a5dTimo Sirainen rescue StandardError => e
fdc557286bc9f92c5f3bb49096ff6e2bcec0ea79Timo Sirainen self.is_destroying = false
d5cebe7f98e63d4e2822863ef2faa4971e8b3a5dTimo Sirainen save!
d5cebe7f98e63d4e2822863ef2faa4971e8b3a5dTimo Sirainen raise e.class,
fdc557286bc9f92c5f3bb49096ff6e2bcec0ea79Timo Sirainen I18n.t('repository.delete_error', oms: Settings.OMS.with_indefinite_article),
fdc557286bc9f92c5f3bb49096ff6e2bcec0ea79Timo Sirainen cause: e
73b50eecfc31750a312e2f940023f522eb07178cTimo Sirainen end
fdc557286bc9f92c5f3bb49096ff6e2bcec0ea79Timo Sirainen
fdc557286bc9f92c5f3bb49096ff6e2bcec0ea79Timo Sirainen def destroy_asynchronously
fdc557286bc9f92c5f3bb49096ff6e2bcec0ea79Timo Sirainen unless can_be_deleted?
73b50eecfc31750a312e2f940023f522eb07178cTimo Sirainen raise Repository::DeleteError, I18n.t('repository.delete_error')
fdc557286bc9f92c5f3bb49096ff6e2bcec0ea79Timo Sirainen end
fdc557286bc9f92c5f3bb49096ff6e2bcec0ea79Timo Sirainen Rails.logger.info("Mark #{self.class} #{self} (id: #{id}) as is_destroying")
73b50eecfc31750a312e2f940023f522eb07178cTimo Sirainen self.is_destroying = true
a12399903f415a7e14c2816cffa2f7a09dcbb097Timo Sirainen save!
a12399903f415a7e14c2816cffa2f7a09dcbb097Timo Sirainen async(:destroy)
a12399903f415a7e14c2816cffa2f7a09dcbb097Timo Sirainen end
a12399903f415a7e14c2816cffa2f7a09dcbb097Timo Sirainen
a12399903f415a7e14c2816cffa2f7a09dcbb097Timo Sirainen def can_be_deleted?
a12399903f415a7e14c2816cffa2f7a09dcbb097Timo Sirainen ontologies.all?(&:can_be_deleted_with_whole_repository?)
fdc557286bc9f92c5f3bb49096ff6e2bcec0ea79Timo Sirainen end
fdc557286bc9f92c5f3bb49096ff6e2bcec0ea79Timo Sirainenend
fdc557286bc9f92c5f3bb49096ff6e2bcec0ea79Timo Sirainen