Sha256: 15c89d30caefd281d7ef4884a9a45e8def11f7d0098800a70bdac3a5f1c42216
Contents?: true
Size: 1.77 KB
Versions: 21
Compression:
Stored size: 1.77 KB
Contents
module Klastera::Concerns::Transfer extend ActiveSupport::Concern included do include ActiveModel::Model include ActiveModel::Validations::Callbacks attr_accessor :current_cluster, :new_cluster_id validates :current_cluster, presence: true validates :new_cluster_id, presence: true, if: proc { self.required_transfer? } validate do new_cluster = ::Cluster.find(self.new_cluster_id.to_i) rescue nil if current_cluster.class.name != 'Cluster' || current_cluster.try(:is_the_last_record_in_required_suborganization_mode?) errors.add(:current_cluster, I18n.t('klastera.messages.current_cluster.cant_transfer')) elsif self.required_transfer? && new_cluster_id.present? && new_cluster.nil? errors.add(:new_cluster_id, I18n.t('klastera.messages.new_cluster_id.nil')) elsif current_cluster.id == new_cluster.try(:id) errors.add(:new_cluster_id, I18n.t('klastera.messages.new_cluster_id.same')) elsif new_cluster.present? && current_cluster.organization_id != new_cluster.organization_id # Clusters from another organization do not exist errors.add(:new_cluster_id, I18n.t('klastera.messages.new_cluster_id.nil')) end end def required_transfer? self.current_cluster.required_transfer? && self.current_cluster.has_related_entities_using_it? end ## # A returned boolean is expected. It should always be true even nothing is # transfered, and it only will return false if creation fails. # def apply! Klastera::ClusterEntity.create(current_cluster.cluster_entities.map{ |relation| next if self.new_cluster_id.blank? { cluster_id: self.new_cluster_id, entity_id: relation.entity_id, entity_type: relation.entity_type } }.compact) end end end
Version data entries
21 entries across 21 versions & 1 rubygems