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 | ||||
|   } | ||||
| }; | ||||
| } | ||||
|  |  | |||
							
								
								
									
										114
									
								
								index.test.js
									
										
									
									
									
								
							
							
						
						
									
										114
									
								
								index.test.js
									
										
									
									
									
								
							|  | @ -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; | ||||
|     .paginate() | ||||
|     .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; | ||||
|     .paginate(1, 3) | ||||
|     .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; | ||||
|     .paginate(2, 3) | ||||
|     .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; | ||||
|     .search('isActive', true) | ||||
|     .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; | ||||
|     .search('name', 'steele') | ||||
|     .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; | ||||
|     .sort('isActive') | ||||
|     .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; | ||||
|     .sort('netWorth') | ||||
|     .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; | ||||
|     .sort('name') | ||||
|     .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; | ||||
|     .filter(isAgeOver33) | ||||
|     .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; | ||||
|     .filterBy('age', isNumGT33) | ||||
|     .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; | ||||
|     .search('isActive', true) | ||||
|     .sort('name') | ||||
|     .paginate(1, 2) | ||||
|     .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
	
	 sharpshark28
						sharpshark28