1 | #!/usr/bin/env node
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 | const fs = require('fs')
|
8 | , path = require('path')
|
9 | , mkdirp = require('mkdirp')
|
10 |
|
11 | , util = require('../util')
|
12 |
|
13 | function usage (err) {
|
14 | if (err)
|
15 | console.error(err)
|
16 |
|
17 | console.error('Usage: makews.js /path/to/menu.json [--force]')
|
18 | }
|
19 |
|
20 | if (!process.argv[2])
|
21 | return usage()
|
22 |
|
23 | if (!fs.existsSync(process.argv[2]))
|
24 | return usage('File [' + process.argv[2] + '] does not exist')
|
25 |
|
26 | var menuFile = path.resolve(process.cwd(), process.argv[2])
|
27 | , exDir = path.dirname(menuFile)
|
28 | , menu = require(menuFile)
|
29 |
|
30 | if (!Array.isArray(menu))
|
31 | return usage('[' + process.argv[2] + '] doesn\'t contain an array of exercises')
|
32 |
|
33 | console.log(menuFile, exDir)
|
34 |
|
35 | if (menu.filter(function (name) { return typeof name != 'string' }).length)
|
36 | return usage('[' + process.argv[2] + '] doesn\'t contain an array of Strings')
|
37 |
|
38 | menu.forEach(processExercise)
|
39 |
|
40 | function 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 | }
|