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

Version Path
klastera-1.5.4 app/models/klastera/concerns/transfer.rb
klastera-1.5.2.4 app/models/klastera/concerns/transfer.rb
klastera-1.4.4.5 app/models/klastera/concerns/transfer.rb
klastera-1.5.1.0 app/models/klastera/concerns/transfer.rb
klastera-1.5 app/models/klastera/concerns/transfer.rb
klastera-1.4.4.3.1 app/models/klastera/concerns/transfer.rb
klastera-1.4.4.4 app/models/klastera/concerns/transfer.rb
klastera-1.4.4.3 app/models/klastera/concerns/transfer.rb
klastera-1.4.4.2 app/models/klastera/concerns/transfer.rb
klastera-1.4.4.1 app/models/klastera/concerns/transfer.rb
klastera-1.4.4 app/models/klastera/concerns/transfer.rb
klastera-1.4.3 app/models/klastera/concerns/transfer.rb
klastera-1.4.2 app/models/klastera/concerns/transfer.rb
klastera-1.4.1 app/models/klastera/concerns/transfer.rb
klastera-1.4.0.3 app/models/klastera/concerns/transfer.rb
klastera-1.4.0.2 app/models/klastera/concerns/transfer.rb
klastera-1.4.0.1 app/models/klastera/concerns/transfer.rb
klastera-1.4 app/models/klastera/concerns/transfer.rb
klastera-1.3.3.1 app/models/klastera/concerns/transfer.rb
klastera-1.3.2 app/models/klastera/concerns/transfer.rb