Code coverage report for core/starter.js

Statements: 89.66% (26 / 29)      Branches: 75% (9 / 12)      Functions: 100% (1 / 1)      Lines: 95.83% (23 / 24)      Ignored: none     

All files » core/ » starter.js
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 70 71 72 73                                    1           1 2       2 6 6 6 3   3       2 4     2       2 2 2     1 1 3 3 3   1                 1 1        
/*
 * Copyright 2014-2016, Sébastien Piquemal <sebpiq@gmail.com>
 *
 * rhizome is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * rhizome is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with rhizome.  If not, see <http://www.gnu.org/licenses/>.
 */
"use strict";
 
var path = require('path')
  , _ = require('underscore')
  , async = require('async')
  , errors = require('./errors')
  , connections = require('../connections')
 
module.exports = function(manager, servers, done) {
  var validOps = []
    , startOps = []
 
  // Create list of operations to execute asynchronously.
  ;[manager].concat(servers).forEach((server) => {
    validOps.push((next) => {
      server.validateConfig((err) => {
        if (err) {
          Eif (err instanceof errors.ValidationError) next(null, err)
          else next(err)
        } else next()
      })
    })
  })
  servers.forEach((server) => {
    startOps.push(server.start.bind(server))
  })
 
  async.series([
    
    // 1) handles validation of all configs
    (validationDone) => {
      async.series(validOps, (err, validationErrors) => {
        Iif (err) return validationDone(err)
        else if (_.filter(validationErrors).length === 0) return validationDone()
 
        // Prefix validation errors and merge them.
        var merged = {}
        validationErrors.forEach((errors, i) => {
          Iif (!errors) return
          var prefix = i === 0 ? 'connections': 'servers.' + (i - 1)
          _.pairs(errors.fields).forEach((p) => merged[prefix + p[0]] = p[1])
        })
        validationDone(new errors.ValidationError(merged))
      })
    },
 
    // 2) starts the manager
    manager.start.bind(manager),
 
    // 3) handles starting all servers
    (startDone) => { 
      connections.manager = manager
      async.parallel(startOps, startDone) 
    }
 
  ], done)
}