]> source.dussan.org Git - redmine.git/commitdiff
Replace the hardcoded CustomField::FIELD_FORMATS with a class.
authorEric Davis <edavis@littlestreamsoftware.com>
Fri, 16 Apr 2010 15:33:49 +0000 (15:33 +0000)
committerEric Davis <edavis@littlestreamsoftware.com>
Fri, 16 Apr 2010 15:33:49 +0000 (15:33 +0000)
Custom Field Formats are now full objects and can be registered with
Redmine::CustomFieldFormat to add new formats.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3672 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/helpers/custom_fields_helper.rb
app/models/custom_field.rb
app/views/custom_fields/_index.rhtml
lib/redmine.rb
lib/redmine/custom_field_format.rb [new file with mode: 0644]

index 40a4c785512235f48fb98cb8d978d13c1ea2683d..f3fcc1fc586dd3a5fbad1afc80a36a139aaf82c1 100644 (file)
@@ -108,6 +108,6 @@ module CustomFieldsHelper
 
   # Return an array of custom field formats which can be used in select_tag
   def custom_field_formats_for_select
-    CustomField::FIELD_FORMATS.sort {|a,b| a[1][:order]<=>b[1][:order]}.collect { |k| [ l(k[1][:name]), k[0] ] }
+    Redmine::CustomFieldFormat.as_select
   end
 end
index c7031afeae07eb77167bf1a712bfc36f5058fb96..7cc6e865d71cbc3db2ea1330788431a6a7d2efb8 100644 (file)
@@ -20,20 +20,11 @@ class CustomField < ActiveRecord::Base
   acts_as_list :scope => 'type = \'#{self.class}\''
   serialize :possible_values
   
-  FIELD_FORMATS = { "string" => { :name => :label_string, :order => 1 },
-                    "text" => { :name => :label_text, :order => 2 },
-                    "int" => { :name => :label_integer, :order => 3 },
-                    "float" => { :name => :label_float, :order => 4 },
-                    "list" => { :name => :label_list, :order => 5 },
-                               "date" => { :name => :label_date, :order => 6 },
-                               "bool" => { :name => :label_boolean, :order => 7 }
-  }.freeze
-
   validates_presence_of :name, :field_format
   validates_uniqueness_of :name, :scope => :type
   validates_length_of :name, :maximum => 30
   validates_format_of :name, :with => /^[\w\s\.\'\-]*$/i
-  validates_inclusion_of :field_format, :in => FIELD_FORMATS.keys
+  validates_inclusion_of :field_format, :in => Redmine::CustomFieldFormat.available_formats
 
   def initialize(attributes = nil)
     super
index 8ef7dcba29087dedccb96c4e388bd7e17f6f993c..21ae01beff344486f1d0f861cde5105124295150 100644 (file)
@@ -14,7 +14,7 @@
        <% (@custom_fields_by_type[tab[:name]] || []).sort.each do |custom_field| -%>
                <tr class="<%= cycle("odd", "even") %>">
                        <td><%= link_to custom_field.name, :action => 'edit', :id => custom_field %></td>
-                       <td align="center"><%= l(CustomField::FIELD_FORMATS[custom_field.field_format][:name]) %></td>
+                       <td align="center"><%= l(Redmine::CustomFieldFormat.label_for(custom_field.field_format)) %></td>
                        <td align="center"><%= checked_image custom_field.is_required? %></td>
                        <% if tab[:name] == 'IssueCustomField' %>
                        <td align="center"><%= checked_image custom_field.is_for_all? %></td>
index df57b08dc48827be8902c2647941560e6ba2cdde..f510d5d11f97d94756b2afaab43c92d61a5780fc 100644 (file)
@@ -2,6 +2,7 @@ require 'redmine/access_control'
 require 'redmine/menu_manager'
 require 'redmine/activity'
 require 'redmine/search'
+require 'redmine/custom_field_format'
 require 'redmine/mime_type'
 require 'redmine/core_ext'
 require 'redmine/themes'
@@ -31,6 +32,16 @@ Redmine::Scm::Base.add "Bazaar"
 Redmine::Scm::Base.add "Git"
 Redmine::Scm::Base.add "Filesystem"
 
+Redmine::CustomFieldFormat.map do |fields|
+  fields.register Redmine::CustomFieldFormat.new('string', :label => :label_string, :order => 1)
+  fields.register Redmine::CustomFieldFormat.new('text', :label => :label_text, :order => 2)
+  fields.register Redmine::CustomFieldFormat.new('int', :label => :label_integer, :order => 3)
+  fields.register Redmine::CustomFieldFormat.new('float', :label => :label_float, :order => 4)
+  fields.register Redmine::CustomFieldFormat.new('list', :label => :label_list, :order => 5)
+  fields.register Redmine::CustomFieldFormat.new('date', :label => :label_date, :order => 6)
+  fields.register Redmine::CustomFieldFormat.new('bool', :label => :label_boolean, :order => 7)
+end
+
 # Permissions
 Redmine::AccessControl.map do |map|
   map.permission :view_project, {:projects => [:show, :activity]}, :public => true
diff --git a/lib/redmine/custom_field_format.rb b/lib/redmine/custom_field_format.rb
new file mode 100644 (file)
index 0000000..6d42dfb
--- /dev/null
@@ -0,0 +1,66 @@
+# Redmine - project management software
+# Copyright (C) 2006-2009  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.
+
+module Redmine
+  class CustomFieldFormat
+    include Redmine::I18n
+
+    cattr_accessor :available
+    @@available = {}
+
+    attr_accessor :name, :order, :label
+
+    def initialize(name, options={})
+      self.name = name
+      self.label = options[:label]
+      self.order = options[:order]
+    end
+
+    class << self
+      def map(&block)
+        yield self
+      end
+      
+      # Registers a custom field format
+      def register(custom_field_format, options={})
+        @@available[custom_field_format.name] = custom_field_format unless @@available.keys.include?(custom_field_format.name)
+      end
+
+      def available_formats
+        @@available.keys
+      end
+
+      def find_by_name(name)
+        @@available[name.to_s]
+      end
+
+      def label_for(name)
+        format = @@available[name.to_s]
+        format.label if format
+      end
+
+      # Return an array of custom field formats which can be used in select_tag
+      def as_select
+        @@available.values.sort {|a,b|
+          a.order <=> b.order
+        }.collect {|custom_field_format|
+          [ l(custom_field_format.label), custom_field_format.name ]
+        }
+      end
+    end
+  end 
+end