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 { | module.exports = class Query { | ||||||
|   constructor (data) { |   constructor (data) { | ||||||
|     this.data = data.map(item => { |     this.data = data.map(item => { | ||||||
|       item.sortScore = 0; |       item.sortScore = 0 | ||||||
|       return item; |       return item | ||||||
|     }); |     }) | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   get results () { |   get results () { | ||||||
|     return this.data; |     return this.data | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   filter (func) { |   filter (func) { | ||||||
|     this.data = this.data.filter(func); |     this.data = this.data.filter(func) | ||||||
|     return this; |     return this | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   filterBy (key, func) { |   filterBy (key, func) { | ||||||
|     this.data = this.data.filter(item => func(item[key])); |     this.data = this.data.filter(item => func(item[key])) | ||||||
|     return this; |     return this | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   search (key, term, score = 0) { |   search (key, term, score = 0) { | ||||||
|     switch (typeof term) { |     switch (typeof term) { | ||||||
|       case 'boolean': |       case 'boolean': | ||||||
|         this.data = this.data.filter(item => item[key] === term); |         this.data = this.data.filter(item => item[key] === term) | ||||||
|         break; |         break | ||||||
|       case 'string': |       case 'string': | ||||||
|         this.data = this.data.filter(item => { |         this.data = this.data.filter(item => { | ||||||
|           let regFind = new RegExp(term, 'gi'); |           let regFind = new RegExp(term, 'gi') | ||||||
|           let termMatches = (item[key].match(regFind) || []).length; |           let termMatches = (item[key].match(regFind) || []).length | ||||||
|           item.sortScore += termMatches; |           item.sortScore += termMatches | ||||||
|           return termMatches; |           return termMatches | ||||||
|         }); |         }) | ||||||
|         break; |         break | ||||||
|     } |     } | ||||||
|     return this; |     return this | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   sort (key = 'sortScore') { |   sort (key = 'sortScore') { | ||||||
|     this.data = this.data.sort((a, b) => { |     this.data = this.data.sort((a, b) => { | ||||||
|       if (a[key] < b[key]) return -1; |       if (a[key] < b[key]) return -1 | ||||||
|       if (a[key] > b[key]) return 1; |       if (a[key] > b[key]) return 1 | ||||||
|       return 0; |       return 0 | ||||||
|     }); |     }) | ||||||
|     return this; |     return this | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   paginate (page = 1, perPage = 10) { |   paginate (page = 1, perPage = 10) { | ||||||
|     let min = page * perPage - perPage; |     let min = page * perPage - perPage | ||||||
|     let max = min + perPage; |     let max = min + perPage | ||||||
|     this.data = this.data.slice(min, max); |     this.data = this.data.slice(min, max) | ||||||
|     return this; |     return this | ||||||
|   } |   } | ||||||
| }; | } | ||||||
|  |  | ||||||
							
								
								
									
										114
									
								
								index.test.js
									
										
									
									
									
								
							
							
						
						
									
										114
									
								
								index.test.js
									
										
									
									
									
								
							|  | @ -1,109 +1,109 @@ | ||||||
| const Query = require('./index'); | const Query = require('./index') | ||||||
| const TestData = require('./testdata.json'); | const TestData = require('./testdata.json') | ||||||
| 
 | 
 | ||||||
| test('should not modify passed data without chain alterations', () => { | test('should not modify passed data without chain alterations', () => { | ||||||
|   let query = new Query(TestData) |   let query = new Query(TestData) | ||||||
|   .results; |     .results | ||||||
| 
 | 
 | ||||||
|   expect(query).toMatchObject(TestData); |   expect(query).toMatchObject(TestData) | ||||||
| }); | }) | ||||||
| 
 | 
 | ||||||
| test('should paginate with default params', () => { | test('should paginate with default params', () => { | ||||||
|   let query = new Query(TestData) |   let query = new Query(TestData) | ||||||
|   .paginate() |     .paginate() | ||||||
|   .results; |     .results | ||||||
| 
 | 
 | ||||||
|   expect(query.length).toBe(9); |   expect(query.length).toBe(9) | ||||||
| }); | }) | ||||||
| 
 | 
 | ||||||
| test('should paginate with custom page length', () => { | test('should paginate with custom page length', () => { | ||||||
|   let query = new Query(TestData) |   let query = new Query(TestData) | ||||||
|   .paginate(1, 3) |     .paginate(1, 3) | ||||||
|   .results; |     .results | ||||||
| 
 | 
 | ||||||
|   expect(query.length).toBe(3); |   expect(query.length).toBe(3) | ||||||
|   expect(query[0].name).toBe('Haynes Meadows') |   expect(query[0].name).toBe('Haynes Meadows') | ||||||
| }); | }) | ||||||
| 
 | 
 | ||||||
| test('should paginate to second page with custom page length', () => { | test('should paginate to second page with custom page length', () => { | ||||||
|   let query = new Query(TestData) |   let query = new Query(TestData) | ||||||
|   .paginate(2, 3) |     .paginate(2, 3) | ||||||
|   .results; |     .results | ||||||
| 
 | 
 | ||||||
|   expect(query.length).toBe(3); |   expect(query.length).toBe(3) | ||||||
|   expect(query[0].name).toBe('Howard Buckley') |   expect(query[0].name).toBe('Howard Buckley') | ||||||
| }); | }) | ||||||
| 
 | 
 | ||||||
| test('should search by boolean isActive', () => { | test('should search by boolean isActive', () => { | ||||||
|   let query = new Query(TestData) |   let query = new Query(TestData) | ||||||
|   .search('isActive', true) |     .search('isActive', true) | ||||||
|   .results; |     .results | ||||||
| 
 | 
 | ||||||
|   expect(query.length).toBe(4); |   expect(query.length).toBe(4) | ||||||
| }); | }) | ||||||
| 
 | 
 | ||||||
| test('should search by name', () => { | test('should search by name', () => { | ||||||
|   let query = new Query(TestData) |   let query = new Query(TestData) | ||||||
|   .search('name', 'steele') |     .search('name', 'steele') | ||||||
|   .results; |     .results | ||||||
| 
 | 
 | ||||||
|   expect(query.length).toBe(2); |   expect(query.length).toBe(2) | ||||||
| }); | }) | ||||||
| 
 | 
 | ||||||
| test('should sort by boolean isActive', () => { | test('should sort by boolean isActive', () => { | ||||||
|   let query = new Query(TestData) |   let query = new Query(TestData) | ||||||
|   .sort('isActive') |     .sort('isActive') | ||||||
|   .results; |     .results | ||||||
| 
 | 
 | ||||||
|   expect(query[0].name).toBe('Katelyn Steele'); |   expect(query[0].name).toBe('Katelyn Steele') | ||||||
| }); | }) | ||||||
| 
 | 
 | ||||||
| test('should sort by number netWorth', () => { | test('should sort by number netWorth', () => { | ||||||
|   let query = new Query(TestData) |   let query = new Query(TestData) | ||||||
|   .sort('netWorth') |     .sort('netWorth') | ||||||
|   .results; |     .results | ||||||
| 
 | 
 | ||||||
|   expect(query[0].name).toBe('Howard Buckley'); // Negative
 |   expect(query[0].name).toBe('Howard Buckley') // Negative
 | ||||||
|   expect(query[1].name).toBe('Natalia Petty'); // 0
 |   expect(query[1].name).toBe('Natalia Petty') // 0
 | ||||||
|   expect(query[query.length - 1].name).toBe('Newman Mays'); // Richest
 |   expect(query[query.length - 1].name).toBe('Newman Mays') // Richest
 | ||||||
| }); | }) | ||||||
| 
 | 
 | ||||||
| test('should sort by string name', () => { | test('should sort by string name', () => { | ||||||
|   let query = new Query(TestData) |   let query = new Query(TestData) | ||||||
|   .sort('name') |     .sort('name') | ||||||
|   .results; |     .results | ||||||
| 
 | 
 | ||||||
|   expect(query[0].name).toBe('Dudley Conner'); |   expect(query[0].name).toBe('Dudley Conner') | ||||||
| }); | }) | ||||||
| 
 | 
 | ||||||
| test('should filter', () => { | test('should filter', () => { | ||||||
|   let isAgeOver33 = a => a.age > 33; |   let isAgeOver33 = a => a.age > 33 | ||||||
| 
 | 
 | ||||||
|   let query = new Query(TestData) |   let query = new Query(TestData) | ||||||
|   .filter(isAgeOver33) |     .filter(isAgeOver33) | ||||||
|   .results; |     .results | ||||||
| 
 | 
 | ||||||
|   expect(query[0].name).toBe('Howard Buckley'); |   expect(query[0].name).toBe('Howard Buckley') | ||||||
| }); | }) | ||||||
| 
 | 
 | ||||||
| test('should filter by key', () => { | test('should filter by key', () => { | ||||||
|   let isNumGT33 = num => num > 33; |   let isNumGT33 = num => num > 33 | ||||||
| 
 | 
 | ||||||
|   let query = new Query(TestData) |   let query = new Query(TestData) | ||||||
|   .filterBy('age', isNumGT33) |     .filterBy('age', isNumGT33) | ||||||
|   .results; |     .results | ||||||
| 
 | 
 | ||||||
|   expect(query[0].name).toBe('Howard Buckley'); |   expect(query[0].name).toBe('Howard Buckley') | ||||||
| }); | }) | ||||||
| 
 | 
 | ||||||
| test('should chain everything together', () => { | test('should chain everything together', () => { | ||||||
|   let query = new Query(TestData) |   let query = new Query(TestData) | ||||||
|   .search('isActive', true) |     .search('isActive', true) | ||||||
|   .sort('name') |     .sort('name') | ||||||
|   .paginate(1, 2) |     .paginate(1, 2) | ||||||
|   .results; |     .results | ||||||
| 
 | 
 | ||||||
|   expect(query.length).toBe(2); |   expect(query.length).toBe(2) | ||||||
|   expect(query[0].name).toBe('Dudley Conner'); |   expect(query[0].name).toBe('Dudley Conner') | ||||||
|   expect(query[query.length - 1].name).toBe('Haynes Meadows'); |   expect(query[query.length - 1].name).toBe('Haynes Meadows') | ||||||
| }); | }) | ||||||
|  |  | ||||||
							
								
								
									
										10
									
								
								package.json
									
										
									
									
									
								
							
							
						
						
									
										10
									
								
								package.json
									
										
									
									
									
								
							|  | @ -5,7 +5,8 @@ | ||||||
|   "main": "index.js", |   "main": "index.js", | ||||||
|   "scripts": { |   "scripts": { | ||||||
|     "test": "jest --coverage && npm run badge", |     "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": { |   "repository": { | ||||||
|     "type": "git", |     "type": "git", | ||||||
|  | @ -18,6 +19,13 @@ | ||||||
|   }, |   }, | ||||||
|   "homepage": "https://github.com/sharpshark28/json-query-chain#readme", |   "homepage": "https://github.com/sharpshark28/json-query-chain#readme", | ||||||
|   "devDependencies": { |   "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", |     "jest": "^20.0.4", | ||||||
|     "lcov-badge": "^1.0.4" |     "lcov-badge": "^1.0.4" | ||||||
|   } |   } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 sharpshark28
						sharpshark28