couchdb-update-views
Version:
Keep couchdb views up to date
74 lines (70 loc) • 2.27 kB
JavaScript
var async = require('async')
var validateConfig = require('./lib/validateConfig')
var should = require('should')
var inspect = require('eyespect').inspector()
var assert = require('assert')
var fs = require('fs')
var optimist = require('optimist')
var nconf = require('nconf')
var argv = optimist.demand(['config', 'docsDir']).argv
var configFilePath = argv.config
var docsDir = argv.docsDir
assert.ok(fs.existsSync(configFilePath), 'config file not found at path: ' + configFilePath)
assert.ok(fs.existsSync(docsDir), 'docsDir direcotry not found at path: ' + docsDir)
var config = nconf.argv().env().file({file: configFilePath})
var update = require('./update')
var path = require('path')
var cradleNconf = require('cradle-nconf')
function sync(callback) {
var couch = config.get('couch')
if (!couch) {
return callback({
error: 'a "couch" section must be specified in your config file json'
})
}
validateConfig(couch, function (err, reply) {
if (err) { return callback(err) }
var db = cradleNconf(config)
getDocs(docsDir, function (err, files) {
async.forEach(
files,
function(file, cb) {
var filePath = file.filePath
inspect(filePath, 'updating document at path')
var docPath = '_design/' + file.fileName.replace(/\.js/,'')
var doc = require(filePath)
inspect(docPath, 'docPath')
update(db, docPath, doc, cb)
},
callback
)
})
})
}
sync(function (err) {
should.not.exist(err, 'error updating document: ' + JSON.stringify(err, null, ' '))
inspect('done syncing design docs')
})
function getDocs(docsDir, cb) {
docsDir = path.resolve(docsDir)
fs.readdir(docsDir, function (err, fileNames) {
if (err) {
inspect(err, 'error reading document files at path: ' + docsDir)
return cb(err)
}
var files = fileNames.map(function (fileName) {
var filepath = path.join(docsDir, fileName)
var output = {
fileName: fileName,
filePath: filepath
}
return output
})
if (files.length === 0) {
inspect(docsDir, 'warning, no files where found in the docsDir you specified')
}
inspect(files,'files')
return cb(null, files)
})
}