#-- # Copyright (C) 2007 Dimitrij Denissenko # Please read LICENSE document for more information. #++ module TicketPropertyGlobal def self.included(base) base.extend(ClassMethods) base.class_eval do has_many :tickets validates_presence_of :name validates_uniqueness_of :name include(InstanceMethods) end end module ClassMethods def default find_by_default_value(true) || find(:first) end def global? true end end module InstanceMethods # Refuse to "disable" the default_value! def default_value=(value) before = read_attribute(:default_value) result = write_attribute(:default_value, value) after = read_attribute(:default_value) if before and not after write_attribute(:default_value, true) else result end end protected def before_destroy return false if self.default_value? unless self.tickets.count.zero? default_id = self.class.default.id attribute = self.class.name.downcase + '_id' self.tickets.each do |ticket| ticket.update_attribute(attribute, default_id) end end true end def before_save self.class.update_all(['default_value = ?', false]) if self.default_value? end end end