freeCodeCamp/seed/index.js

71 lines
2.2 KiB
JavaScript
Raw Normal View History

2015-06-03 03:32:10 +00:00
/* eslint-disable no-process-exit */
2015-07-03 06:43:19 +00:00
require('babel/register');
2015-06-03 03:32:10 +00:00
require('dotenv').load();
2015-11-02 01:20:03 +00:00
var Rx = require('rx'),
2015-08-08 14:50:35 +00:00
_ = require('lodash'),
2015-11-02 01:20:03 +00:00
getChallenges = require('./getChallenges'),
app = require('../server/server');
2015-06-03 03:32:10 +00:00
2015-06-03 03:32:10 +00:00
var Challenge = app.models.Challenge;
var destroy = Rx.Observable.fromNodeCallback(Challenge.destroyAll, Challenge);
var create = Rx.Observable.fromNodeCallback(Challenge.create, Challenge);
2015-06-03 03:32:10 +00:00
destroy()
2015-11-02 01:20:03 +00:00
.flatMap(function() { return Rx.Observable.from(getChallenges()); })
.flatMap(function(challengeSpec) {
var order = challengeSpec.order;
2015-08-10 05:14:31 +00:00
var block = challengeSpec.name;
2015-12-05 05:06:36 +00:00
var superBlock = challengeSpec.superBlock;
2015-12-07 06:41:28 +00:00
var superOrder = challengeSpec.superOrder;
var isBeta = !!challengeSpec.isBeta;
2015-12-07 06:41:28 +00:00
var isComingSoon = !!challengeSpec.isComingSoon;
var fileName = challengeSpec.fileName;
2015-11-02 01:20:03 +00:00
console.log('parsed %s successfully', block);
2015-08-10 05:14:31 +00:00
// challenge file has no challenges...
if (challengeSpec.challenges.length === 0) {
return Rx.Observable.just([{ block: 'empty ' + block }]);
}
2015-08-08 14:50:35 +00:00
var challenges = challengeSpec.challenges
.map(function(challenge, index) {
challenge.name = challenge.title.replace(/[^a-zA-Z0-9\s]/g, '');
2015-08-10 05:14:31 +00:00
challenge.dashedName = challenge.name
.toLowerCase()
.replace(/\:/g, '')
.replace(/\s/g, '-');
challenge.fileName = fileName;
challenge.order = order;
challenge.suborder = index + 1;
2015-08-10 05:14:31 +00:00
challenge.block = block;
challenge.isBeta = challenge.isBeta || isBeta;
2015-12-07 06:41:28 +00:00
challenge.isComingSoon = challenge.isComingSoon || isComingSoon;
challenge.time = challengeSpec.time;
2015-12-07 06:41:28 +00:00
challenge.superOrder = superOrder;
challenge.superBlock = superBlock
.split('-')
.map(function(word) {
return _.capitalize(word);
})
.join(' ');
2015-08-10 05:14:31 +00:00
2015-07-14 01:30:51 +00:00
return challenge;
});
return create(challenges);
})
.subscribe(
function(challenges) {
console.log('%s successfully saved', challenges[0].block);
},
function(err) { throw err; },
function() {
console.log('challenge seed completed');
process.exit(0);
2015-06-03 03:32:10 +00:00
}
);