/ / Aumenta le eccezioni durante una build di Jekyll se mancano i campi YAML specificati? - rubino, jekyll, liquido, jekyll-extensions

Aumentare le eccezioni durante una build di Jekyll se mancano i campi YAML specificati? - rubino, jekyll, liquido, jekyll-extensions

Mi piacerebbe costruire la logica in un sito di Jekyll in modo che le pagine di un certo layout avranno il loro YAML validato, con la generazione di errori se mancano campi specifici, o il tipo di valore sbagliato, ecc.

Una soluzione è attraverso la scrittura di un plugin kludgy per un filtro Liquid che prende semplicemente un messaggio di errore e solleva un'eccezione:

module Jekyll
module ExceptionFilter
def raise_error(msg)
bad_file = @context.registers[:page]["path"]
err_msg = "On #{bad_file}: #{msg}"
raise err_msg
end
end
end

Liquid::Template.register_filter(Jekyll::ExceptionFilter)

Quindi, all'interno di un modello, ad esempio, posso includere questo:

{% unless page.necessary_field %}
{{ "You"re missing necessary_field" | raise_error }}
{% endunless %}

Questo tipo di lavoro viene svolto.

Un problema che ho è che il processo di compilazionesi ferma immediatamente alla ricerca di un errore. Mi piacerebbe poter continuare la compilazione di tutti i file .md nel repository e raccogliere un elenco di errori in tutte le pagine da visualizzare alla fine. Basato sui documenti di Jekyll, Pensavo che liquid: error_mode: warn in _config.yml farebbe questo, ma non lo fa

risposte:

2 per risposta № 1

Potresti (ab) usare un generatore per controllare tutti i file prima di costruire. Ecco come puoi farlo:

module MyModule

class WarningGenerator < Jekyll::Generator
def generate(site)

errors = Array.new

site.posts.docs.each do |p|
unless p.data["my_property"].any? {
errors = "On #{p.title}: My Property is missing"

}
end

errors.each do |error|
puts error
end

raise "There were errors"
end
end
end

Attenzione, questo codice non è testato :)

Camminerebbe attraverso tutte le pagine, controllerà una proprietà specifica, aggiungerà un messaggio a un array se non viene trovato e genera un errore in seguito.