Skip to content

Commit

Permalink
Merge 584e8ad into ebb460c
Browse files Browse the repository at this point in the history
  • Loading branch information
darlanmendonca committed Dec 15, 2016
2 parents ebb460c + 584e8ad commit ceee832
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 5 deletions.
5 changes: 4 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,10 @@
},
"homepage": "https://github.com/darlanmendonca/object-filters#readme",
"dependencies": {
"clone": "^2.1.0"
"clone": "^2.1.0",
"deep-get-set": "^1.1.0",
"deep-getset": "^1.0.2",
"unset-value": "^0.1.1"
},
"devDependencies": {
"babel-cli": "^6.18.0",
Expand Down
10 changes: 8 additions & 2 deletions sources/index.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import clone from 'clone'
import unset from 'unset-value'
import deep from 'deep-getset'

module.exports = filters

Expand All @@ -14,12 +16,16 @@ function filters(options) {
if (negativeKeys.length) {
obj = clone(obj)
for (const key of negativeKeys) {
delete obj[key]
key.includes('.')
? unset(obj, key)
: delete obj[key]
}
} else if (positiveKeys.length) {
obj = {}
for (const key of positiveKeys) {
obj[key] = this[key]
key.includes('.')
? deep.set(obj, key.split('.'), deep.get(this, key.split('.')))
: obj[key] = this[key]
}
}

Expand Down
16 changes: 14 additions & 2 deletions sources/index.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -63,18 +63,30 @@ describe('object-filters', () => {
.to.deep.equal({firstname, lastname})
})

xit('filter by nested object (strings)', () => {
it('filter by nested (strings)', () => {
const {firstname, lastname} = object
expect(object.filters('firstname lastname address.castle'))
.to.deep.equal({firstname, lastname, address: {castle: 'Black'}})
})

xit('filter by nested object (array)', () => {
it('filter by nested (array)', () => {
const {firstname, lastname} = object
expect(object.filters(['firstname', 'lastname', 'address.castle']))
.to.deep.equal({firstname, lastname, address: {castle: 'Black'}})
})

it('filter by negative nested (strings)', () => {
const {firstname, lastname, email} = object
expect(object.filters('firstname lastname -address.castle'))
.to.deep.equal({firstname, lastname, email, address: {region: 'North'}})
})

it('filter by negative nested (array)', () => {
const {firstname, lastname, email} = object
expect(object.filters(['firstname', 'lastname', '-address.castle']))
.to.deep.equal({firstname, lastname, email, address: {region: 'North'}})
})

it('not filter', () => {
expect(object.filters())
.to.deep.equal(object)
Expand Down

0 comments on commit ceee832

Please sign in to comment.