conveyal/modeify

View on GitHub
scripts/2016/add-route-resource

Summary

Maintainability
Test Coverage
#!/usr/bin/env node

var prompt = require('prompt')
var RouteResource = require('../lib/route-resource/model')

prompt.start()

createThenPrompt()

function createThenPrompt () {
  createRouteResource(function (err) {
    if (err) {
      throw err
    } else {
      prompt.get({
        name: 'yesno',
        message: 'Create another resource?',
        default: 'yes'
      }, function (err, result) {
        if (err) throw err
        var yesno = result.yesno.toLowerCase().trim()
        if (yesno === 'yes' || yesno === 'y') {
          createThenPrompt()
        } else {
          process.exit()
        }
      })
    }
  })
}

function createRouteResource (done) {
  prompt.get([{
    name: 'name',
    required: true
  }, {
    name: 'title',
    required: true
  }, {
    name: 'description',
    required: true
  }], function (err, results) {
    if (err) {
      done(err)
    } else {
      getTags([], function (err, tags) {
        if (err) {
          done(err)
        } else {
          RouteResource.create({
            name: results.name,
            title: results.title,
            description: results.description,
            tags: tags
          }, done)
        }
      })
    }
  })
}

function getTags (tags, done) {
  prompt.get({
    name: 'tags',
    message: 'Enter one tag set at a time. Each tag must be separated by a comma. An empty tag set completes this resource.'
  }, function (err, results) {
    if (err) {
      done(err)
    } else if (results.tags.length === 0) {
      if (tags.length === 0) {
        console.log('Must enter at least one tag set.')
        getTags([], done)
      } else {
        done(null, tags)
      }
    } else {
      tags.push(results.tags.split(',').map(toLowerCase).map(trim))
      getTags(tags, done)
    }
  })
}

function toLowerCase (s) {
  return s.toLowerCase()
}

function trim (s) {
  return s.trim()
}