Sha256: c617f78e49d24ce34bfaac380bfec10c047b9b18703724add30092beb3ddeaf7

Contents?: true

Size: 1.7 KB

Versions: 9

Compression:

Stored size: 1.7 KB

Contents

# -*- encoding : utf-8 -*-

class Card::Reference < ActiveRecord::Base
  def referencer
    Card[referer_id]
  end

  def referencee
    Card[referee_id]
  end

  class << self

    def delete_all_from card
      delete_all referer_id: card.id
    end

    def delete_all_to card
      where( referee_id: card.id ).update_all present: 0, referee_id: nil
    end

    def update_existing_key card, name=nil
      key = (name || card.name).to_name.key
      where( referee_key: key ).update_all present: 1, referee_id: card.id
    end

    def update_on_rename card, newname, update_referers=false
      if update_referers
        # not currentlt needed because references are deleted and re-created in the process of adding new revision
        #where( referee_id: card.id ).update_all referee_key: newname.to_name.key
      else
        delete_all_to card
      end
      #Rails.logger.warn "update on rename #{card.inspect}, #{newname}, #{update_referers}"
      update_existing_key card, newname
    end

    def update_on_delete card
      delete_all_from card
      delete_all_to card
    end

    def repair_missing_referees
      joins('LEFT JOIN cards ON card_references.referee_id = cards.id').where('(cards.id IS NULL OR cards.trash IS TRUE) AND referee_id IS NOT NULL').update_all referee_id: nil
    end

    def delete_missing_referers
      joins('LEFT JOIN cards ON card_references.referer_id = cards.id').where('cards.id IS NULL OR cards.trash IS TRUE').delete_all
    end

    def repair_all
      delete_missing_referers

      Card.where(trash: false).find_each do |card|
        Rails.logger.info "\nRepairing references for '#{card.name}' (id: #{card.id}) ... "
        card.update_references
      end
    end

  end

end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
card-1.16.15 lib/card/reference.rb
card-1.16.14 lib/card/reference.rb
card-1.16.13 lib/card/reference.rb
card-1.16.12 lib/card/reference.rb
card-1.16.11 lib/card/reference.rb
card-1.16.10 lib/card/reference.rb
card-1.16.9 lib/card/reference.rb
card-1.16.8 lib/card/reference.rb
card-1.16.7 lib/card/reference.rb