-
-
Notifications
You must be signed in to change notification settings - Fork 3.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #12462 from hasezoey/setMultipleOptionsAtOnce
feat(index): add ability to set multiple options at once in ".set"
- Loading branch information
Showing
7 changed files
with
276 additions
and
48 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
/*! | ||
* Module requirements | ||
*/ | ||
|
||
'use strict'; | ||
|
||
const MongooseError = require('./mongooseError'); | ||
const util = require('util'); | ||
const combinePathErrors = require('../helpers/error/combinePathErrors'); | ||
|
||
class SetOptionError extends MongooseError { | ||
/** | ||
* Mongoose.set Error | ||
* | ||
* @api private | ||
* @inherits MongooseError | ||
*/ | ||
constructor() { | ||
super(''); | ||
|
||
this.errors = {}; | ||
} | ||
|
||
/** | ||
* Console.log helper | ||
*/ | ||
toString() { | ||
return combinePathErrors(this); | ||
} | ||
|
||
/** | ||
* inspect helper | ||
* @api private | ||
*/ | ||
inspect() { | ||
return Object.assign(new Error(this.message), this); | ||
} | ||
|
||
/** | ||
* add message | ||
* @param {String} key | ||
* @param {String|Error} error | ||
* @api private | ||
*/ | ||
addError(key, error) { | ||
if (error instanceof SetOptionError) { | ||
const { errors } = error; | ||
for (const optionKey of Object.keys(errors)) { | ||
this.addError(optionKey, errors[optionKey]); | ||
} | ||
|
||
return; | ||
} | ||
|
||
this.errors[key] = error; | ||
this.message = combinePathErrors(this); | ||
} | ||
} | ||
|
||
|
||
if (util.inspect.custom) { | ||
// Avoid Node deprecation warning DEP0079 | ||
SetOptionError.prototype[util.inspect.custom] = SetOptionError.prototype.inspect; | ||
} | ||
|
||
/** | ||
* Helper for JSON.stringify | ||
* Ensure `name` and `message` show up in toJSON output re: gh-9847 | ||
* @api private | ||
*/ | ||
Object.defineProperty(SetOptionError.prototype, 'toJSON', { | ||
enumerable: false, | ||
writable: false, | ||
configurable: true, | ||
value: function() { | ||
return Object.assign({}, this, { name: this.name, message: this.message }); | ||
} | ||
}); | ||
|
||
|
||
Object.defineProperty(SetOptionError.prototype, 'name', { | ||
value: 'SetOptionError' | ||
}); | ||
|
||
class SetOptionInnerError extends MongooseError { | ||
/** | ||
* Error for the "errors" array in "SetOptionError" with consistent message | ||
* @param {String} key | ||
*/ | ||
constructor(key) { | ||
super(`"${key}" is not a valid option to set`); | ||
} | ||
} | ||
|
||
SetOptionError.SetOptionInnerError = SetOptionInnerError; | ||
|
||
/*! | ||
* Module exports | ||
*/ | ||
|
||
module.exports = SetOptionError; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
'use strict'; | ||
|
||
/*! | ||
* ignore | ||
*/ | ||
|
||
module.exports = function combinePathErrors(err) { | ||
const keys = Object.keys(err.errors || {}); | ||
const len = keys.length; | ||
const msgs = []; | ||
let key; | ||
|
||
for (let i = 0; i < len; ++i) { | ||
key = keys[i]; | ||
if (err === err.errors[key]) { | ||
continue; | ||
} | ||
msgs.push(key + ': ' + err.errors[key].message); | ||
} | ||
|
||
return msgs.join(', '); | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.