all files / lib/resolver/ field.js

100% Statements 14/14
100% Branches 2/2
100% Functions 3/3
100% Lines 14/14
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33                                     
"use strict";
 
var ResolutionError = require('../ResolutionError');
 
/**
 * Injects a dependency by assigning to a field of the component instance.
 *
 * @function
 * @exports Resolver:field
 */
module.exports = function field(ctx, res, next) {
  var instance = res.instance(true);
 
  var targetField = this.arg(0, "Field resolver: must supply target field name");
 
  var dep = this.args();
  dep.shift(); // Remove targetField
  if (dep.length !== 1) {
    throw new ResolutionError("Field resolver: Must supply exactly one dependency");
  }
  dep = dep[0];
 
  ctx.resolve(dep)
    .then(function(resolvedDep) {
      instance[targetField] = resolvedDep;
      next();
    })
    .catch(function(err) {
      res.fail(err);
      next();
    });
};