aboutsummaryrefslogtreecommitdiffstats
path: root/app/models/custom_field.rb
diff options
context:
space:
mode:
authorZog2018-01-12 09:53:38 +0100
committerZog2018-02-26 10:00:34 +0100
commit9af498376d51dbd505cf6d276a02e7bfb24e9aa5 (patch)
treea1ba49f6d708ef6a00e4dc91e21f3e973a949c85 /app/models/custom_field.rb
parent206bf218e1b84dbe53683ec2e3f983cd30f7ded1 (diff)
downloadchouette-core-9af498376d51dbd505cf6d276a02e7bfb24e9aa5.tar.bz2
Propose some improvements on CustomFields
Diffstat (limited to 'app/models/custom_field.rb')
-rw-r--r--app/models/custom_field.rb38
1 files changed, 38 insertions, 0 deletions
diff --git a/app/models/custom_field.rb b/app/models/custom_field.rb
index 774c8b0f6..2572d5c80 100644
--- a/app/models/custom_field.rb
+++ b/app/models/custom_field.rb
@@ -6,4 +6,42 @@ class CustomField < ActiveRecord::Base
validates :name, uniqueness: {scope: [:resource_type, :workgroup_id]}
validates :code, uniqueness: {scope: [:resource_type, :workgroup_id], case_sensitive: false}
+
+ class Value
+ def self.new custom_field, value
+ field_type = custom_field.options["field_type"]
+ klass_name = field_type && "CustomField::Value::#{field_type.classify}"
+ klass = klass_name && const_defined?(klass_name) ? klass_name.constantize : CustomField::Value::Base
+ klass.new custom_field, value
+ end
+
+ class Base
+ def initialize custom_field, value
+ @custom_field = custom_field
+ @raw_value = value
+ end
+
+ %i(code name field_type options).each do |attr|
+ define_method attr do
+ @custom_field.send(attr)
+ end
+ end
+
+ def value
+ @raw_value
+ end
+ end
+
+ class Integer < Base
+ def value
+ @raw_value.to_i
+ end
+ end
+
+ class String < Base
+ def value
+ "#{@raw_value}"
+ end
+ end
+ end
end