synctos
Version:
The Syncmaker. A tool to build comprehensive sync functions for Couchbase Sync Gateway.
73 lines (69 loc) • 2 kB
JavaScript
function() {
function isNonEmpty(doc, oldDoc, value, oldValue) {
return doc.dynamicMustNotBeEmptyPropertiesEnforced;
}
function minimumDynamicLength(doc, oldDoc, value, oldValue) {
return doc.dynamicLengthPropertyIsValid ? value.length : value.length + 1;
}
function maximumDynamicLength(doc, oldDoc, value, oldValue) {
return doc.dynamicLengthPropertyIsValid ? value.length : value.length - 1;
}
return {
arrayDoc: {
channels: { write: 'write' },
typeFilter: function(doc) {
return doc._id === 'arrayDoc';
},
propertyValidators: {
staticLengthValidationProp: {
type: 'array',
minimumLength: 2,
maximumLength: 2
},
dynamicLengthPropertyIsValid: {
type: 'boolean'
},
dynamicLengthValidationProp: {
type: 'array',
minimumLength: minimumDynamicLength,
maximumLength: maximumDynamicLength
},
staticNonEmptyValidationProp: {
type: 'array',
mustNotBeEmpty: true
},
dynamicMustNotBeEmptyPropertiesEnforced: {
type: 'boolean'
},
dynamicNonEmptyValidationProp: {
type: 'array',
mustNotBeEmpty: isNonEmpty
},
staticArrayElementsValidatorProp: {
type: 'array',
arrayElementsValidator: {
type: 'integer',
required: true,
minimumValue: 0,
maximumValue: 2
}
},
dynamicArrayElementsType: {
type: 'string'
},
dynamicArrayElementsRequired: {
type: 'boolean'
},
dynamicArrayElementsValidatorProp: {
type: 'array',
arrayElementsValidator: function(doc, oldDoc, value, oldValue) {
return {
type: doc.dynamicArrayElementsType,
required: doc.dynamicArrayElementsRequired
};
}
}
}
}
};
}