Jump To …

system.js

/*
 * system.js: Simple memory-based store for process environment variables and
 *            command-line arguments.
 *
 * (C) 2011, Charlie Robbins
 *
 */
 
var util = require('util'),
    Memory = require('./memory').Memory;
 

function System (options)

@options {Object} Options for this instance.

Constructor function for the System nconf store, a simple abstraction around the Memory store that can read process environment variables and command-line arguments.

var System = exports.System = function (options) {
  options = options || {};
  Memory.call(this, options);

  this.type      = 'system';
  this.overrides = options.overrides || null;
  this.env       = options.env       || false;
  this.argv      = options.argv      || false;
};

Inherit from the Memory store

util.inherits(System, Memory);

function loadSync ()

Loads the data passed in from process.env into this instance.

System.prototype.loadSync = function () {
  if (this.env) {
    this.loadEnv();
  }
  
  if (this.argv) {
    this.loadArgv();
  }
  
  if (this.overrides) {
    this.loadOverrides();
  }
  
  return this.store;
};

function loadOverrides ()

Loads any overrides set on this instance into the underlying managed Memory store.

System.prototype.loadOverrides = function () {
  if (!this.overrides) {
    return;
  }
  
  var self = this,
      keys = Object.keys(this.overrides);
  
  keys.forEach(function (key) {
    self.set(key, self.overrides[key]);
  });
  
  return this.store;
};

function loadArgv ()

Loads the data passed in from the command-line arguments into this instance.

System.prototype.loadArgv = function () {
  var self = this, 
      argv;
  
  if (typeof this.argv === 'object') {
    argv = require('optimist').options(this.argv).argv;
  }
  else if (this.argv) {
    argv = require('optimist').argv;
  }
  
  if (!argv) {
    return;
  }
  
  Object.keys(argv).forEach(function (key) {
    self.set(key, argv[key]);
  });
  
  return this.store;
};

function loadEnv ()

Loads the data passed in from process.env into this instance.

System.prototype.loadEnv = function () {
  var self = this;
  
  if (!this.env) {
    return;
  }
  
  Object.keys(process.env).filter(function (key) {
    return !self.env.length || self.env.indexOf(key) !== -1;
  }).forEach(function (key) {
    self.set(key, process.env[key]);
  });
    
  return this.store;
};