Pregunta

Tengo un sistema que filtra a través de archivos de plantilla erb. El uso de convención sobre configuración, los archivos de salida se crean en una jerarquía de archivos que refleja los archivos de entrada. Muchos de los archivos tienen los mismos nombres, y yo era capaz de utilizar los directorios para diferenciarlos.

El plan funcionó hasta que necesitaba para asociar información adicional con cada archivo. Así que he creado un archivo YAML en cada directorio con los metadatos. Ahora tengo tanto convención y configuración. Yuck.

A continuación, he aprendido Webby , y la forma en que incluye una sección YAML metadatos en la parte superior de cada archivo de plantilla . Son similares a esto:

---
title: Baxter the Dog
filter: textile
---
All the best little blogs use Webby.

Si pudiera implementar un encabezado de esa manera, yo podría deshacerse de mi jerarquía y los archivos YAML separadas. La aplicación Webby es muy genérico, la implementación de una nueva clase MetaFile que separa la cabeza desde el "texto real", pero parece más complicado de lo que necesito.

Poner los metadatos en un comentario erb parece bueno -., Será ignorado automáticamente por erb, pero no estoy seguro de cómo acceder a los datos de comentarios

<%#
title: Baxter the Dog
%>

¿Hay una manera de acceder a los comentarios erb? O tal vez un enfoque diferente? Muchos de mis plantillas de hacer un montón de cosas erb, pero podía correr erb en una etapa distinta si se hace más fácil el resto.

¿Fue útil?

Solución

¿Qué tal si vuelca su contenido como YAML también. Es de suponer que los metadatos es simplemente un hash objeto de dumping a YAML. Se podía añadir el contenido como cadena en un segundo documento YAML en el mismo archivo: -

---
title: Baxter the Dog
filter: textile
--- |
Content line 1
Content line 2
Content line 3

El dumping es tan simple como: -

File.open('file.txt', 'w') do |output|
  YAML.dump(metadata, output)
  YAML.dump(content, output)
end

La carga es tan simple como: -

File.open('file.txt') do |input|
  stream = YAML.load_stream(input)
  metadata, content = stream.documents
end

Tenga en cuenta que el personaje aparece en la tubería YAML de manera que los saltos de línea en la cadena de contenido se conservan .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top