all files / lib/ RegistrationBuilder.js

100% Statements 22/22
100% Branches 0/0
100% Functions 7/7
100% Lines 22/22
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69                                                  198×   198×       198×   198×   792×           186× 186×   186× 186×     198× 198×   198× 2178×     198× 190×          
"use strict";
 
var Resolver = require('./Resolver');
 
/**
 * <strong>Private constructor</strong>. Instances are normally created internally and returned from calls to
 * {@link Container#register}.
 *
 * The methods available are documented as Resolver modules. Several resolver methods can be chained by
 * supplying one of the following properties for readability:
 *
 * <ul>
 *   <li>and</li>
 *   <li>as</li>
 *   <li>use</li>
 *   <li>with</li>
 * </ul>
 *
 * @example
 * container.register("A", A)
 *   .with.constructor()
 *   .and.method("setB", "B");
 *
 * @param comp {*}
 * @constructor
 */
function RegistrationBuilder(comp) {
  this._comp = comp;
 
  this._initInterface();
}
 
var RB = RegistrationBuilder.prototype;
 
RB._initInterface = function() {
  var useGetter = this._createUseGetter();
 
  [ 'use', 'with', 'as', 'and' ]
    .forEach(function(alias) {
      Object.defineProperty(this, alias, {
        get: useGetter
      });
    }.bind(this));
};
 
RB._use = function(resolver) {
  var args = Array.prototype.slice.apply(arguments);
  args.shift(); // remove resolver
 
  this._comp.use(resolver, args);
  return this;
};
 
RB._createUseGetter = function() {
  var use = this._use.bind(this); // Copy
  var resolverNames = Object.keys(Resolver.StandardResolvers);
 
  resolverNames.forEach(function(resolver) {
    use[resolver] = use.bind(this, resolver);
  }.bind(this));
 
  return function() { // Getter function
    return use; // Getter result
  };
};
 
 
module.exports = RegistrationBuilder;