diff options
| author | Zog | 2018-01-12 09:53:38 +0100 |
|---|---|---|
| committer | Zog | 2018-02-26 10:00:34 +0100 |
| commit | 9af498376d51dbd505cf6d276a02e7bfb24e9aa5 (patch) | |
| tree | a1ba49f6d708ef6a00e4dc91e21f3e973a949c85 /app/models/custom_field.rb | |
| parent | 206bf218e1b84dbe53683ec2e3f983cd30f7ded1 (diff) | |
| download | chouette-core-9af498376d51dbd505cf6d276a02e7bfb24e9aa5.tar.bz2 | |
Propose some improvements on CustomFields
Diffstat (limited to 'app/models/custom_field.rb')
| -rw-r--r-- | app/models/custom_field.rb | 38 |
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 |
