Domanda

Ho un sistema che filtra attraverso i file di modello erb. Utilizzando convenzione sulla configurazione, i file di output vengono creati in una gerarchia di file che rispecchia i file di input. Molti dei file hanno gli stessi nomi, e sono stato in grado di usare le directory per differenziarli.

Questo piano ha funzionato fino a quando ho avuto bisogno di associare informazioni aggiuntive con ogni file. Così ho creato un file YAML in ogni directory con i metadati. Ora ho due convention e di configurazione. Yuck.

Poi ho imparato Webby , e il modo in cui include una sezione di metadati YAML nella parte superiore di ogni file di modello . Sembrano così:

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

Se potessi attuare un colpo di testa in quel modo, avrei potuto abbandonare la mia gerarchia e i file YAML separati. L'implementazione Webby è molto generico, l'implementazione di una nuova classe MetaFile che separa il colpo di testa da "vero testo", ma sembra più complicato di cui ho bisogno.

Mettere i metadati in un commento erb sembra buona -. Sarà ignorato automaticamente Erb, ma non sono sicuro di come accedere ai dati di commento

<%#
title: Baxter the Dog
%>

C'è un modo per accedere ai commenti erb? O forse un approccio diverso? Un sacco di miei modelli di fare un mucchio di roba Erb, ma ho potuto correre erb in una fase separata se rende più facile il resto.

È stato utile?

Soluzione

Che ne dite se si dump il tuo contenuto come YAML troppo. Presumibilmente i metadati è semplicemente un hash scaricato a YAML. Si può solo aggiungere il contenuto come stringa in un secondo documento YAML nello stesso file: -

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

Il dumping è semplice come: -

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

Caricamento è semplice come: -

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

Si noti che il carattere pipe appare nella YAML in modo che ritorni a capo nella stringa contenuti sono conservati .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top