From eaa43488e56ea195167efc725d87b0afe050e4a0 Mon Sep 17 00:00:00 2001 From: Eamonn Bell Date: Thu, 22 Jun 2017 14:05:22 +0100 Subject: [PATCH 1/4] Remove case sensitivity of names of fields used in slug construction --- src/backends/backend.js | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/backends/backend.js b/src/backends/backend.js index 12d2541e..8a5054e7 100644 --- a/src/backends/backend.js +++ b/src/backends/backend.js @@ -26,7 +26,24 @@ class LocalStorageAuthStore { const slugFormatter = (template = "{{slug}}", entryData) => { const date = new Date(); - const identifier = entryData.get("title", entryData.get("path")); + + const getIdentifier = (entryData) => { + const validIdentifierFields = ["title", "path"]; + const identifiers = validIdentifierFields.map((field) => { + return entryData.find((_, key) => { + return key.toLowerCase() === field; + }); + }); + + const identifier = identifiers.find(i => typeof i !== 'undefined'); + + if (typeof identifier === 'undefined') { + throw new Error("Collection must have a field name that is a valid entry identifier"); + } else { + return identifier; + } + }; + return template.replace(/\{\{([^\}]+)\}\}/g, (_, field) => { switch (field) { case "year": @@ -36,7 +53,7 @@ const slugFormatter = (template = "{{slug}}", entryData) => { case "day": return (`0${ date.getDate() }`).slice(-2); case "slug": - return slug(identifier.trim(), {lower: true}); + return slug(getIdentifier(entryData).trim(), {lower: true}); default: return slug(entryData.get(field, "").trim(), {lower: true}); } From a4e324201d9a7305ff66fecab469ea6962e28195 Mon Sep 17 00:00:00 2001 From: Eamonn Bell Date: Thu, 22 Jun 2017 21:25:30 +0100 Subject: [PATCH 2/4] Refactor indentifer field find and validation. --- src/backends/backend.js | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/backends/backend.js b/src/backends/backend.js index 8a5054e7..47ffaac4 100644 --- a/src/backends/backend.js +++ b/src/backends/backend.js @@ -29,19 +29,17 @@ const slugFormatter = (template = "{{slug}}", entryData) => { const getIdentifier = (entryData) => { const validIdentifierFields = ["title", "path"]; - const identifiers = validIdentifierFields.map((field) => { - return entryData.find((_, key) => { - return key.toLowerCase() === field; - }); - }); - - const identifier = identifiers.find(i => typeof i !== 'undefined'); + const identifiers = validIdentifierFields.map((field) => + entryData.find((_, key) => key.toLowerCase() === field) + ); - if (typeof identifier === 'undefined') { + const identifier = identifiers.find(ident => ident !== undefined); + + if (identifier === undefined) { throw new Error("Collection must have a field name that is a valid entry identifier"); - } else { - return identifier; } + + return identifier; }; return template.replace(/\{\{([^\}]+)\}\}/g, (_, field) => { From 3e105b308969237d6b10dec805619cf9966a80f2 Mon Sep 17 00:00:00 2001 From: Eamonn Bell Date: Thu, 22 Jun 2017 21:39:32 +0100 Subject: [PATCH 3/4] Fix indentation. --- src/backends/backend.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/backends/backend.js b/src/backends/backend.js index 47ffaac4..c76dcfc1 100644 --- a/src/backends/backend.js +++ b/src/backends/backend.js @@ -28,18 +28,18 @@ const slugFormatter = (template = "{{slug}}", entryData) => { const date = new Date(); const getIdentifier = (entryData) => { - const validIdentifierFields = ["title", "path"]; - const identifiers = validIdentifierFields.map((field) => - entryData.find((_, key) => key.toLowerCase() === field) - ); + const validIdentifierFields = ["title", "path"]; + const identifiers = validIdentifierFields.map((field) => + entryData.find((_, key) => key.toLowerCase() === field) + ); - const identifier = identifiers.find(ident => ident !== undefined); + const identifier = identifiers.find(ident => ident !== undefined); - if (identifier === undefined) { - throw new Error("Collection must have a field name that is a valid entry identifier"); - } - - return identifier; + if (identifier === undefined) { + throw new Error("Collection must have a field name that is a valid entry identifier"); + } + + return identifier; }; return template.replace(/\{\{([^\}]+)\}\}/g, (_, field) => { From e51071abf43e8e25a0e0426988b7e0f4f46e1d24 Mon Sep 17 00:00:00 2001 From: Eamonn Bell Date: Thu, 22 Jun 2017 21:49:31 +0100 Subject: [PATCH 4/4] Change .find() predicate to not reject field names based on spurious whitespace. --- src/backends/backend.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backends/backend.js b/src/backends/backend.js index c76dcfc1..13010ead 100644 --- a/src/backends/backend.js +++ b/src/backends/backend.js @@ -30,7 +30,7 @@ const slugFormatter = (template = "{{slug}}", entryData) => { const getIdentifier = (entryData) => { const validIdentifierFields = ["title", "path"]; const identifiers = validIdentifierFields.map((field) => - entryData.find((_, key) => key.toLowerCase() === field) + entryData.find((_, key) => key.toLowerCase().trim() === field) ); const identifier = identifiers.find(ident => ident !== undefined);