/ / जेकेल बिल्ड के दौरान अपवाद उठाएं यदि निर्दिष्ट वाईएएमएल फ़ील्ड गुम हैं? - रूबी, जेकील, तरल, जेकिल-एक्सटेंशन

निर्दिष्ट जेएएमएल फ़ील्ड गुम होने पर जेकील बिल्ड के दौरान अपवाद उठाएं? - रूबी, जेकील, तरल, जेकिल-एक्सटेंशन

मैं एक जैकिल साइट में तर्क बनाना चाहता हूं ताकि एक निश्चित पृष्ठ layout यदि उनके पास विशिष्ट फ़ील्ड गुम हैं, या गलत प्रकार का मूल्य इत्यादि है तो बिल्डिंग त्रुटि के साथ उनके वाईएएमएल को मान्य किया जाएगा।

एक कामकाज एक तरल फ़िल्टर के लिए एक क्लूडी प्लगइन लिखने के माध्यम से होता है जो केवल एक त्रुटि संदेश लेता है और अपवाद उठाता है:

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)

फिर, एक टेम्पलेट के भीतर, उदाहरण के लिए, मैं इसे शामिल कर सकता हूं:

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

इस तरह का काम पूरा हो जाता है।

मेरे पास एक समस्या यह है कि निर्माण प्रक्रियाएक त्रुटि खोजने पर तुरंत रोकता है। मैं रेपो में सभी .md फ़ाइलों में निर्माण जारी रखने में सक्षम होना पसंद करूंगा, और अंत में प्रदर्शित करने के लिए सभी पृष्ठों में त्रुटियों की एक सूची एकत्र करूंगा। जेकील डॉक्स के आधार पर, मैंने सोचा कि liquid: error_mode: warn में _config.yml ऐसा करेंगे, लेकिन ऐसा नहीं है।

उत्तर:

जवाब के लिए 2 № 1

बिल्डिंग से पहले सभी फाइलों को जांचने के लिए आप जेनरेटर का उपयोग कर सकते हैं। यहां बताया गया है कि आप इसे कैसे कर सकते हैं:

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

ध्यान दें, इस कोड का परीक्षण नहीं किया गया है :)

यह आपके सभी पृष्ठों के माध्यम से चलता है, एक विशिष्ट संपत्ति के लिए चेक करता है, अगर यह नहीं मिला है और बाद में कोई त्रुटि उठाता है तो एक सरणी में एक संदेश जोड़ता है।