From 66e37ca73684ea4c318ad31a655aba3846fd0610 Mon Sep 17 00:00:00 2001 From: f Date: Thu, 21 Jun 2018 14:33:45 -0300 Subject: [PATCH] obtener un front_matter limpio --- app/models/post.rb | 8 ++++---- app/models/post/template_field.rb | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/app/models/post.rb b/app/models/post.rb index 9707529..1253225 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -63,7 +63,6 @@ class Post load_front_matter! merge_with_front_matter! front_matter.stringify_keys end - end # Limpiar los errores @@ -244,15 +243,16 @@ class Post private - # Completa el front_matter a partir de las variables de otro + # Completa el front_matter a partir de las variables de otro post que + # le sirve de plantilla def front_matter_from_template # XXX: Llamamos a @template en lugar de template porque sino # entramos en una race condition return {} unless @template + ft = template_fields.map(&:to_front_matter).reduce(Hash.new, :merge) # Convertimos el slug en layout - ft = template.front_matter.dup - ft['layout'] = ft.delete('slug') + ft['layout'] = template.slug ft end diff --git a/app/models/post/template_field.rb b/app/models/post/template_field.rb index e02fed7..254e4e1 100644 --- a/app/models/post/template_field.rb +++ b/app/models/post/template_field.rb @@ -48,6 +48,21 @@ class Post @type end + # Devuelve los valores vacíos según el tipo + def empty_value + case + when string? + '' + when nested? + # TODO devolver las keys también + {} + when array? + [] + when boolean? + false + end + end + # El campo es requerido si es complejo y se especifica que lo sea def required? complex? && contents.dig('required') @@ -90,6 +105,11 @@ class Post end end + # Convierte la plantilla en el formato de front_matter + def to_front_matter + { key => empty_value } + end + def array? value.is_a? Array end