##// END OF EJS Templates
Safer assertion....
Safer assertion. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4598 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r3126:8db9ecef08ee
r4478:92d34234b01f
Show More
enumeration.rb
134 lines | 3.8 KiB | text/x-ruby | RubyLexer
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 # redMine - project management software
# Copyright (C) 2006 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class Enumeration < ActiveRecord::Base
Jean-Philippe Lang
Changes misleading scopes on Enumeration....
r2969 default_scope :order => "#{Enumeration.table_name}.position ASC"
Eric Davis
Added project specific Enumeration overrides....
r2833 belongs_to :project
Eric Davis
Changed Enumerations to use a Single Table Inheritance...
r2677 acts_as_list :scope => 'type = \'#{type}\''
Eric Davis
Enumerations can now have custom fields defined on them. #4077...
r2831 acts_as_customizable
Eric Davis
Added project specific Enumeration overrides....
r2833 acts_as_tree :order => 'position ASC'
Jean-Philippe Lang
Added position on Enumeration model....
r789
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 before_destroy :check_integrity
Eric Davis
Changed Enumerations to use a Single Table Inheritance...
r2677 validates_presence_of :name
Eric Davis
Added a Activities tab to Project Settings...
r2835 validates_uniqueness_of :name, :scope => [:type, :project_id]
Jean-Philippe Lang
Added several validates_length_of...
r590 validates_length_of :name, :maximum => 30
Jean-Philippe Lang
Added position on Enumeration model....
r789
Jean-Philippe Lang
Changes misleading scopes on Enumeration....
r2969 named_scope :shared, :conditions => { :project_id => nil }
named_scope :active, :conditions => { :active => true }
Eric Davis
Added an active field track if an Enumeration is active on the frontend view....
r2832
Eric Davis
Changed Enumerations to use a Single Table Inheritance...
r2677 def self.default
# Creates a fake default scope so Enumeration.default will check
# it's type. STI subclasses will automatically add their own
# types to the finder.
if self.descends_from_active_record?
find(:first, :conditions => { :is_default => true, :type => 'Enumeration' })
else
# STI classes are
find(:first, :conditions => { :is_default => true })
end
end
# Overloaded on concrete classes
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 def option_name
Eric Davis
Changed Enumerations to use a Single Table Inheritance...
r2677 nil
end
Jean-Philippe Lang
Added default value for enumerations....
r792
def before_save
Jean-Philippe Lang
Fixed: default flag removed when editing a default enumeration (#2327)....
r2121 if is_default? && is_default_changed?
Eric Davis
Changed Enumerations to use a Single Table Inheritance...
r2677 Enumeration.update_all("is_default = #{connection.quoted_false}", {:type => type})
Jean-Philippe Lang
Fixed: default flag removed when editing a default enumeration (#2327)....
r2121 end
Jean-Philippe Lang
Added default value for enumerations....
r792 end
Jean-Philippe Lang
Added position on Enumeration model....
r789
Eric Davis
Changed Enumerations to use a Single Table Inheritance...
r2677 # Overloaded on concrete classes
Jean-Philippe Lang
Ability to remove enumerations (activities, priorities, document categories) that are in use. Associated objects can be reassigned to another value (#1467)....
r1544 def objects_count
Eric Davis
Changed Enumerations to use a Single Table Inheritance...
r2677 0
Jean-Philippe Lang
Ability to remove enumerations (activities, priorities, document categories) that are in use. Associated objects can be reassigned to another value (#1467)....
r1544 end
def in_use?
self.objects_count != 0
end
Eric Davis
Added project specific Enumeration overrides....
r2833
# Is this enumeration overiding a system level enumeration?
def is_override?
!self.parent.nil?
end
Jean-Philippe Lang
Ability to remove enumerations (activities, priorities, document categories) that are in use. Associated objects can be reassigned to another value (#1467)....
r1544
alias :destroy_without_reassign :destroy
# Destroy the enumeration
# If a enumeration is specified, objects are reassigned
def destroy(reassign_to = nil)
if reassign_to && reassign_to.is_a?(Enumeration)
Eric Davis
Changed Enumerations to use a Single Table Inheritance...
r2677 self.transfer_relations(reassign_to)
Jean-Philippe Lang
Ability to remove enumerations (activities, priorities, document categories) that are in use. Associated objects can be reassigned to another value (#1467)....
r1544 end
destroy_without_reassign
end
Jean-Philippe Lang
Added radio buttons on the documents list to sort documents by category, date, title or author....
r866 def <=>(enumeration)
position <=> enumeration.position
end
Jean-Philippe Lang
Added the ability to customize columns of a saved query....
r771 def to_s; name end
Eric Davis
Changed Enumerations to use a Single Table Inheritance...
r2677
# Returns the Subclasses of Enumeration. Each Subclass needs to be
# required in development mode.
#
# Note: subclasses is protected in ActiveRecord
def self.get_subclasses
@@subclasses[Enumeration]
end
Eric Davis
Added a Activities tab to Project Settings...
r2835
# Does the +new+ Hash override the previous Enumeration?
def self.overridding_change?(new, previous)
if (same_active_state?(new['active'], previous.active)) && same_custom_values?(new,previous)
return false
else
return true
end
end
# Does the +new+ Hash have the same custom values as the previous Enumeration?
def self.same_custom_values?(new, previous)
previous.custom_field_values.each do |custom_value|
if custom_value.value != new["custom_field_values"][custom_value.custom_field_id.to_s]
return false
end
end
return true
end
# Are the new and previous fields equal?
def self.same_active_state?(new, previous)
new = (new == "1" ? true : false)
return new == previous
end
Jean-Philippe Lang
Added the ability to customize columns of a saved query....
r771
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 private
def check_integrity
Jean-Philippe Lang
Ability to remove enumerations (activities, priorities, document categories) that are in use. Associated objects can be reassigned to another value (#1467)....
r1544 raise "Can't delete enumeration" if self.in_use?
Jean-Philippe Lang
Initial commit...
r2 end
Eric Davis
Changed Enumerations to use a Single Table Inheritance...
r2677
Jean-Philippe Lang
Initial commit...
r2 end
Eric Davis
Changed Enumerations to use a Single Table Inheritance...
r2677
# Force load the subclasses in development mode
require_dependency 'time_entry_activity'
require_dependency 'document_category'
require_dependency 'issue_priority'