UNPKG

1.9 kBJavaScriptView Raw
1#!/usr/bin/env node
2
3// make the basic skeleton of a workshopper given a menu.json
4// assumes the menu.json is in the directory under which the
5// exercises will be placed
6
7const fs = require('fs')
8 , path = require('path')
9 , mkdirp = require('mkdirp')
10
11 , util = require('../util')
12
13function usage (err) {
14 if (err)
15 console.error(err)
16
17 console.error('Usage: makews.js /path/to/menu.json [--force]')
18}
19
20if (!process.argv[2])
21 return usage()
22
23if (!fs.existsSync(process.argv[2]))
24 return usage('File [' + process.argv[2] + '] does not exist')
25
26var menuFile = path.resolve(process.cwd(), process.argv[2])
27 , exDir = path.dirname(menuFile)
28 , menu = require(menuFile)
29
30if (!Array.isArray(menu))
31 return usage('[' + process.argv[2] + '] doesn\'t contain an array of exercises')
32
33console.log(menuFile, exDir)
34
35if (menu.filter(function (name) { return typeof name != 'string' }).length)
36 return usage('[' + process.argv[2] + '] doesn\'t contain an array of Strings')
37
38menu.forEach(processExercise)
39
40function processExercise (name) {
41 var dir = util.dirFromName(exDir, name)
42 , files = {
43 'problem.md' : '# Write stuff about ' + name + ' here'
44 , 'exercise.js' : 'const Exercise = require(\'workshopper-exercise\'); module.exports = new Exercise()'
45 , 'solution/solution.js' : '// solution stuff here'
46 }
47
48 console.log('Making', name, '...')
49
50 mkdirp(path.join(dir, 'solution'), function (err) {
51 if (err)
52 return console.error('Error making', dir + ':', err)
53
54 Object.keys(files).forEach(function (f) {
55 var filePath = path.join(dir, f)
56
57 fs.exists(filePath, function (exists) {
58 if (exists && process.argv[3] !== '--force')
59 return
60
61 fs.writeFile(
62 filePath
63 , files[f]
64 , 'utf8'
65 , function () {}
66 )
67 })
68 })
69 })
70}