Eslint
This commit is contained in:
parent
182b8be1d4
commit
01ca521789
4 changed files with 104 additions and 85 deletions
11
.eslintrc.js
Normal file
11
.eslintrc.js
Normal file
|
@ -0,0 +1,11 @@
|
|||
module.exports = {
|
||||
"extends": "standard",
|
||||
"plugins": [
|
||||
"standard",
|
||||
"promise",
|
||||
"jest"
|
||||
],
|
||||
"env": {
|
||||
"jest/globals": true
|
||||
}
|
||||
};
|
54
index.js
54
index.js
|
@ -1,55 +1,55 @@
|
|||
module.exports = class Query {
|
||||
constructor (data) {
|
||||
this.data = data.map(item => {
|
||||
item.sortScore = 0;
|
||||
return item;
|
||||
});
|
||||
item.sortScore = 0
|
||||
return item
|
||||
})
|
||||
}
|
||||
|
||||
get results () {
|
||||
return this.data;
|
||||
return this.data
|
||||
}
|
||||
|
||||
filter (func) {
|
||||
this.data = this.data.filter(func);
|
||||
return this;
|
||||
this.data = this.data.filter(func)
|
||||
return this
|
||||
}
|
||||
|
||||
filterBy (key, func) {
|
||||
this.data = this.data.filter(item => func(item[key]));
|
||||
return this;
|
||||
this.data = this.data.filter(item => func(item[key]))
|
||||
return this
|
||||
}
|
||||
|
||||
search (key, term, score = 0) {
|
||||
switch (typeof term) {
|
||||
case 'boolean':
|
||||
this.data = this.data.filter(item => item[key] === term);
|
||||
break;
|
||||
this.data = this.data.filter(item => item[key] === term)
|
||||
break
|
||||
case 'string':
|
||||
this.data = this.data.filter(item => {
|
||||
let regFind = new RegExp(term, 'gi');
|
||||
let termMatches = (item[key].match(regFind) || []).length;
|
||||
item.sortScore += termMatches;
|
||||
return termMatches;
|
||||
});
|
||||
break;
|
||||
let regFind = new RegExp(term, 'gi')
|
||||
let termMatches = (item[key].match(regFind) || []).length
|
||||
item.sortScore += termMatches
|
||||
return termMatches
|
||||
})
|
||||
break
|
||||
}
|
||||
return this;
|
||||
return this
|
||||
}
|
||||
|
||||
sort (key = 'sortScore') {
|
||||
this.data = this.data.sort((a, b) => {
|
||||
if (a[key] < b[key]) return -1;
|
||||
if (a[key] > b[key]) return 1;
|
||||
return 0;
|
||||
});
|
||||
return this;
|
||||
if (a[key] < b[key]) return -1
|
||||
if (a[key] > b[key]) return 1
|
||||
return 0
|
||||
})
|
||||
return this
|
||||
}
|
||||
|
||||
paginate (page = 1, perPage = 10) {
|
||||
let min = page * perPage - perPage;
|
||||
let max = min + perPage;
|
||||
this.data = this.data.slice(min, max);
|
||||
return this;
|
||||
let min = page * perPage - perPage
|
||||
let max = min + perPage
|
||||
this.data = this.data.slice(min, max)
|
||||
return this
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -1,109 +1,109 @@
|
|||
const Query = require('./index');
|
||||
const TestData = require('./testdata.json');
|
||||
const Query = require('./index')
|
||||
const TestData = require('./testdata.json')
|
||||
|
||||
test('should not modify passed data without chain alterations', () => {
|
||||
let query = new Query(TestData)
|
||||
.results;
|
||||
.results
|
||||
|
||||
expect(query).toMatchObject(TestData);
|
||||
});
|
||||
expect(query).toMatchObject(TestData)
|
||||
})
|
||||
|
||||
test('should paginate with default params', () => {
|
||||
let query = new Query(TestData)
|
||||
.paginate()
|
||||
.results;
|
||||
.results
|
||||
|
||||
expect(query.length).toBe(9);
|
||||
});
|
||||
expect(query.length).toBe(9)
|
||||
})
|
||||
|
||||
test('should paginate with custom page length', () => {
|
||||
let query = new Query(TestData)
|
||||
.paginate(1, 3)
|
||||
.results;
|
||||
.results
|
||||
|
||||
expect(query.length).toBe(3);
|
||||
expect(query.length).toBe(3)
|
||||
expect(query[0].name).toBe('Haynes Meadows')
|
||||
});
|
||||
})
|
||||
|
||||
test('should paginate to second page with custom page length', () => {
|
||||
let query = new Query(TestData)
|
||||
.paginate(2, 3)
|
||||
.results;
|
||||
.results
|
||||
|
||||
expect(query.length).toBe(3);
|
||||
expect(query.length).toBe(3)
|
||||
expect(query[0].name).toBe('Howard Buckley')
|
||||
});
|
||||
})
|
||||
|
||||
test('should search by boolean isActive', () => {
|
||||
let query = new Query(TestData)
|
||||
.search('isActive', true)
|
||||
.results;
|
||||
.results
|
||||
|
||||
expect(query.length).toBe(4);
|
||||
});
|
||||
expect(query.length).toBe(4)
|
||||
})
|
||||
|
||||
test('should search by name', () => {
|
||||
let query = new Query(TestData)
|
||||
.search('name', 'steele')
|
||||
.results;
|
||||
.results
|
||||
|
||||
expect(query.length).toBe(2);
|
||||
});
|
||||
expect(query.length).toBe(2)
|
||||
})
|
||||
|
||||
test('should sort by boolean isActive', () => {
|
||||
let query = new Query(TestData)
|
||||
.sort('isActive')
|
||||
.results;
|
||||
.results
|
||||
|
||||
expect(query[0].name).toBe('Katelyn Steele');
|
||||
});
|
||||
expect(query[0].name).toBe('Katelyn Steele')
|
||||
})
|
||||
|
||||
test('should sort by number netWorth', () => {
|
||||
let query = new Query(TestData)
|
||||
.sort('netWorth')
|
||||
.results;
|
||||
.results
|
||||
|
||||
expect(query[0].name).toBe('Howard Buckley'); // Negative
|
||||
expect(query[1].name).toBe('Natalia Petty'); // 0
|
||||
expect(query[query.length - 1].name).toBe('Newman Mays'); // Richest
|
||||
});
|
||||
expect(query[0].name).toBe('Howard Buckley') // Negative
|
||||
expect(query[1].name).toBe('Natalia Petty') // 0
|
||||
expect(query[query.length - 1].name).toBe('Newman Mays') // Richest
|
||||
})
|
||||
|
||||
test('should sort by string name', () => {
|
||||
let query = new Query(TestData)
|
||||
.sort('name')
|
||||
.results;
|
||||
.results
|
||||
|
||||
expect(query[0].name).toBe('Dudley Conner');
|
||||
});
|
||||
expect(query[0].name).toBe('Dudley Conner')
|
||||
})
|
||||
|
||||
test('should filter', () => {
|
||||
let isAgeOver33 = a => a.age > 33;
|
||||
let isAgeOver33 = a => a.age > 33
|
||||
|
||||
let query = new Query(TestData)
|
||||
.filter(isAgeOver33)
|
||||
.results;
|
||||
.results
|
||||
|
||||
expect(query[0].name).toBe('Howard Buckley');
|
||||
});
|
||||
expect(query[0].name).toBe('Howard Buckley')
|
||||
})
|
||||
|
||||
test('should filter by key', () => {
|
||||
let isNumGT33 = num => num > 33;
|
||||
let isNumGT33 = num => num > 33
|
||||
|
||||
let query = new Query(TestData)
|
||||
.filterBy('age', isNumGT33)
|
||||
.results;
|
||||
.results
|
||||
|
||||
expect(query[0].name).toBe('Howard Buckley');
|
||||
});
|
||||
expect(query[0].name).toBe('Howard Buckley')
|
||||
})
|
||||
|
||||
test('should chain everything together', () => {
|
||||
let query = new Query(TestData)
|
||||
.search('isActive', true)
|
||||
.sort('name')
|
||||
.paginate(1, 2)
|
||||
.results;
|
||||
.results
|
||||
|
||||
expect(query.length).toBe(2);
|
||||
expect(query[0].name).toBe('Dudley Conner');
|
||||
expect(query[query.length - 1].name).toBe('Haynes Meadows');
|
||||
});
|
||||
expect(query.length).toBe(2)
|
||||
expect(query[0].name).toBe('Dudley Conner')
|
||||
expect(query[query.length - 1].name).toBe('Haynes Meadows')
|
||||
})
|
||||
|
|
10
package.json
10
package.json
|
@ -5,7 +5,8 @@
|
|||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "jest --coverage && npm run badge",
|
||||
"badge": "lcov-badge coverage/lcov.info -o coverage.svg"
|
||||
"badge": "lcov-badge coverage/lcov.info -o coverage.svg",
|
||||
"lint": "eslint ./*.js"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
@ -18,6 +19,13 @@
|
|||
},
|
||||
"homepage": "https://github.com/sharpshark28/json-query-chain#readme",
|
||||
"devDependencies": {
|
||||
"eslint": "^4.18.1",
|
||||
"eslint-config-standard": "^11.0.0",
|
||||
"eslint-plugin-import": "^2.9.0",
|
||||
"eslint-plugin-jest": "^21.12.2",
|
||||
"eslint-plugin-node": "^6.0.0",
|
||||
"eslint-plugin-promise": "^3.6.0",
|
||||
"eslint-plugin-standard": "^3.0.1",
|
||||
"jest": "^20.0.4",
|
||||
"lcov-badge": "^1.0.4"
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue