diff options
Diffstat (limited to 'src/js/NextSearch/Condition/ConditionBuilder.js')
-rw-r--r-- | src/js/NextSearch/Condition/ConditionBuilder.js | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/src/js/NextSearch/Condition/ConditionBuilder.js b/src/js/NextSearch/Condition/ConditionBuilder.js new file mode 100644 index 0000000..02d8d51 --- /dev/null +++ b/src/js/NextSearch/Condition/ConditionBuilder.js @@ -0,0 +1,79 @@ +import FieldBuilder from '@js/NextSearch/Field/FieldBuilder'; +import AndCondition from '@js/NextSearch/Condition/AndCondition'; +import OrCondition from '@js/NextSearch/Condition/OrCondition'; +import XorCondition from '@js/NextSearch/Condition/XorCondition'; + +export default class ConditionBuilder { + + /** + * + * @param {AbstractSearchCondition} condition + */ + constructor(condition) { + this._condition = condition; + } + + /** + * + * @param {(String|Function)} [param] + * @returns {FieldBuilder|ConditionBuilder} + */ + where(param) { + if(typeof param === 'string') { + return new FieldBuilder(param, this._condition, this); + } else if(typeof param === 'function') { + param(this); + } + + return this; + } + + /** + * + * @param {(String|Function)} [param] + * @returns {FieldBuilder|ConditionBuilder} + */ + and(param) { + return this._createCondition(param, AndCondition); + } + + /** + * + * @param {(String|Function)} [param] + * @returns {FieldBuilder|ConditionBuilder} + */ + or(param) { + return this._createCondition(param, OrCondition); + } + + /** + * + * @param {(String|Function)} [param] + * @returns {FieldBuilder|ConditionBuilder} + */ + xor(param) { + return this._createCondition(param, XorCondition); + } + + /** + * + * @param param + * @param conditionClass + * @returns {FieldBuilder|ConditionBuilder} + * @private + */ + _createCondition(param, conditionClass) { + let condition = new conditionClass(), + builder = new ConditionBuilder(condition); + + this._condition.add(condition); + if(typeof param === 'string') { + return builder.where(param); + } else if(typeof param === 'function') { + param(builder); + return this; + } + + return builder; + } +}
\ No newline at end of file |