neotoma/sync-server

View on GitHub
app/lib/jsonapi/addRelationshipToResourceObject.js

Summary

Maintainability
A
1 hr
Test Coverage
var _ = require('app/lib/lodash'),
  resourceIdentifierObjectFromDocument = require('app/lib/jsonapi/resourceIdentifierObjectFromDocument'),
  validateParams = require('app/lib/validateParams');

/**
 * Add document as relationship to JSON API resource object
 * @param {Object} object - JSON API resource object
 * @param {Object} document - Mongoose document
 * @param {string} name - Name of relationship (e.g. "author")
 * @param {string} [type=to-many] - Type of relationship (either "to-many" or "to-one")
 */
module.exports = function(object, document, name, type) {
  validateParams([{
    name: 'object', variable: object, required: true, requiredType: 'object'
  }, {
    name: 'document', variable: document, required: true, requiredType: 'object'
  }, {
    name: 'name', variable: name, required: true, requiredType: 'string'
  }, {
    name: 'type', variable: type, requiredType: 'string'
  }]);

  name = _.kebabCase(name);

  if (!object.relationships) {
    object.relationships = {};
  }

  if (!object.relationships[name]) {
    object.relationships[name] = {};
  }

  type = type ? type : 'to-many';

  if (type === 'to-many') {
    if (!object.relationships[name].data) {
      object.relationships[name].data = [];
    }

    object.relationships[name].data.push(resourceIdentifierObjectFromDocument(document));
  } else if (type === 'to-one') {
    object.relationships[name].data = resourceIdentifierObjectFromDocument(document);
  } else {
    throw new Error('Type parameter is not valid');
  }
};