diff app/models/custom_value.rb @ 909:cbb26bc654de redmine-1.3

Update to Redmine 1.3-stable branch (Redmine SVN rev 8964)
author Chris Cannam
date Fri, 24 Feb 2012 19:09:32 +0000
parents 94944d00e43c
children 433d4f72a19b
line wrap: on
line diff
--- a/app/models/custom_value.rb	Fri Feb 24 18:36:29 2012 +0000
+++ b/app/models/custom_value.rb	Fri Feb 24 19:09:32 2012 +0000
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  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.
@@ -19,42 +19,44 @@
   belongs_to :custom_field
   belongs_to :customized, :polymorphic => true
 
+  validate :validate_custom_value
+
   def after_initialize
     if new_record? && custom_field && (customized_type.blank? || (customized && customized.new_record?))
       self.value ||= custom_field.default_value
     end
   end
-  
+
   # Returns true if the boolean custom value is true
   def true?
     self.value == '1'
   end
-  
+
   def editable?
     custom_field.editable?
   end
-  
+
   def visible?
     custom_field.visible?
   end
-  
+
   def required?
     custom_field.is_required?
   end
-  
+
   def to_s
     value.to_s
   end
-  
+
 protected
-  def validate
+  def validate_custom_value
     if value.blank?
-      errors.add(:value, :blank) if custom_field.is_required? and value.blank?    
+      errors.add(:value, :blank) if custom_field.is_required? and value.blank?
     else
       errors.add(:value, :invalid) unless custom_field.regexp.blank? or value =~ Regexp.new(custom_field.regexp)
       errors.add(:value, :too_short, :count => custom_field.min_length) if custom_field.min_length > 0 and value.length < custom_field.min_length
       errors.add(:value, :too_long, :count => custom_field.max_length) if custom_field.max_length > 0 and value.length > custom_field.max_length
-    
+
       # Format specific validations
       case custom_field.field_format
       when 'int'
@@ -62,7 +64,7 @@
       when 'float'
         begin; Kernel.Float(value); rescue; errors.add(:value, :invalid) end
       when 'date'
-        errors.add(:value, :not_a_date) unless value =~ /^\d{4}-\d{2}-\d{2}$/
+        errors.add(:value, :not_a_date) unless value =~ /^\d{4}-\d{2}-\d{2}$/ && begin; value.to_date; rescue; false end
       when 'list'
         errors.add(:value, :inclusion) unless custom_field.possible_values.include?(value)
       end