linagora/hublin

View on GitHub
backend/core/db/mongo/schemas/tuple.js

Summary

Maintainability
A
30 mins
Test Coverage
'use strict';

var mongoose = require('mongoose');

var ICON_OBJECT_TYPE = ['icon', 'url'];
module.exports.ICON_OBJECT_TYPE = ICON_OBJECT_TYPE;

var TARGET_OBJECT_TYPE = ['user', 'community'];
module.exports.TARGET_OBJECT_TYPE = TARGET_OBJECT_TYPE;

var Tuple = new mongoose.Schema({
  objectType: {type: String, required: true},
  id: {type: mongoose.Schema.Types.Mixed, required: true}
}, {_id: false});
module.exports.Tuple = Tuple;

function validateTuple(tuple) {
  if (!tuple) { return true; }
  if (! ('objectType' in tuple)) { return false; }
  if (! ('id' in tuple)) { return false; }
  if (typeof tuple.objectType !== 'string') { return false; }
  return true;
}
module.exports.validateTuple = validateTuple;

function validateTuples(tuples) {
  if (!tuples) { return true; }
  for (var i = 0, len = tuples.length; i < len; i++) {
    if (!validateTuple(tuples[i])) {
      return false;
    }
  }
  return true;
}
module.exports.validateTuples = validateTuples;

function validateIconTuple(value) {
  if (!value) { return true;}
  return (ICON_OBJECT_TYPE.indexOf(value.objectType) >= 0);
}
module.exports.validateIconTuple = validateIconTuple;

function validateTargetTuples(value) {
  for (var i = 0, len = value.length; i < len; i++) {
    if (TARGET_OBJECT_TYPE.indexOf(value[i].objectType) < 0) {
      return false;
    }
  }
  return true;
}
module.exports.validateTargetTuples = validateTargetTuples;