module Scrivito # Adds support for string columns which contain ISO dates module DateAttribute def self.deserialize_from_backend(iso_date_time) return nil unless iso_date_time if iso_date_time.to_s =~ /^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/ Time.utc($1.to_i, $2.to_i, $3.to_i, $4.to_i, $5.to_i, $6.to_i).in_time_zone else raise "The value is not a valid ISO date time: #{iso_date_time.inspect}" end end def self.deserialize_from_client(iso8601_date_time) return unless iso8601_date_time DateTime.iso8601(iso8601_date_time).in_time_zone rescue ArgumentError raise "The value is not a valid ISO 8601 date time: #{iso8601_date_time.inspect}" end def self.serialize_for_backend(attribute_value) attribute_value = case attribute_value when Date then attribute_value.to_time when Time then attribute_value.to_time.utc end attribute_value.strftime('%Y%m%d%H%M%S') if attribute_value end def self.serialize_for_client(attribute_value) attribute_value.utc.iso8601 end end end