apemandb
Version:
Database for apeman project.
45 lines (40 loc) • 1.31 kB
JavaScript
/**
* Create seeds from files.
* @function fromFiles
*/
const colorprint = require('colorprint')
const aglob = require('aglob')
const path = require('path')
const { pascalcase } = require('stringcase')
const applySeed = require('./apply_seed')
/** @lends fromFiles */
function fromFiles (models, pattern) {
let seeds = {}
aglob.sync(pattern)
.filter((filename) => !/^_/.test(path.basename(filename)))
.forEach((filename) => {
let modelName = fromFiles.modelNameForFile(filename)
let isKnownModel = models.hasOwnProperty(modelName)
if (!isKnownModel) {
colorprint.warn(`[apemandb] Skip seeding for unknown model: ${modelName}`)
return
}
seeds[ modelName ] = function seed (model, options) {
let data = require(path.resolve(filename))
return applySeed(model, data, options)
}
})
let shouldWarn = pattern && pattern.length && !Object.keys(seeds).length
if (shouldWarn) {
colorprint.warn('[apemandb] Seed not found with pattern: ', pattern)
}
return seeds
}
Object.assign(fromFiles, {
modelNameForFile (filename) {
let basename = path.basename(filename, path.extname(filename))
return pascalcase(basename.replace(/^\d+\./, '').replace(/[._]seed$/, ''))
}
})
module.exports = fromFiles