Serializers: Ignore empty yaml metadata

No point giving out a horrible stack trace in this case. This is clearly
not worth an "exception".
This commit is contained in:
Vishesh Handa
2019-05-29 11:00:45 +02:00
parent 7a849ab108
commit 0dc75c4ff4
2 changed files with 23 additions and 8 deletions

View File

@ -27,16 +27,18 @@ class MarkdownYAMLSerializer implements NoteSerializer {
if (str.startsWith("---\n")) {
var parts = str.split("---\n");
var map = <String, dynamic>{};
var yamlText = parts[1].trim();
try {
var yamlMap = loadYaml(parts[1]);
yamlMap.forEach((key, value) {
map[key] = value;
});
} catch (err, stack) {
if (yamlText.isNotEmpty) {
var yamlMap = loadYaml(parts[1]);
yamlMap.forEach((key, value) {
map[key] = value;
});
}
} catch (err) {
print(
'MarkdownYAMLSerializer::decode (${parts[1]}) -> ${err.toString()}');
print(stack.toString());
'MarkdownYAMLSerializer::decode("$yamlText") -> ${err.toString()}');
}
map['body'] = parts[2].trimLeft();

View File

@ -31,11 +31,24 @@ void main() {
expect(note2, note);
});
test('Markdown Serializer with invalid Markdown', () {
test('Markdown Serializer with invalid YAML', () {
var inputNoteStr = """---
type
---
Alright.""";
var serializer = MarkdownYAMLSerializer();
var note = serializer.decode(inputNoteStr);
var actualStr = "Alright.";
expect(actualStr, note.body);
});
test('Markdown Serializer with empty YAML', () {
var inputNoteStr = """---
---
Alright.""";
var serializer = MarkdownYAMLSerializer();