diff --git a/index.js b/index.js index 53b57ad..df2a664 100644 --- a/index.js +++ b/index.js @@ -1,6 +1,7 @@ var camelCase = require('camel-case'); var snakeCase = require('snake-case'); var paramCase = require('param-case'); +var pascalCase = require('pascal-case'); var changeKeys = function changeKeys(transformer, obj) { var objectKeys; @@ -56,4 +57,12 @@ changeCaseObject.param = changeCaseObject.paramCase = function paramCaseObject(o return changeKeys(paramCase, obj); }; +changeCaseObject.pascal = changeCaseObject.pascalCase = function pascalCaseObject(obj) { + if (typeof obj === 'string') { + return pascalCase(obj); + } + + return changeKeys(pascalCase, obj); +}; + module.exports = changeCaseObject; diff --git a/package.json b/package.json index afc2176..8ccd997 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,8 @@ "case", "change", "snake", - "param" + "param", + "pascal" ], "author": "Johannes Stein", "license": "MIT", @@ -31,6 +32,7 @@ "dependencies": { "camel-case": "^1.2.0", "param-case": "^1.1.1", + "pascal-case": "^2.0.1", "snake-case": "^1.1.1" }, "devDependencies": { diff --git a/test/index.js b/test/index.js index 002f377..7e76295 100644 --- a/test/index.js +++ b/test/index.js @@ -293,4 +293,103 @@ describe('change-case-object', function () { expect(changeCaseObject.snakeCase(Infinity)).to.equal(Infinity); expect(changeCaseObject.snakeCase(NaN)).to.a('number'); }); + + it('pascalCase', function () { + var initialObj = { + 'hello_world': 'test', + }; + + var fixtureObj = { + 'HelloWorld': 'test', + }; + + expect(changeCaseObject.pascalCase(initialObj)).to.deep.equal(fixtureObj); + }); + + it('pascalCase (special characters)', function () { + var initialObj = { + 'hello_world': 'n#mä!%ads$§a', + }; + + var fixtureObj = { + 'HelloWorld': 'n#mä!%ads$§a', + }; + expect(changeCaseObject.pascalCase(initialObj)).to.deep.equal(fixtureObj); + }); + + it('pascalCase (Array of Object)', function () { + var initialArrObj = [ + { 'hello_world': 'test' }, + { is_active: true }, + { 'isActive': true }, + { 'is-active': true }, + ]; + + var fixtureArrObj = [ + { 'HelloWorld': 'test' }, + { IsActive: true }, + { IsActive: true }, + { IsActive: true }, + ]; + + expect(changeCaseObject.pascalCase(initialArrObj)).to.deep.equal(fixtureArrObj); + }); + + it('pascalCase (Array of string)', function () { + var initialArrStr = ['is_active', 'is_blocked']; + + var fixtureArrStr = ['IsActive', 'IsBlocked']; + + expect(changeCaseObject.pascalCase(initialArrStr)).to.deep.equal(fixtureArrStr); + }); + + it('pascalCase (Primitive - string)', function () { + var initialPrimitive = 'is_active'; + + var fixturePrimitive = 'IsActive'; + + expect(changeCaseObject.pascalCase(initialPrimitive)).to.deep.equal(fixturePrimitive); + }); + + it('pascalCase (Primitive - number)', function () { + var initialPrimitive = 42; + + var fixturePrimitive = 42; + + expect(changeCaseObject.pascalCase(initialPrimitive)).to.deep.equal(fixturePrimitive); + }); + + it('pascalCase (Primitive - bool)', function () { + var initialPrimitive = true; + + var fixturePrimitive = true; + + expect(changeCaseObject.pascalCase(initialPrimitive)).to.deep.equal(fixturePrimitive); + }); + + it('pascalCase (deep)', function () { + var initialObj = { + 'hello_world': { + 'hello_there': 'name', + 'my_name': 'someone', + }, + }; + + var fixtureObj = { + 'HelloWorld': { + 'HelloThere': 'name', + 'MyName': 'someone', + }, + }; + + expect(changeCaseObject.pascalCase(initialObj)).to.deep.equal(fixtureObj); + }); + + it('pascalCase (edge cases)', function () { + expect(changeCaseObject.pascalCase(null)).to.equal(null); + expect(changeCaseObject.pascalCase({})).to.a('object'); + expect(changeCaseObject.pascalCase([])).to.a('array'); + expect(changeCaseObject.pascalCase(Infinity)).to.equal(Infinity); + expect(changeCaseObject.pascalCase(NaN)).to.a('number'); + }); });