Preparing for bonfire challenges, create Bonfire model, BonfireCompletion model, update bonfire controller, create initial bonfire seed data

This commit is contained in:
Nathan Leniz
2015-01-21 21:32:13 -05:00
parent 9e41b0ca7b
commit 6ea5f5c895
6 changed files with 698 additions and 436 deletions

View File

@ -1,68 +1,75 @@
var _ = require('lodash'),
debug = require('debug')('freecc:cntr:bonfires');
// bonfire = require('./../models/Bonfire');
debug = require('debug')('freecc:cntr:bonfires'),
Bonfire = require('./../models/Bonfire');
/**
* Bonfire controller
*/
var highestBonfireNumber = 10;
exports.index = function(req, res) {
res.render('bonfire/bonfire.jade', {
title: 'Learn to code with Bonfire'
});
//Bonfire.find({}, null, { sort: { bonfireNumber: 1 } }, function(err, c) {
// if (err) {
// debug('bonfire err: ', err);
// next(err);
// }
//});
Bonfire.find({}, null, { sort: { bonfireNumber: 1 } }, function(err, c) {
if (err) {
debug('bonfire err: ', err);
next(err);
}
});
};
//exports.returnBonfire = function(req, res, next) {
// var bonfireNumber = parseInt(req.params.bonfireNumber) || 0;
// var verbs = [
// 'ACED',
// 'NAILED',
// 'ROCKED',
// 'SCORCHED',
// 'DEVASTATED',
// 'OWNED',
// 'CRUSHED',
// 'CONQUERED',
// 'KILLED',
// 'SHREDDED',
// 'ANNIHILATED',
// 'NUKED'
// ];
// var phrases = [
// "Shout it from on top of a mountain",
// "Tell everyone and their dogs",
// "Show them. Show them all!",
// "Inspire your friends",
// "Tell the world of your greatness",
// "Look accomplished on social media",
// "Share news of your grand endeavor",
// "Establish your alibi for the past two hours",
// "Prove to mom that computers aren't just for games"
// ];
// if (bonfireNumber > 53) { bonfireNumber = 0; }
// Bonfire.find({}, null, { sort: { bonfireNumber: 1 } }, function(err, c) {
// if (err) {
// debug('bonfire err: ', err);
// next(err);
// }
// res.render('bonfires/show', {
// //title: 'bonfire: ' + c[bonfireNumber].name,
// //name: c[bonfireNumber].name,
// //video: c[bonfireNumber].video,
// //time: c[bonfireNumber].time,
// //steps: c[bonfireNumber].steps,
// //number: bonfireNumber,
// //categories: c[bonfireNumber].category,
// //cc: req.user ? req.user.bonfiresHash : undefined,
// //points: req.user ? req.user.points : undefined,
// //verb: verbs[Math.floor(Math.random() * verbs.length)],
// //phrase: phrases[Math.floor(Math.random() * phrases.length)],
// //bonfires: c
// });
// });
//};
exports.returnBonfire = function(req, res, next) {
var bonfireNumber = parseInt(req.params.bonfireNumber) || 0;
var verbs = [
'ACED',
'NAILED',
'ROCKED',
'SCORCHED',
'DEVASTATED',
'OWNED',
'CRUSHED',
'CONQUERED',
'KILLED',
'SHREDDED',
'ANNIHILATED',
'NUKED'
];
var phrases = [
"Shout it from on top of a mountain",
"Tell everyone and their dogs",
"Show them. Show them all!",
"Inspire your friends",
"Tell the world of your greatness",
"Look accomplished on social media",
"Share news of your grand endeavor",
"Establish your alibi for the past two hours",
"Prove to mom that computers aren't just for games"
];
if (bonfireNumber > highestBonfireNumber) { bonfireNumber = 0; }
Bonfire.find({}, null, { sort: { bonfireNumber: 1 } }, function(err, c) {
if (err) {
debug('bonfire err: ', err);
next(err);
}
res.render('bonfires/show', {
title: 'bonfire: ' + c[bonfireNumber].name,
name: c[bonfireNumber].name,
number: bonfireNumber,
difficulty: c[bonfireNumber].difficulty,
description: c[bonfireNumber].description,
publicTests: c[bonfireNumber].publicTests,
privateTests: c[bonfireNumber].privateTests,
challengeSeed: c[bonfireNumber].challengeSeed,
cc: req.user ? req.user.bonfiresHash : undefined,
points: req.user ? req.user.points : undefined,
verb: verbs[Math.floor(Math.random() * verbs.length)],
phrase: phrases[Math.floor(Math.random() * phrases.length)],
bonfires: c
});
});
};

