From 9094d4cdfafa9d3dbe2cc534b48c3ce3f3d1bd0f Mon Sep 17 00:00:00 2001 From: Liza Carter Date: Thu, 14 Aug 2014 19:18:07 -0500 Subject: [PATCH] added new gambler --- app/controllers/gamblers.js | 16 ++++++++++++++++ app/models/gambler.js | 26 ++++++++++++++++++++++++++ app/routes/routes.js | 4 +++- app/static/css/style.css | 6 +++++- app/static/js/user/gambler.js | 12 ++++++++++-- app/views/gamblers/init.jade | 17 +++++++++++++++++ app/views/gamblers/show.jade | 11 +++++++++++ app/views/shared/template.jade | 1 + test/unit/gambler.js | 32 +++++++++++++++++++++++++++++++- 9 files changed, 120 insertions(+), 5 deletions(-) create mode 100644 app/views/gamblers/init.jade create mode 100644 app/views/gamblers/show.jade diff --git a/app/controllers/gamblers.js b/app/controllers/gamblers.js index f9ef468..68c4b42 100644 --- a/app/controllers/gamblers.js +++ b/app/controllers/gamblers.js @@ -1,9 +1,25 @@ 'use strict'; var Gambler = require('../models/gambler'); +exports.init = function(req, res){ + res.render('gamblers/init'); +}; + +exports.create = function(req, res){ + var gambler = new Gambler(req.body); + gambler.save(function(){ + res.redirect('/gamblers'); + }); +}; + exports.index = function(req, res){ Gambler.all(function(err, gamblers){ res.render('gamblers/index', {gamblers:gamblers}); }); }; +exports.show = function(req, res){ + Gambler.findById(req.params.id, function(gambler){ + res.render('gamblers/show', {gambler:gambler}); + }); +}; diff --git a/app/models/gambler.js b/app/models/gambler.js index dc6f25c..d6b6369 100644 --- a/app/models/gambler.js +++ b/app/models/gambler.js @@ -1,6 +1,11 @@ 'use strict'; +var Mongo = require('mongodb'), + _ = require('lodash'); + function Gambler(o){ + this.results = this.results || {wins:'0', losses: '0'}; + this.isDivorced = false; } Object.defineProperty(Gambler, 'collection', { @@ -11,5 +16,26 @@ Gambler.all = function(cb){ Gambler.collection.find().toArray(cb); }; +Gambler.findById = function(id, cb){ + var _id = Mongo.ObjectID(id); + Gambler.collection.findOne({_id:_id}, function(err, obj){ + var gambler = changePrototype(obj); + + cb(gambler); + }); +}; + +Gambler.deleteById = function(id, cb){ + var _id = Mongo.ObjectID(id); + Gambler.collection.findAndRemove({_id:_id}, cb); +}; + +Gambler.prototype.save = function(cb){ + Gambler.collection.save(this, cb); +}; + module.exports = Gambler; +function changePrototype(obj){ + return _.create(Gambler.prototype, obj); +} diff --git a/app/routes/routes.js b/app/routes/routes.js index e9abb92..5f6003d 100644 --- a/app/routes/routes.js +++ b/app/routes/routes.js @@ -11,8 +11,10 @@ module.exports = function(app, express){ app.use(bodyParser.urlencoded({extended:true})); app.use(methodOverride()); - //app.get('/', home.index); + app.get('/gamblers/new', gamblers.init); + app.post('/gamblers', gamblers.create); app.get('/gamblers', gamblers.index); + app.get('/gamblers/:id', gamblers.show); console.log('Routes Loaded'); }; diff --git a/app/static/css/style.css b/app/static/css/style.css index 8132628..0b89fe1 100644 --- a/app/static/css/style.css +++ b/app/static/css/style.css @@ -78,7 +78,7 @@ li.photo button{ right: 10px; } -.spouseHead, .assetsTitle { +.spouseHead, .assetsTitle, h2 label { font-family: 'Luckiest Guy', cursive; font-size: 20px; margin-top: 20px; @@ -89,3 +89,7 @@ h2{ font-family: 'Luckiest Guy', cursive; font-size: 40px; } + +#newGambler input, #newSpouse input{ + color: black +} diff --git a/app/static/js/user/gambler.js b/app/static/js/user/gambler.js index 5dfc79e..70b93d8 100644 --- a/app/static/js/user/gambler.js +++ b/app/static/js/user/gambler.js @@ -7,8 +7,16 @@ function sellAsset(){ var id = $(this).closest('.gambler').attr('data-gambler-id'), - name = $(this).text().split(' ')[0]; - console.log(id, name); + name = $(this).text().split(' ')[0], + type = 'delete', + url = '/gamblers/'+id+'/assets/'+name; + + $.ajax({url:url, type:type, dataType:'json', success:function(data){ + var $asset = $('.asset'); + $asset.fadeOut(); + + setTimeout(function(){$asset.remove();}, 2000); + }}); } })(); diff --git a/app/views/gamblers/init.jade b/app/views/gamblers/init.jade new file mode 100644 index 0000000..098d05a --- /dev/null +++ b/app/views/gamblers/init.jade @@ -0,0 +1,17 @@ +extends ../shared/template +block content + h2.new New Gambler + form(method='post', action='/gamblers') + #newGambler + label New Gambler + input(name='name', type='text', placeholder='Bob Smith', autofocus=true) + input(name='photo', type='text', placeholder='photo url') + input(name='cash', type='number', placeholder='cash amount') + //input(name='results.wins', type='text', placeholder='wins') + //input(name='results.losses', type='text', placeholder='losses') + #newSpouse + label Spouse + input(name='spouse.name', type='text', placeholder='Sarah Smith') + input(name='spouse.photo', type='text', placeholder='photo url') + #add + button Add Gambler diff --git a/app/views/gamblers/show.jade b/app/views/gamblers/show.jade new file mode 100644 index 0000000..bdfa52e --- /dev/null +++ b/app/views/gamblers/show.jade @@ -0,0 +1,11 @@ +extends ../shared/template +block content + h2= gambler.name + + #newGambler + #photo(style='background-image: url(#{gambler.photo});') + #cash $#{gambler.cash} + #spouse + .name= #{gambler.spouse.name} + .photo(style='background-image: url(#{gambler.spouse.photo});') + diff --git a/app/views/shared/template.jade b/app/views/shared/template.jade index 2871c77..556ba99 100644 --- a/app/views/shared/template.jade +++ b/app/views/shared/template.jade @@ -12,6 +12,7 @@ html ul li: a(href='/') Home li: a(href='/gamblers') Gamblers + li: a(href='/gamblers/new') Add Gambler block content diff --git a/test/unit/gambler.js b/test/unit/gambler.js index 4c70c17..98255ce 100644 --- a/test/unit/gambler.js +++ b/test/unit/gambler.js @@ -7,7 +7,8 @@ var expect = require('chai').expect, Gambler = require('../../app/models/gambler'), dbConnect = require('../../app/lib/mongodb'), cp = require('child_process'), - db = 'the-derby-test'; + db = 'the-derby-test', + Mongo = require('mongodb'); describe('Gambler', function(){ before(function(done){ @@ -37,5 +38,34 @@ describe('Gambler', function(){ }); }); }); + describe('.findById', function(){ + it('should find a gambler by its id', function(done){ + Gambler.findById(Mongo.ObjectID('000000000000000000000002'), function(gambler){ + expect(gambler).to.be.instanceof(Gambler); + expect(gambler.name).to.equal('Mr. Green'); + done(); + }); + }); + }); + describe('.deleteById', function(){ + it('should delete a gambler by its id', function(done){ + Gambler.deleteById(Mongo.ObjectID('000000000000000000000002'), function(gambler){ + Gambler.all(function(err, gamblers){ + expect(gamblers).to.have.length(2); + done(); + }); + }); + }); + }); + describe('#save', function(){ + it('should save a new gambler to the database', function(done){ + var g = new Gambler(); + g.save(function(){ + expect(g._id).to.be.instanceof(Mongo.ObjectID); + done(); + }); + }); + }); + //Last braces });