joshuavial/sustain

View on GitHub
commands/update.js

Summary

Maintainability
A
35 mins
Test Coverage
var sustainFs = require('../lib/sustain-fs')
var readDependencies = require('../lib/read-dependencies')

module.exports = function (done) {
  if (checkError.apply(this, arguments)) { return }

  sustainFs.read('.', function (err, json) {
    if (sustainFs.checkError(err, done)) { return }

    buildDependencies(function (err, dependencies) {
      if (err) { return done(err)}
      json.dependencies = json.dependencies || {}
      json = buildDependencyJSON(json, dependencies)
      sustainFs.write(process.cwd(), json, done)
    })
  })
}

function checkError (done) {
  done = arguments[arguments.length - 1]
  if (arguments.length !== 1) {
    done(new Error('Does not take arguments.'))
    return true
  }
  return false
}

function buildDependencyJSON (json, dependencies) {
  dependencies.forEach(function (dep) {
    var parts = dep.replace('├── ', '').replace('└── ', '').split('@')
    var packageName = parts[0]
    if (packageName !== '') {
      json.dependencies[packageName] = {
        version: parts[1],
        weight: weightFor(packageName, json.dependencies)
      }
    }
  })
  return json
}
function buildDependencies (done) {
  readDependencies(function (err, contents) {
    if (err) {return done(err)}
    var deps = contents.split('\n')
    deps.shift()
    done(null, deps)
  })
}

function weightFor (packageName, dependencies) {
  if (dependencies[packageName] && dependencies[packageName].weight) {
    return dependencies[packageName].weight
  }
  return 1
}