all files / lib/strategy/ LoadEnvConfigStrategy.js

100% Statements 24/24
80% Branches 8/10
100% Functions 3/3
100% Lines 24/24
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                                                     
'use strict';
 
var flat = require('flat');
var extend = require('../helpers/clone-extend').extend;
 
/**
 * Represents a strategy that loads configuration variables from the environment into the configuration.
 *
 * @class
 */
function LoadEnvConfigStrategy (prefix, aliases) {
  this.prefix = prefix;
  this.aliases = aliases || {};
}
 
LoadEnvConfigStrategy.prototype.process = function (config, callback) {
  var delimiter = '_';
  var prefix = this.prefix;
  var aliases = this.aliases;
  var flatConfig = { delimiter: delimiter };
  var flattendDefaultConfig = flat.flatten(config, flatConfig);
 
  var flatEnvValues = Object.keys(flattendDefaultConfig)
    .reduce(function(envVarMap, key) {
      var envKey = prefix + delimiter + key.toUpperCase();
 
      if (envKey in aliases) {
        envKey = aliases[envKey];
      }
 
      var value = process.env[envKey];
 
      if(value !== undefined){
        envVarMap[key] = typeof flattendDefaultConfig[key] === 'number' ?
          parseInt(value, 10) : value;
      }
 
      return envVarMap;
    }, {});
 
  var envConfig = flat.unflatten(flatEnvValues, flatConfig);
 
  Eif (envConfig) {
    extend(config, envConfig);
  }
 
  callback(null, config);
};
 
module.exports = LoadEnvConfigStrategy;