diff --git a/app/models/post.rb b/app/models/post.rb index 97075290..12532259 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 e02fed74..254e4e16 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