/ / Zvýšiť výnimky počas zostavovania Jekyll, ak chýbajú zadané polia YAML? - rubínové, žiarové, kvapalné, žilové rozšírenie

Zvýšiť výnimky počas zostavovania Jekyll, ak chýbajú zadané polia YAML? - rubínové, žiarové, kvapalné, žilové rozšírenie

Chcel by som vytvoriť logiku do stránky Jekyll tak, že stránky určitého layout budú mať svoje YAML overené, chyba budovania, ak chýbajú špecifické polia alebo majú nesprávny typ hodnoty atď.

Jedným riešením je písanie pluginu kludgy pre filter kvapalín, ktorý jednoducho prijme chybové hlásenie a vyvolá výnimku:

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)

Potom v šablóne napríklad môžem zahrnúť toto:

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

Takýto druh prác je dokončený.

Jeden problém, ktorý mám, je proces vytváraniaokamžite zastaví vyhľadanie jednej chyby. Rád by som bol schopný pokračovať v zostavovaní všetkých súborov .md v repo a zhromaždiť zoznam chýb na všetkých stránkach, ktoré sa budú zobrazovať na konci. Na základe dokumentov Jekyll, Myslel som si to liquid: error_mode: warn v _config.yml by to urobilo, ale nie.

odpovede:

2 pre odpoveď č. 1

Môžete (ab) použiť generátor na kontrolu všetkých súborov pred budovaním. Tu je spôsob, ako to urobiť:

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

Pozor, tento kód nie je testovaný :)

Bude prechádzať cez všetky vaše stránky, skontroluje konkrétnu vlastnosť, pridá správu do poľa, ak sa nenašla a neskôr nespustí chybu.