81 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* eslint-disable no-process-exit */
 | |
| require('babel-register');
 | |
| require('dotenv').load();
 | |
| var adler32 = require('adler32');
 | |
| 
 | |
| var Rx = require('rx'),
 | |
|     _ = require('lodash'),
 | |
|     getChallenges = require('./getChallenges'),
 | |
|     app = require('../server/server');
 | |
| 
 | |
| 
 | |
| var Challenge = app.models.Challenge;
 | |
| var destroy = Rx.Observable.fromNodeCallback(Challenge.destroyAll, Challenge);
 | |
| var create = Rx.Observable.fromNodeCallback(Challenge.create, Challenge);
 | |
| 
 | |
| destroy()
 | |
|   .flatMap(function() { return Rx.Observable.from(getChallenges()); })
 | |
|   .flatMap(function(challengeSpec) {
 | |
|     var order = challengeSpec.order;
 | |
|     var block = challengeSpec.name;
 | |
|     var superBlock = challengeSpec.superBlock;
 | |
|     var superOrder = challengeSpec.superOrder;
 | |
|     var isBeta = !!challengeSpec.isBeta;
 | |
|     var isComingSoon = !!challengeSpec.isComingSoon;
 | |
|     var fileName = challengeSpec.fileName;
 | |
|     var helpRoom = challengeSpec.helpRoom || 'Help';
 | |
| 
 | |
|     console.log('parsed %s successfully', block);
 | |
| 
 | |
|     // challenge file has no challenges...
 | |
|     if (challengeSpec.challenges.length === 0) {
 | |
|       return Rx.Observable.just([{ block: 'empty ' + block }]);
 | |
|     }
 | |
| 
 | |
|     var challenges = challengeSpec.challenges
 | |
|       .map(function(challenge, index) {
 | |
|         challenge.name = challenge.title.replace(/[^a-zA-Z0-9\s]/g, '');
 | |
| 
 | |
|         challenge.dashedName = challenge.name
 | |
|           .toLowerCase()
 | |
|           .replace(/\:/g, '')
 | |
|           .replace(/\s/g, '-');
 | |
| 
 | |
|         challenge.checksum = adler32.sum(
 | |
|           Buffer(challenge.title +
 | |
|             JSON.stringify(challenge.description) +
 | |
|             JSON.stringify(challenge.challengeSeed) +
 | |
|             JSON.stringify(challenge.tests)));
 | |
| 
 | |
|         challenge.fileName = fileName;
 | |
|         challenge.helpRoom = helpRoom;
 | |
|         challenge.order = order;
 | |
|         challenge.suborder = index + 1;
 | |
|         challenge.block = block;
 | |
|         challenge.isBeta = challenge.isBeta || isBeta;
 | |
|         challenge.isComingSoon = challenge.isComingSoon || isComingSoon;
 | |
|         challenge.time = challengeSpec.time;
 | |
|         challenge.superOrder = superOrder;
 | |
|         challenge.superBlock = superBlock
 | |
|           .split('-')
 | |
|           .map(function(word) {
 | |
|             return _.capitalize(word);
 | |
|           })
 | |
|           .join(' ');
 | |
| 
 | |
|         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);
 | |
|     }
 | |
|   );
 |