Skip to content

Commit

Permalink
object.deepValue
Browse files Browse the repository at this point in the history
  • Loading branch information
Afsin Ustundag committed Mar 4, 2015
1 parent 1c9453f commit 277d9bd
Show file tree
Hide file tree
Showing 3 changed files with 84 additions and 1 deletion.
1 change: 1 addition & 0 deletions RELEASENOTES.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# v1.4.1 - TBD

-object.deepValue(obj, deepProperty);
-objectset.deepValue(obj, deepProperty, value)

# v1.4.0 - February 27, 2015
Expand Down
15 changes: 14 additions & 1 deletion lib/object.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,19 @@ var lodash = require('lodash');

exports.isObject = lodash.isObject;

exports.exists = function (obj) {
var exists = exports.exists = function (obj) {
return (obj !== undefined) && (obj !== null);
};

exports.deepValue = function (obj, deepProperty) {
var propertyPieces = deepProperty.split('.');
var n = propertyPieces.length;
for (var i = 0; i < n; ++i) {
if ((!exists(obj)) || (typeof obj !== 'object')) {
return null;
}
var property = propertyPieces[i];
obj = obj[property];
}
return obj;
};
69 changes: 69 additions & 0 deletions test/test-object.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,72 @@ describe('object.exists', function () {
expect(exists(r)).to.be.true;
});
});

describe('object.deepValue', function () {
var deepValue = object.deepValue;

it('null', function () {
var r = null;
var v = deepValue(r, 'a.b');
expect(v).to.equal(null);
});

it('undefined', function () {
var r;
var v = deepValue(r, 'a.b');
expect(v).to.equal(null);
});

it('5', function () {
var r = 5;
var v = deepValue(r, 'a.b');
expect(v).to.equal(null);
});

it('{}', function () {
var r = {};
var v = deepValue(r, 'a.b');
expect(v).to.equal(null);
});
it('one level property', function () {
var r = {
a: "value"
};
var v = deepValue(r, 'a');
expect(v).to.equal(r.a);
v = deepValue(r, 'a.b');
expect(v).to.equal(null);
});
it('two level property', function () {
var r = {
a: {
b: "value"
},
c: 1
};
var v = deepValue(r, 'a.b');
expect(v).to.equal(r.a.b);
v = deepValue(r, 'a');
expect(v).to.deep.equal(r.a);
v = deepValue(r, 'a.b.c');
expect(v).to.equal(null);
v = deepValue(r, 'a.c.d');
expect(v).to.equal(null);
});
it('three level property', function () {
var r = {
a: {
b: {
c: "value"
}
}
};
var v = deepValue(r, 'a.b.c');
expect(v).to.equal(r.a.b.c);
v = deepValue(r, 'a.b');
expect(v).to.deep.equal(r.a.b);
v = deepValue(r, 'a.b.c.d');
expect(v).to.equal(null);
});

});

0 comments on commit 277d9bd

Please sign in to comment.