diff --git a/app/models/metadata_date.rb b/app/models/metadata_date.rb index 9e655d4c..5a96871a 100644 --- a/app/models/metadata_date.rb +++ b/app/models/metadata_date.rb @@ -1,8 +1,30 @@ # frozen_string_literal: true class MetadataDate < MetadataTemplate + # La fecha de hoy si no hay nada. Podemos traer un valor por defecto + # desde el esquema, siempre y cuando pueda considerarse una fecha + # válida. + # + # @return [Date,nil] def default_value - Date.today + if (dv = super.presence) + begin + Date.parse(dv) + # XXX: Notificar para que sepamos que el esquema no es válido. + # TODO: Validar el valor por defecto en sutty-schema-validator. + rescue Date::Error => e + ExceptionNotifier.notify_exception(e, data: { site: site.name, post: post.id, name:, type: }) + nil + end + end + end + + # Delegar el formato al valor, para uso dentro de date_field() + # + # @param format [String] + # @return [String,nil] + def strftime(format) + value&.strftime(format) end # Devuelve una fecha, si no hay ninguna es la fecha de hoy. diff --git a/app/views/posts/attribute_ro/_date.haml b/app/views/posts/attribute_ro/_date.haml index cf8ea8ac..25ba9430 100644 --- a/app/views/posts/attribute_ro/_date.haml +++ b/app/views/posts/attribute_ro/_date.haml @@ -1,3 +1,5 @@ %tr{ id: attribute } %th= post_label_t(attribute, post: post) - %td{ dir: dir, lang: locale }= l metadata.value.to_date + %td{ dir: dir, lang: locale } + - if metadata.value + = l metadata.value diff --git a/app/views/posts/attributes/_date.haml b/app/views/posts/attributes/_date.haml index 1347c59c..f875c53e 100644 --- a/app/views/posts/attributes/_date.haml +++ b/app/views/posts/attributes/_date.haml @@ -1,6 +1,6 @@ .form-group = label_tag "#{base}_#{attribute}", post_label_t(attribute, post: post) - = date_field base, attribute, value: metadata.value.to_date.strftime('%F'), + = date_field base, attribute, value: metadata.value&.strftime('%F'), **field_options(attribute, metadata), pattern: '\d{4}-\d{2}-\d{2}', data: { 'pattern-mismatch': t('metadata.date.invalid_format') } = render 'posts/attribute_feedback',