Sha256: 98e2ff63ddf6873cf55092aab08d229dc090c32b917b655087240c57b3e91d1a

Contents?: true

Size: 2 KB

Versions: 19

Compression:

Stored size: 2 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
      where( Card.where( :id=>arel_table[:referee_id]).exists.not ).update_all :referee_id=>nil
    end
    
    def repair_all
      connection.execute 'truncate card_references'
      Card.update_all :references_expired => 1

      expired_cards_remain = true
      batchsize, count_updated = 100, 0

      while expired_cards_remain
        batch = Card.find_all_by_references_expired(1, :order=>"name ASC", :limit=>batchsize)
        if batch.empty?
          expired_cards_remain = false
        else
          Rails.logger.debug "Updating references for '#{batch.first.name}' to '#{batch.last.name}' ... "; $stdout.flush        
          batch.each do |card|
            count_updated += 1
            card.update_references
          end
          Rails.logger.info "batch done.  \t\t#{count_updated} total updated"
        end
      end
      
    end
    
  end

end

Version data entries

19 entries across 19 versions & 1 rubygems

Version Path
wagn-1.14.4 lib/card/reference.rb
wagn-1.14.3 lib/card/reference.rb
wagn-1.14.2 lib/card/reference.rb
wagn-1.14.1 lib/card/reference.rb
wagn-1.14.0 lib/card/reference.rb
wagn-1.14.0.pre3 lib/card/reference.rb
wagn-1.14.0.pre2 lib/card/reference.rb
wagn-1.14.0.pre1 lib/card/reference.rb
wagn-1.13.0 lib/card/reference.rb
wagn-1.13.0.pre2 lib/card/reference.rb
wagn-1.13.0.pre1 lib/card/reference.rb
wagn-1.13.0.pre lib/card/reference.rb
wagn-1.12.13 lib/card/reference.rb
wagn-1.12.12 lib/card/reference.rb
wagn-1.12.11 lib/card/reference.rb
wagn-1.12.10 lib/card/reference.rb
wagn-1.12.9 app/models/card/reference.rb
wagn-1.12.8 app/models/card/reference.rb
wagn-1.12.7 app/models/card/reference.rb