From a628ee0cb37491f179770125c1eef9a21a6988c1 Mon Sep 17 00:00:00 2001 From: madebyivan Date: Thu, 18 Apr 2019 17:18:40 +0200 Subject: [PATCH 1/4] feat: include 2 new methods toCapitalize and trimSpaces --- keywords/transform.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/keywords/transform.js b/keywords/transform.js index d715452..8cdd27a 100644 --- a/keywords/transform.js +++ b/keywords/transform.js @@ -19,6 +19,12 @@ module.exports = function defFunc (ajv) { }, toEnumCase: function (value, cfg) { return cfg.hash[makeHashTableKey(value)] || value; + }, + toCapitalize: function (value) { + return value.replace(/\b\w/g, (l) => l.toUpperCase()); + }, + trimSpaces: function (value) { + return value.replace(/ +/g, ' '); } }; @@ -65,7 +71,8 @@ module.exports = function defFunc (ajv) { type: 'string', enum: [ 'trimLeft', 'trimRight', 'trim', - 'toLowerCase', 'toUpperCase', 'toEnumCase' + 'toLowerCase', 'toUpperCase', 'toEnumCase', + 'toCapitalize', 'trimSpaces' ] } } From 1f2f40f493ea9db55ac18f1d1b6c03afab058442 Mon Sep 17 00:00:00 2001 From: madebyivan Date: Thu, 18 Apr 2019 17:33:33 +0200 Subject: [PATCH 2/4] rag: method Capitalize --- keywords/transform.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keywords/transform.js b/keywords/transform.js index 8cdd27a..19b98dd 100644 --- a/keywords/transform.js +++ b/keywords/transform.js @@ -21,7 +21,7 @@ module.exports = function defFunc (ajv) { return cfg.hash[makeHashTableKey(value)] || value; }, toCapitalize: function (value) { - return value.replace(/\b\w/g, (l) => l.toUpperCase()); + return value.toLowerCase().replace(/\b\w/g, (l) => l.toUpperCase()); }, trimSpaces: function (value) { return value.replace(/ +/g, ' '); From 032bb24e66961708f01113d1f087ae214dcda166 Mon Sep 17 00:00:00 2001 From: madebyivan Date: Sat, 20 Apr 2019 20:41:24 +0200 Subject: [PATCH 3/4] add test --- keywords/transform.js | 2 +- spec/transform.spec.js | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/keywords/transform.js b/keywords/transform.js index 19b98dd..2705cd2 100644 --- a/keywords/transform.js +++ b/keywords/transform.js @@ -21,7 +21,7 @@ module.exports = function defFunc (ajv) { return cfg.hash[makeHashTableKey(value)] || value; }, toCapitalize: function (value) { - return value.toLowerCase().replace(/\b\w/g, (l) => l.toUpperCase()); + return value.toLowerCase().replace(/\b\w/g, (words) => words.toUpperCase()); }, trimSpaces: function (value) { return value.replace(/ +/g, ' '); diff --git a/spec/transform.spec.js b/spec/transform.spec.js index a7b630b..4334847 100644 --- a/spec/transform.spec.js +++ b/spec/transform.spec.js @@ -126,4 +126,28 @@ describe('keyword "transform"', function () { }); }); + ajvs.forEach(function (ajv, i) { + it('transform toCapitalize #' + i, function () { + var schema, data; + + data = ['All to CAPITALIZE']; + schema = {type: 'array', items: {type: 'string', transform: ['toCapitalize']}}; + ajv.validate(schema, data) .should.equal(true); + data.should.deep.equal(['All To Capitalize']); + + }); + }); + + ajvs.forEach(function (ajv, i) { + it('transform trimSpaces #' + i, function () { + var schema, data; + + data = ['Doubles Spaces and more']; + schema = {type: 'array', items: {type: 'string', transform: ['trimSpaces']}}; + ajv.validate(schema, data) .should.equal(true); + data.should.deep.equal(['Doubles Spaces and more']); + + }); + }); + }); From 5c9086828d3e1902c855847c84243ee2c97d86ef Mon Sep 17 00:00:00 2001 From: madebyivan Date: Sun, 21 Apr 2019 23:20:23 +0200 Subject: [PATCH 4/4] rag: accent --- keywords/transform.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keywords/transform.js b/keywords/transform.js index 2705cd2..05ebd10 100644 --- a/keywords/transform.js +++ b/keywords/transform.js @@ -21,7 +21,7 @@ module.exports = function defFunc (ajv) { return cfg.hash[makeHashTableKey(value)] || value; }, toCapitalize: function (value) { - return value.toLowerCase().replace(/\b\w/g, (words) => words.toUpperCase()); + return value.toLowerCase().replace(/(^|[^a-zA-Z\u00C0-\u017F'])([a-zA-Z\u00C0-\u017F])/g, (l) => l.toUpperCase()); }, trimSpaces: function (value) { return value.replace(/ +/g, ' ');