summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/models/custom_field.rb2
-rw-r--r--lib/redmine/custom_field_format.rb7
-rw-r--r--test/unit/custom_field_test.rb14
3 files changed, 22 insertions, 1 deletions
diff --git a/app/models/custom_field.rb b/app/models/custom_field.rb
index 34b9fb53d..055516c38 100644
--- a/app/models/custom_field.rb
+++ b/app/models/custom_field.rb
@@ -26,7 +26,7 @@ class CustomField < ActiveRecord::Base
validates_presence_of :name, :field_format
validates_uniqueness_of :name, :scope => :type
validates_length_of :name, :maximum => 30
- validates_inclusion_of :field_format, :in => Redmine::CustomFieldFormat.available_formats
+ validates_inclusion_of :field_format, :in => Proc.new { Redmine::CustomFieldFormat.available_formats }
validate :validate_custom_field
before_validation :set_searchable
diff --git a/lib/redmine/custom_field_format.rb b/lib/redmine/custom_field_format.rb
index f7cd5d1c6..c539aee2e 100644
--- a/lib/redmine/custom_field_format.rb
+++ b/lib/redmine/custom_field_format.rb
@@ -70,6 +70,13 @@ module Redmine
@@available[custom_field_format.name] = custom_field_format unless @@available.keys.include?(custom_field_format.name)
end
+ def delete(format)
+ if format.is_a?(Redmine::CustomFieldFormat)
+ format = format.name
+ end
+ @@available.delete(format)
+ end
+
def available_formats
@@available.keys
end
diff --git a/test/unit/custom_field_test.rb b/test/unit/custom_field_test.rb
index 051853abc..b99fb4353 100644
--- a/test/unit/custom_field_test.rb
+++ b/test/unit/custom_field_test.rb
@@ -57,6 +57,20 @@ class CustomFieldTest < ActiveSupport::TestCase
assert field.valid?
end
+ def test_field_format_should_be_validated
+ field = CustomField.new(:name => 'Test', :field_format => 'foo')
+ assert !field.valid?
+ end
+
+ def test_field_format_validation_should_accept_formats_added_at_runtime
+ Redmine::CustomFieldFormat.register 'foobar'
+
+ field = CustomField.new(:name => 'Some Custom Field', :field_format => 'foobar')
+ assert field.valid?, 'field should be valid'
+ ensure
+ Redmine::CustomFieldFormat.delete 'foobar'
+ end
+
def test_should_not_change_field_format_of_existing_custom_field
field = CustomField.find(1)
field.field_format = 'int'