View File

@ -6,6 +6,8 @@ var _ = require('lodash'),
debug = require('debug')('freecc:cntr:challenges'),
Challenge = require('./../models/Challenge');
var highestChallengeNumber = 53;
exports.returnChallenge = function(req, res, next) {
var challengeNumber = parseInt(req.params.challengeNumber) || 0;
var verbs = [
@ -33,7 +35,7 @@ exports.returnChallenge = function(req, res, next) {
"Establish your alibi for the past two hours",
"Prove to mom that computers aren't just for games"
];
if (challengeNumber > 53) { challengeNumber = 0; }
if (challengeNumber > highestChallengeNumber) { challengeNumber = 0; }
Challenge.find({}, null, { sort: { challengeNumber: 1 } }, function(err, c) {
if (err) {
debug('Challenge err: ', err);

View File

@ -1,14 +1,27 @@
var mongoose = require('mongoose');
var secrets = require('../config/secrets');
/**
*
* @type {exports.Schema}
*/
new Schema({ _id: String })
var ObjectId = require('mongoose').Types.ObjectId;
var myObjectId = ObjectId.fromString('myhexstring');
var bonfireSchema = new mongoose.Schema({
name: {
type: String,
unique: true
},
link: String,
time: String,
bonfireNumber: Number
difficulty: Number,
description: Array,
publicTests: Array,
privateTests: Array,
challengeSeed: String,
bonfireNumber: Number,
number: Number
});
module.exports = mongoose.model('Bonfire', bonfireSchema);

View File

@ -0,0 +1,15 @@
var mongoose = require('mongoose');
var secrets = require('../config/secrets');
var bonfireCompletionSchema = new mongoose.Schema({
dateCompleted: Number,
camper1: String,
camper2: String,
bonfireNumber: {
bonfireNumber: Number,
bonfireId: ObjectId
},
solution: String
});
module.exports = mongoose.model('BonfireCompletion', bonfireCompletionSchema);

225
seed_data/bonfires.json Normal file
View File

@ -0,0 +1,225 @@
{
"name": "Palindrome Tester",
"difficulty": 1, // should be a range from 1-5
"description": [
"Your job is to determine if a provided string is a palindrome.",
"The definition of a palindrome can be found at http://en.wikipedia.org/wiki/Palindrome.",
"Strings will be passed in with varying formats, such as \"racecar\", \"RaceCar\", and \"race CAR\" among others.",
"Return true if the string is a palindrome, otherwise false"
],
"publicTests": [
"expect(palindrome(\"eye\")).to.be.a.(\"boolean\");",
"assert.deepEqual(palindrome(\"eye\"), true);",
"assert.deepEqual(palindrome(\"race car\"), true);",
"assert.deepEqual(palindrome(\"not a palindrome\"), false);"
],
"privateTests": [
"assert.deepEqual(palindrome(\"A man, a plan, a canal. Panama\"), true);",
"assert.deepEqual(palindrome(\"never odd or even\"), true);",
"assert.deepEqual(palindrome(\"nope\"), false);"
],
"challengeSeed": "function palindrome(str) {\n // Good luck!\n return true;\n}\n\n"
}
/*
"aaa48de84e1ecc7c742e1124"
"ff0395860f5d3034dc0bfc94"
"7123c8c441eddfaeb5bdef0d"
"c3a4d278b9e760a0ffe8321f"
"aceca143b92049a4392a859e"
"ce9394f67d413734758e27e4"
"1369953ef6f03098cb60e2f7"
"fa229986db0716662e63163a"
"0a6207dfc9ac12f223b4e686"
"2e538b339cbcb7437e61d71f"
"21de1104b8ea7c6a382442d9"
"0aa3497514cb1d8a0ed04933"
"3a45068415f5a20a5d4a2039"
"6a73ec9b86f0e742f6c6ea76"
"06dc21940748badcdb29561e"
"0f2341ef36740b5c2b9d830c"
"dc4cc7ce1fd0418859b10e0b"
"1fcda9b5e0bf502c8b770374"
"482879c42188cde1f9ad3d8f"
"3d680bd03fd291028af57f4f"
"6b444fe5aa97359238bd3c0d"
"72d6ad274e72ffcd399e05cb"
"e864a710647bb6883c9ec617"
"024dcd8cc0178de7daa4f59f"
"ded24fb937a3fd60dc624677"
"9ad4c3b2aebe7282e973e5df"
"d16c66ecc656c82899a2d427"
"ee3e4bf39b840609dd88f5af"
"9a10d27eb6ab6f5030bdbcd9"
"b4cca5ecdeca1eebc0dc4183"
"ccdf1ef407864df62b03331e"
"1baa0329f02e41a5517b11a6"
"b5b33e5ecf6c02a5780ac419"
"84b690f53cd6cbbbf4a361f5"
"4e3b1b9d41ff11bdf3722ffe"
"1fd45e64c43cd640abcf8a76"
"c8bd32cdd943c88fb8a74934"
"9e5440269d09b71f07002333"
"5080016b8b68f40f7476c341"
"f762d45cc870d9f18c6b7024"
"cf21358ab1245c7033504b42"
"41eff7cb0f2fd8ec9e0cbf68"
"a344c63de6a00feea5c541e0"
"7ab3c18c0815d7b1f02e8768"
"a6f36e4387e2e1e25af4e000"
"9064af1431c1ff3aaa15a0d6"
"50946066aaba43a294155ab5"
"70e82e77857317d6936ecdcc"
"dc644dc20d5b02ffd7c8cc94"
"92af1e9f1813619d820dec4d"
"9d4a077fdaaa24b78a54cee9"
"cfd5fa7aea14fb294bd4f5ff"
"068541b6c5130ca541d6c05c"
"39f4d1f12142d583b0318265"
"4a201b8fa69d11cb669dca8c"
"6fa6bba2e334dd2c9e5a6911"
"30ff082b6a28558f16743fea"
"afed31c4dc2ddf056e263acb"
"b2431ecf36f0b780959aa03d"
"54e42938ab6fa923a5fbfbff"
"48d50e3ff5e96f152d912ebf"
"6c7aad2ee996132f76630c05"
"2705f0482774977fa9b5c7bc"
"c09d6682c7a144d9afd4bfab"
"1a0a30c55dd9bc2fff4e2aac"
"30c22b502e80afd144d79120"
"8f882989bbc98c68b6c7347e"
"888bf771b63a5f64e6b696ed"
"959aa13a2e6439fd5d29c5fe"
"d03d311ca64bf59a2404dcd0"
"7a650f3e4308a097d7883b1f"
"54c207808ac349fa34ed24a9"
"3cb12e3ea31fe15ba9d234e5"
"0d9f8123e52f791ae172f627"
"387518b1bb96bd918e7d0b91"
"27198d8918c9802ac0b06a58"
"7a519a552f723c6b1fdc9389"
"4240096651a50f888765ed60"
"8ba94f78cc44cfb82b3678d2"
"1cf7c3bda6ec7952923bc90f"
"cd54811e976edbc798a87c24"
"e4ee17912f5d7d80d41dc52d"
"572346dd1874a0c749c3a031"
"cf700031502680580ff25980"
"7054518832e5c7efde04a58c"
"7716c6b6a3dcc9c5df79a262"
"f4d1084c692f5a07c25a1b47"
"817b80892a78fc6f83eab4eb"
"ae0e0adda6d063d3fd2c9499"
"33184c427ecaab77b5332521"
"c6c4da707e3eed987eb65ba6"
"40f9801913c0cb9800960bf7"
"af11cf78e8340f172ba76bbe"
"c1daea28b5996b8e8800e300"
"7312b3234b5f2f50887597b9"
"3e4361c5356b30f8ce833268"
"e6fc8827b9aa96fc91035ac2"
"11658fe51b23319533c72106"
"34207fe236870fd855392ef6"
"dc970a2b17aa1432d180d078"
"2f1686ad711b5ac3d98905b5"
"ed20f4bf782e10ec26c7b3b1"
"cf4d6241df36b0bbcea401e2"
"97e414eb00338bd7bd5d1b31"
"bcfebb743729d4fc51b0db49"
"52782c1eaa15e050ac748b18"
"57f65a6cd2eb0a2745fc90ee"
"fcc569e80808c6cd84c839cc"
"2447f8e0e3ccfd895a619695"
"600687fe6332b2e2b20d6a84"
"0f8a972361baddb3ac64b6d9"
"f768594ab352cf8e2282b615"
"3163b25e25b0d6859df17751"
"c73d68f0cf77aa113337fcde"
"cc16163137f13f70decbcb5c"
"4adbf6c7ac2004ee8ae20f55"
"c2779f78a0e57dcee471cefd"
"bf44903cd2fca4ae4daf0818"
"ca8013372d58365e21bd0428"
"e308901ca272ad447dca965a"
"ec8cefe29832cd726185119f"
"36bf51da3f32b1e9550f3b15"
"aefff6dffdf534a6c9601f70"
"ce237971a71127f9ce747232"
"99f4d97fae16ccbeb8c26d46"
"c9f6480328ec4b63b1034826"
"ce10bb6e80b09533cb21c9a5"
"311a54aaf062b29422ac0b02"
"b2073bec873b295c04e9fb7e"
"7b7d94035d63c9c0598b242b"
"e19e9a0487f1bd3eabdb777c"
"eeafe5169a2afd9ce3979698"
"96c7a1f9fb73468fdb770034"
"77e607be2498160d3ceeff60"
"c784fa6b1fd7d9aedb05b607"
"a76319bca87e0b57bc79064f"
"a08db36785c51e5b92a6e92f"
"0933ab4a366d57fd1f1c0a48"
"17663f17a835cfe0bca64f4a"
"aee8323d1de634fc42c11d90"
"682044caf09a068e26c11cab"
"1346fdbe3c6fcb808b99cdf6"
"26fd8f47fe4791e2dd07b2e0"
"b1da27dd129216c2ead2e162"
"618adebe192e896eb1501708"
"2628d9eeb38db68c0b255a75"
"1fb78eda5deb8972cc357a9b"
"2fdebb85a401de75bb580a02"
"c59eae24bee36f63c938723d"
"fb66b55d5617e27ca64836a3"
"55994022872e01fd41d8ec7b"
"53ae83b5490e1cf55625ff3d"
"c44975deeb67b96e6cc37eb5"
"94c64d5ff48ca6487f5e0b07"
"e34e7c1a3d70678955a5df8e"
"6426d30a923dec6377132c47"
"d67811849354ded9d34c9ece"
"01e7ae81207cfd230cb02747"
"e24558477f94bcdd82f16ebe"
"4370f6dcc2f53bd5abed7899"
"679b1145cd3072fbcd513bcb"
"4dafd3fd84e7a337ef3e9933"
"2aca3d41cb148603b4a2d70b"
"5e5aa8c960d024109543c577"
"c5f5f313c8a7056bbcdb7639"
"a7b2aaa4cf85fce98cdeb314"
"e556c0d14bc0ce9cc7bde0ca"
"922a8284880a7c879d846f90"
"b146cf2fbf206ca48687e9b6"
"fbdc52bb7c7620bd4508e5a3"
"23d79a262a81459e75576cc2"
"a26721706d3b9f971cef3ce6"
"fb3801ed1b056a3ab4bbfdc1"
"d5cafae617f1485826de335c"
"e9650dfc8b570f9d33381012"
"453c804c7ce82e83305cd751"
"3eaab01bdd1393be8d461777"
"2b6d9ddd4754b71d92ed31b7"
"2338e9af6acab9fcf5327f6a"
"588e7405c30c346ed2ea5e44"
"eec8837994054fb2043b6166"
"0877406795956ca9eb13fea1"
"1dea30e852067eec48a24035"
"ee716ce45ea812167ed2497a"
"9621d5aeaf8de9b2f58977bd"
"e9bb838723083bac7f83d602"
"ef64da08bbe787891d47c31b"
"e01b6616cc6cf7819172f7f3"
"17c821c34fca587daec981fc"
"d0c4b7153dcb3e6af47bcd98"
"5188eb00680051c35cd6e0f0"
"9fc7b68e736a1f4931226ad8"
"b5eac897471f125224a3e594"
"c1d0f890a02c85a9320f96d5"
"7e3b1ca1b1b1e990367f0cc2"
"bff5ff77174c43f7c681e0bd"
"ddeb794121937d07a887c9e6"
"9db902e930f25fbacc125087"
"4f82d277b47ae9c98095f068"
"24f999491fa46cd194c7fd35"
*/