validar el sitio antes de subir una imagen

si `Site` no es válido (por ejemplo la `description` es muy corta), no se
pueden guardar los archivos estáticos asociados, porque
`ActiveStorage::Attached` solo se copia al disco cuando se guardan a
través de `Site#static_files`.

el error que se producía es que `MetadataFile` no puede vincular el
archivo porque todavía no fue copiado al disco.

este cambio have que `MetadataFile` no valide cuando `Site` no valida.

queda un error pendiente en `Site::StaticFileMigration` con una
situación similar.  para eso necesitamos identificar el momento en que
el archivo se "sube" al disco, es decir se copia el `IO` al directorio,
a través de `ActiveStorage::Service::DiskService#upload`.

fixes #1197
fixes #1196
fixes #1195
fixes #1194
fixes #1193
fixes #1192
This commit is contained in:
f 2021-04-24 19:55:15 -03:00
parent 9ae9450875
commit 2fbbb212ad
3 changed files with 5 additions and 0 deletions

View file

@ -16,6 +16,7 @@ class MetadataFile < MetadataTemplate
def validate
super
errors << I18n.t("metadata.#{type}.site_invalid") if site.invalid?
errors << I18n.t("metadata.#{type}.path_required") if path_missing?
errors << I18n.t("metadata.#{type}.no_file_for_description") if no_file_for_description?

View file

@ -34,10 +34,12 @@ en:
metadata:
cant_be_empty: 'This field cannot be empty'
image:
site_invalid: 'The image cannot be stored if the site configuration is not valid'
not_an_image: 'Not an image'
path_required: 'Missing image for upload'
no_file_for_description: "There's a description with no associated image"
file:
site_invalid: 'The file cannot be stored if the site configuration is not valid'
path_required: "Missing file for upload"
no_file_for_description: "There's a description with no associated file"
event:

View file

@ -34,10 +34,12 @@ es:
metadata:
cant_be_empty: 'El campo no puede estar vacío'
image:
site_invalid: 'La imagen no se puede almacenar si la configuración del sitio no es válida'
not_an_image: 'No es una imagen'
path_required: 'Se necesita una imagen'
no_file_for_description: 'Se envió una descripción sin imagen asociada'
file:
site_invalid: 'El archivo no se puede almacenar si la configuración del sitio no es válida'
path_required: 'Se necesita un archivo'
no_file_for_description: 'se envió una descripción sin archivo asociado'
event: