CleverStack/clever-odm

View on GitHub
lib/model/associations/loaders/eager.js

Summary

Maintainability
A
1 hr
Test Coverage
module.exports.load = function eagerLoad(findOptions) {
  var populate = []
    , addToPopulate = function(modelInclude, index, array, parentInclude) {
        var include = modelInclude.model.modelName || modelInclude.modelName;

        if (parentInclude) {
          include = parentInclude + '.' + include;
        }

        populate.push(include);
        if (modelInclude.include) {
          modelInclude.include.forEach(function() {
            addToPopulate.apply(this, [arguments[0], arguments[1], arguments[2], include]);
          });
        }
      };

  if (findOptions.include) {
    findOptions.include.forEach(addToPopulate);
  }

  return populate.length ? populate : false;
};

module.exports.afterLoad = function hydrateAfterEagerLoad(findOptions, entity) {
  var SourceModel = this
    , model       = !!entity && entity !== null ? new SourceModel(entity) : null;

  if (model !== null && findOptions.include && findOptions.include.length) {
    findOptions.include.forEach(function(_include) {
      var modelName   = _include.model.modelName
        , as          = modelName
        , CsModel     = this.models[modelName];

      if (!!CsModel && !!model.entity[as]) {
        if (model.entity[as] instanceof Array) {
          for (var i = 0; i < model.entity[as].length; i++) {
            if (!(model.entity[as][i] instanceof CsModel)) {
              model.entity[as][i] = new CsModel(model.entity[as][i]);
            }
          }
        } else {
          if (!(model.entity[as] instanceof CsModel)) {
            model.entity[as] = new CsModel(model[as]);
          }
        }
      }
    }
    .bind(this));
  }
};