diff options
Diffstat (limited to 'app/models')
| -rw-r--r-- | app/models/chouette/vehicle_journey.rb | 16 | ||||
| -rw-r--r-- | app/models/concerns/custom_fields_support.rb | 19 | ||||
| -rw-r--r-- | app/models/custom_field.rb | 38 |
3 files changed, 58 insertions, 15 deletions
diff --git a/app/models/chouette/vehicle_journey.rb b/app/models/chouette/vehicle_journey.rb index 9b94f7f0e..c5a6901d7 100644 --- a/app/models/chouette/vehicle_journey.rb +++ b/app/models/chouette/vehicle_journey.rb @@ -3,6 +3,7 @@ module Chouette class VehicleJourney < Chouette::TridentActiveRecord has_paper_trail include ChecksumSupport + include CustomFieldsSupport include VehicleJourneyRestrictions include ObjectidSupport include StifTransportModeEnumerations @@ -340,21 +341,6 @@ module Chouette end end - def self.custom_fields - CustomField.where(resource_type: self.name.split("::").last) - end - - - def custom_fields - Hash[*self.class.custom_fields.map do |v| - [v.code, v.slice(:code, :name, :field_type, :options).update(value: custom_field_value(v.code))] - end.flatten] - end - - def custom_field_value key - (custom_field_values || {})[key.to_s] - end - def self.matrix(vehicle_journeys) Hash[*VehicleJourneyAtStop.where(vehicle_journey_id: vehicle_journeys.pluck(:id)).map do |vjas| [ "#{vjas.vehicle_journey_id}-#{vjas.stop_point_id}", vjas] diff --git a/app/models/concerns/custom_fields_support.rb b/app/models/concerns/custom_fields_support.rb new file mode 100644 index 000000000..e8ecfcb7c --- /dev/null +++ b/app/models/concerns/custom_fields_support.rb @@ -0,0 +1,19 @@ +module CustomFieldsSupport + extend ActiveSupport::Concern + + included do + def self.custom_fields + CustomField.where(resource_type: self.name.split("::").last) + end + + def custom_fields + HashWithIndifferentAccess[*self.class.custom_fields.map do |v| + [v.code, CustomField::Value.new(v, custom_field_value(v.code))] + end.flatten] + end + + def custom_field_value key + (custom_field_values || {})[key.to_s] + end + end +end 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 |
