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'