From 5e5e276c4247d275141f88c6e838998453b8c28f Mon Sep 17 00:00:00 2001 From: Siddharth Date: Mon, 22 Mar 2021 09:58:14 +0530 Subject: [PATCH 1/2] added a new: pwn --- brototype.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/brototype.js b/brototype.js index f08d6a5..fb8f76b 100644 --- a/brototype.js +++ b/brototype.js @@ -154,6 +154,10 @@ } // the deepest key is set to either an empty object or the value provided brobj[props[props.length - 1]] = value === undefined ? {} : value; + }, + "pwn": function(key) { + var brobj = this.obj; + delete[brobj[key]] } }; From 47b97799751ab0d22d8aa4eb4ffca484a8763a93 Mon Sep 17 00:00:00 2001 From: Siddharth Date: Mon, 22 Mar 2021 10:35:41 +0530 Subject: [PATCH 2/2] Added new method: pwn --- README.md | 9 ++ brototype.js | 56 +++++--- package-lock.json | 355 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 1 - tests.js | 10 ++ 5 files changed, 408 insertions(+), 23 deletions(-) create mode 100644 package-lock.json diff --git a/README.md b/README.md index 3316212..8d1b2d0 100644 --- a/README.md +++ b/README.md @@ -153,6 +153,15 @@ Bro(obj1).comeAtMe(obj2); // now obj1.foo == 'bar' and obj1.yes == 'no' ``` +### Deleting a key from an object +```js +var lies = { "this": { "is": { "uncool": "yes" } } }; +// Not uncool!! +var bro = Bro(lies); +bro.pwn('this.is.uncool'); +// => { "this": { "is": {} } } +``` + ### Extending Brototype! Yes, extend me, Bro! diff --git a/brototype.js b/brototype.js index f08d6a5..8dd5e40 100644 --- a/brototype.js +++ b/brototype.js @@ -1,5 +1,5 @@ /*global module:true, window:true, require:false, define:false*/ -(function() { +(function () { 'use strict'; // Bromise... it's stronger than a Promise @@ -10,21 +10,21 @@ } Bromise.brototype = Bromise.prototype = { - "butWhenIdo": function(callback, context) { + "butWhenIdo": function (callback, context) { if (this.method instanceof Function) { var returnValue = this.method.apply(this.object, this.args); if (returnValue) { - (callback || function(){}).call(context || this.object, returnValue); + (callback || function () { }).call(context || this.object, returnValue); } } return context; }, - "hereComeTheErrors": function(callback) { + "hereComeTheErrors": function (callback) { if (this.method instanceof Function) { try { this.method.apply(this.object, this.args); - } catch(e) { + } catch (e) { callback(e); } } else { @@ -48,11 +48,11 @@ Bro.NOWAY = false; Bro.brototype = Bro.prototype = { - "isThatEvenAThing": function() { + "isThatEvenAThing": function () { return this.obj !== void 0; }, - "doYouEven": function(key, callback, options) { + "doYouEven": function (key, callback, options) { if (!(callback instanceof Function)) { options = callback; } @@ -61,10 +61,10 @@ key = [key]; } var self = this; - if (key.every(function(k) { - var bro = self.iCanHaz(k); - return (Bro(bro).isThatEvenAThing() === Bro.TOTALLY); - })) { + if (key.every(function (k) { + var bro = self.iCanHaz(k); + return (Bro(bro).isThatEvenAThing() === Bro.TOTALLY); + })) { optionsBro.iDontAlways('forSure').butWhenIdo(); // Perform callback function @@ -81,7 +81,7 @@ } }, - "iCanHaz": function(key) { + "iCanHaz": function (key) { if (Array.isArray(key)) { var index, value, result = []; for (index in key) { @@ -102,7 +102,7 @@ return item; }, - "comeAtMe": function(brobject) { + "comeAtMe": function (brobject) { var i, prop, bro = Bro(brobject), keys = bro.giveMeProps(), @@ -115,7 +115,7 @@ } }, - "giveMeProps": function() { + "giveMeProps": function () { var key, props = []; if (Object.keys) { props = Object.keys(this.obj); @@ -129,21 +129,21 @@ return props; }, - "hasRespect": function(prop) { + "hasRespect": function (prop) { return this.obj.hasOwnProperty(prop); }, - "iDontAlways": function(methodString) { + "iDontAlways": function (methodString) { var method = this.iCanHaz(methodString); return new Bromise(this.obj, method, arguments); }, - "braceYourself": function(methodString) { + "braceYourself": function (methodString) { var method = this.iCanHaz(methodString); return new Bromise(this.obj, method, arguments); }, - "makeItHappen": function(key, value) { + "makeItHappen": function (key, value) { var brobj = this.obj; var props = key.split('.'); for (var i = 0; i < props.length - 1; ++i) { @@ -154,12 +154,24 @@ } // the deepest key is set to either an empty object or the value provided brobj[props[props.length - 1]] = value === undefined ? {} : value; + }, + "pwn": function (path) { + const brobj = this.obj, + keys = path.split('.'); + + keys.reduce(function(acc, key, index) { + if (index === keys.length - 1) { + delete acc[key]; + return true; + } + return acc[key]; + }, brobj); } }; - (function() { + (function () { if (typeof define === 'function' && typeof define.amd === 'object') { - define(function() { + define(function () { return Bro; }); } else if (typeof module !== 'undefined' && module.exports) { @@ -168,8 +180,8 @@ window.Bro = Bro; } - if (typeof(angular) !== 'undefined') { - angular.module('brototype', []).factory('Bro', function() { return Bro; }); + if (typeof (angular) !== 'undefined') { + angular.module('brototype', []).factory('Bro', function () { return Bro; }); } })(); })(); diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..91dcd63 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,355 @@ +{ + "name": "brototype", + "version": "0.0.6", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "version": "0.0.6", + "license": "MIT", + "devDependencies": { + "mocha": "~2.2" + } + }, + "node_modules/commander": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.3.0.tgz", + "integrity": "sha1-/UMOiJgy7DU7ms0d4hfBHLPu+HM=", + "dev": true, + "engines": { + "node": ">= 0.6.x" + } + }, + "node_modules/debug": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.0.0.tgz", + "integrity": "sha1-ib2d9nMrUSVrxnBTQrugLtEhMe8=", + "dev": true, + "dependencies": { + "ms": "0.6.2" + } + }, + "node_modules/diff": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", + "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz", + "integrity": "sha1-Tbwv5nTnGUnK8/smlc5/LcHZqNE=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/glob": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.3.tgz", + "integrity": "sha1-4xPusknHr/qlxHUoaw4RW1mDlGc=", + "dev": true, + "dependencies": { + "graceful-fs": "~2.0.0", + "inherits": "2", + "minimatch": "~0.2.11" + }, + "engines": { + "node": "*" + } + }, + "node_modules/graceful-fs": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz", + "integrity": "sha1-fNLNsiiko/Nule+mzBQt59GhNtA=", + "deprecated": "please upgrade to graceful-fs 4 for compatibility with current and future versions of Node.js", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/growl": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.8.1.tgz", + "integrity": "sha1-Sy3sjZB+k9szZiTc7AGDUC+MlCg=", + "dev": true + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/jade": { + "version": "0.26.3", + "resolved": "https://registry.npmjs.org/jade/-/jade-0.26.3.tgz", + "integrity": "sha1-jxDXl32NefL2/4YqgbBRPMslaGw=", + "deprecated": "Jade has been renamed to pug, please install the latest version of pug instead of jade", + "dev": true, + "dependencies": { + "commander": "0.6.1", + "mkdirp": "0.3.0" + }, + "bin": { + "jade": "bin/jade" + } + }, + "node_modules/jade/node_modules/commander": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz", + "integrity": "sha1-+mihT2qUXVTbvlDYzbMyDp47GgY=", + "dev": true, + "engines": { + "node": ">= 0.4.x" + } + }, + "node_modules/jade/node_modules/mkdirp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", + "integrity": "sha1-G79asbqCevI1dRQ0kEJkVfSB/h4=", + "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/lru-cache": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", + "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", + "dev": true + }, + "node_modules/minimatch": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", + "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", + "deprecated": "Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue", + "dev": true, + "dependencies": { + "lru-cache": "2", + "sigmund": "~1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "node_modules/mkdirp": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", + "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", + "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", + "dev": true, + "dependencies": { + "minimist": "0.0.8" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mocha": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-2.2.5.tgz", + "integrity": "sha1-07cqT+SeyUOTU/GsiT28Qw2ZMUA=", + "dev": true, + "dependencies": { + "commander": "2.3.0", + "debug": "2.0.0", + "diff": "1.4.0", + "escape-string-regexp": "1.0.2", + "glob": "3.2.3", + "growl": "1.8.1", + "jade": "0.26.3", + "mkdirp": "0.5.0", + "supports-color": "~1.2.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 0.8.x" + } + }, + "node_modules/ms": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.6.2.tgz", + "integrity": "sha1-2JwhJMb9wTU9Zai3e/GqxLGTcIw=", + "dev": true + }, + "node_modules/sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", + "dev": true + }, + "node_modules/supports-color": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.2.1.tgz", + "integrity": "sha1-Eu4hUHCGzZjBBY2ewPSsR2t687I=", + "dev": true, + "bin": { + "supports-color": "cli.js" + }, + "engines": { + "node": ">=0.8.0" + } + } + }, + "dependencies": { + "commander": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.3.0.tgz", + "integrity": "sha1-/UMOiJgy7DU7ms0d4hfBHLPu+HM=", + "dev": true + }, + "debug": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.0.0.tgz", + "integrity": "sha1-ib2d9nMrUSVrxnBTQrugLtEhMe8=", + "dev": true, + "requires": { + "ms": "0.6.2" + } + }, + "diff": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", + "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz", + "integrity": "sha1-Tbwv5nTnGUnK8/smlc5/LcHZqNE=", + "dev": true + }, + "glob": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.3.tgz", + "integrity": "sha1-4xPusknHr/qlxHUoaw4RW1mDlGc=", + "dev": true, + "requires": { + "graceful-fs": "~2.0.0", + "inherits": "2", + "minimatch": "~0.2.11" + } + }, + "graceful-fs": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz", + "integrity": "sha1-fNLNsiiko/Nule+mzBQt59GhNtA=", + "dev": true + }, + "growl": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.8.1.tgz", + "integrity": "sha1-Sy3sjZB+k9szZiTc7AGDUC+MlCg=", + "dev": true + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "jade": { + "version": "0.26.3", + "resolved": "https://registry.npmjs.org/jade/-/jade-0.26.3.tgz", + "integrity": "sha1-jxDXl32NefL2/4YqgbBRPMslaGw=", + "dev": true, + "requires": { + "commander": "0.6.1", + "mkdirp": "0.3.0" + }, + "dependencies": { + "commander": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz", + "integrity": "sha1-+mihT2qUXVTbvlDYzbMyDp47GgY=", + "dev": true + }, + "mkdirp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", + "integrity": "sha1-G79asbqCevI1dRQ0kEJkVfSB/h4=", + "dev": true + } + } + }, + "lru-cache": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", + "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", + "dev": true + }, + "minimatch": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", + "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", + "dev": true, + "requires": { + "lru-cache": "2", + "sigmund": "~1.0.0" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", + "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "mocha": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-2.2.5.tgz", + "integrity": "sha1-07cqT+SeyUOTU/GsiT28Qw2ZMUA=", + "dev": true, + "requires": { + "commander": "2.3.0", + "debug": "2.0.0", + "diff": "1.4.0", + "escape-string-regexp": "1.0.2", + "glob": "3.2.3", + "growl": "1.8.1", + "jade": "0.26.3", + "mkdirp": "0.5.0", + "supports-color": "~1.2.0" + } + }, + "ms": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.6.2.tgz", + "integrity": "sha1-2JwhJMb9wTU9Zai3e/GqxLGTcIw=", + "dev": true + }, + "sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", + "dev": true + }, + "supports-color": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.2.1.tgz", + "integrity": "sha1-Eu4hUHCGzZjBBY2ewPSsR2t687I=", + "dev": true + } + } +} diff --git a/package.json b/package.json index abe6779..768a887 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,6 @@ "url": "https://github.com/letsgetrandy/brototype/issues" }, "homepage": "http://brototypejs.com", - "dependencies": {}, "devDependencies": { "mocha": "~2.2" } diff --git a/tests.js b/tests.js index 096edc6..6126b1d 100644 --- a/tests.js +++ b/tests.js @@ -242,6 +242,16 @@ describe('Bro.makeItHappen', function() { }); }); +describe('Bro.pwn', function () { + it("should delete a key", function () { + const firstObj = { "this": { "is": { "cool": "not yet" } } }; + const expected = { "this": { "is": {} } }; + const bro = Bro(firstObj); + bro.pwn('this.is.cool'); + assert.deepEqual(firstObj, expected); + }); +}); + describe('brototype alias', function(){ it('kind of basically works', function(){ assert.notEqual(Bro.brototype.doYouEven, undefined);