From 4ca5aca62409a5a09ee891051be380593290846b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szab=C3=B3=20Csaba?= Date: Sat, 7 Sep 2013 23:55:09 +0100 Subject: [PATCH 1/5] Updated font files for better rendering. --- public/fonts/opensans-300.woff | Bin 15868 -> 22656 bytes public/fonts/ubuntu-300.woff | Bin 23196 -> 46336 bytes public/fonts/ubuntu-700.woff | Bin 29548 -> 41508 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/public/fonts/opensans-300.woff b/public/fonts/opensans-300.woff index 8025ba6cb5cbd7c1b444b27b4331efa4eec454f5..99f335326a5b23d67abcc13b75ab12c63be79e24 100644 GIT binary patch delta 16901 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
- +
@@ -136,7 +136,7 @@
- +

@@ -172,7 +172,7 @@

- +
From 7ae5c4e3fcba6c0f0b74290eff8a98f851707621 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szab=C3=B3=20Csaba?= Date: Sun, 8 Sep 2013 00:44:00 +0100 Subject: [PATCH 3/5] Better error handling for coinbase. --- models/coinbase.js | 8 +++++++- models/order.js | 2 ++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/models/coinbase.js b/models/coinbase.js index 04f1117..42b6923 100644 --- a/models/coinbase.js +++ b/models/coinbase.js @@ -42,7 +42,13 @@ var get_ncoinbase_page = function(init, cb) { request.get(coinbase_api_url(init), function(err, resp, body) { var orders_json = JSON.parse(body); console.log("Finished get_ncoinbase_page"); - cb(null, orders_json.num_pages); + // Handle the errors + if (orders_json.error) { + console.log("Error: %s", orders_json.error); + cb(orders_json.error); + } else { + cb(null, orders_json.num_pages); + } }); }; diff --git a/models/order.js b/models/order.js index ab4d89d..1245be4 100644 --- a/models/order.js +++ b/models/order.js @@ -136,7 +136,9 @@ module.exports = function(sequelize, DataTypes) { */ var _Order = this; coinbase.get_coinbase_json(1, function(err, orders) { + if (orders) { _Order.addAllFromJSON(orders, cb); + } }); } }, From 5c3a4fa3e3a4f10f87056e091ab76ee27529cd9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szab=C3=B3=20Csaba?= Date: Sun, 8 Sep 2013 01:01:48 +0100 Subject: [PATCH 4/5] Fixed indentation, it is more consistent now. --- constants.js | 36 ++-- models/coinbase.js | 135 ++++++------ models/index.js | 99 ++++----- models/order.js | 338 +++++++++++++++++-------------- public/css/bitstarter-styles.css | 40 ++-- routes.js | 162 +++++++-------- views/homepage.ejs | 164 +++++++-------- views/orderpage.ejs | 10 +- web.js | 50 ++--- 9 files changed, 534 insertions(+), 500 deletions(-) diff --git a/constants.js b/constants.js index 1ecf009..c5a72e2 100644 --- a/constants.js +++ b/constants.js @@ -1,27 +1,27 @@ /* - Note that COINBASE_PREORDER_DATA_CODE is the button code from - coinbase.com/merchant_tools, used for the Preorder Button. This is - different from the COINBASE_API key in .env file, which is from - coinbase.com/account/integrations + Note that COINBASE_PREORDER_DATA_CODE is the button code from + coinbase.com/merchant_tools, used for the Preorder Button. This is + different from the COINBASE_API key in .env file, which is from + coinbase.com/account/integrations - The button code can be shown publicly, while the API key should only be - included in a .env file and never shown publicly. The former allows - people to send you money, the latter allows people to send money from - your account. + The button code can be shown publicly, while the API key should only be + included in a .env file and never shown publicly. The former allows + people to send you money, the latter allows people to send money from + your account. - For FUNDING_UNIT_SYMBOL, we use mBTC to represent 1/1000 of a Bitcoin and - FUNDING_SI_SCALE for the corresponding multiplier. + For FUNDING_UNIT_SYMBOL, we use mBTC to represent 1/1000 of a Bitcoin and + FUNDING_SI_SCALE for the corresponding multiplier. - Note that for FUNDING_UNIT_SYMBOL, in theory we could use the Thai Baht - symbol, but then we'd have to change the font. If you use another - payment backend, you can substitute "$" for the dollar or use one of the - other currency symbols. + Note that for FUNDING_UNIT_SYMBOL, in theory we could use the Thai Baht + symbol, but then we'd have to change the font. If you use another + payment backend, you can substitute "$" for the dollar or use one of the + other currency symbols. - - https://en.bitcoin.it/wiki/Bitcoin_symbol#Existing_Unicode_symbol - - http://webdesign.about.com/od/localization/l/blhtmlcodes-cur.htm#codes + - https://en.bitcoin.it/wiki/Bitcoin_symbol#Existing_Unicode_symbol + - http://webdesign.about.com/od/localization/l/blhtmlcodes-cur.htm#codes */ var Constants = { - APP_NAME: "Bitstarter", + APP_NAME: "Bitstarter", FUNDING_TARGET: 10.00, FUNDING_UNIT_SYMBOL: "mBTC", FUNDING_SI_SCALE: 1000, @@ -32,7 +32,7 @@ var Constants = { TWITTER_TWEET: "This student crowdfunder looks interesting.", COINBASE_PREORDER_DATA_CODE: "13b56883764b54e6ab56fef3bcc7229c", days_left: function() { - return Math.max(Math.ceil((this.FUNDING_END_DATE - new Date()) / (1000*60*60*24)), 0); + return Math.max(Math.ceil((this.FUNDING_END_DATE - new Date()) / (1000*60*60*24)), 0); } }; diff --git a/models/coinbase.js b/models/coinbase.js index 42b6923..ff847c9 100644 --- a/models/coinbase.js +++ b/models/coinbase.js @@ -1,75 +1,80 @@ /* - The Coinbase API limits the number of orders that can be mirrored at a - time to 25, with subsequent orders on new pages. - - The following code hits the API once to determine the number of pages, - and then uses this input to set up an async.mapLimit that pulls - the order data and merges it together. - - Note that there are several improvements possible here: - - - You can add much more sophisticated error handling for each Coinbase - API call, along with retries for fails, delays between requests, and - the like. - - - You can make each Coinbase API call write directly to the database, - rather than aggregating them and writing in one block. Depending - on what you want to do, this might be preferable. - - - If you have a very large number of orders, you might have an issue - with the default Heroku deployment process, which requires a port to - be bound within 60 seconds of deployment. In this case you might not - be able to do database update and deploy in one step and would have to - revisit how web.js is set up; for example you might only download as - many orders as you can get in the first 60 seconds, and then have the - rest downloaded after the app boots. Or you might mirror all the - Coinbase data offline and have the database separate from the main - app. - - Overall, though, this is another good illustration of using async.compose - to manage asynchrony. + The Coinbase API limits the number of orders that can be mirrored at a + time to 25, with subsequent orders on new pages. + + The following code hits the API once to determine the number of pages, + and then uses this input to set up an async.mapLimit that pulls + the order data and merges it together. + + Note that there are several improvements possible here: + + - You can add much more sophisticated error handling for each Coinbase + API call, along with retries for fails, delays between requests, and + the like. + + - You can make each Coinbase API call write directly to the database, + rather than aggregating them and writing in one block. Depending + on what you want to do, this might be preferable. + + - If you have a very large number of orders, you might have an issue + with the default Heroku deployment process, which requires a port to + be bound within 60 seconds of deployment. In this case you might not + be able to do database update and deploy in one step and would have to + revisit how web.js is set up; for example you might only download as + many orders as you can get in the first 60 seconds, and then have the + rest downloaded after the app boots. Or you might mirror all the + Coinbase data offline and have the database separate from the main + app. + + Overall, though, this is another good illustration of using async.compose + to manage asynchrony. */ -var async = require('async'); -var request = require('request'); -var uu = require('underscore'); +var async = require('async') + , request = require('request') + , uu = require('underscore'); var coinbase_api_url = function(page) { - return "https://coinbase.com/api/v1/orders?page=" + - page.toString() + "&api_key=" + process.env.COINBASE_API_KEY; + return "https://coinbase.com/api/v1/orders?page=" + + page.toString() + "&api_key=" + process.env.COINBASE_API_KEY; }; var get_ncoinbase_page = function(init, cb) { - request.get(coinbase_api_url(init), function(err, resp, body) { - var orders_json = JSON.parse(body); - console.log("Finished get_ncoinbase_page"); - // Handle the errors - if (orders_json.error) { - console.log("Error: %s", orders_json.error); - cb(orders_json.error); - } else { - cb(null, orders_json.num_pages); - } - }); + request.get(coinbase_api_url(init), function(err, resp, body) { + var orders_json = JSON.parse(body); + console.log("Finished get_ncoinbase_page"); + // Handle the errors + if (orders_json.error) { + console.log("Error: %s", orders_json.error); + cb(orders_json.error); + } else { + cb(null, orders_json.num_pages); + } + }); }; var ncoinbase_page2coinbase_json = function(npage, cb) { - console.log("Starting ncoinbase_page2coinbase_json with npage = " + npage); - var inds = uu.range(1, npage + 1); - var LIMIT = 5; - var getjson = function(item, cb2) { - request.get(coinbase_api_url(item), function(err, resp, body) { - var orders_json = JSON.parse(body); - console.log("Finished API request for Coinbase Order Page " + item); - cb2(null, orders_json.orders); - }); - }; - async.mapLimit(inds, LIMIT, getjson, function(err, results) { - cb(null, uu.flatten(results)); + console.log("Starting ncoinbase_page2coinbase_json with npage = " + npage); + var inds = uu.range(1, npage + 1); + var LIMIT = 5; + + var getjson = function(item, cb2) { + request.get(coinbase_api_url(item), function(err, resp, body) { + var orders_json = JSON.parse(body); + console.log("Finished API request for Coinbase Order Page " + item); + cb2(null, orders_json.orders); }); + }; + + async.mapLimit(inds, LIMIT, getjson, function(err, results) { + cb(null, uu.flatten(results)); + }); }; -var get_coinbase_json = async.compose(ncoinbase_page2coinbase_json, - get_ncoinbase_page); +var get_coinbase_json = async.compose( + ncoinbase_page2coinbase_json, + get_ncoinbase_page +); + /* Example of API use. @@ -82,10 +87,12 @@ var get_coinbase_json = async.compose(ncoinbase_page2coinbase_json, ...and parse the num_pages field from it first. */ var debug_get_coinbase_json = function() { - get_coinbase_json(1, function(err, result) { - console.log(result); - }); + get_coinbase_json(1, function(err, result) { + console.log(result); + }); }; -module.exports = { 'get_coinbase_json': get_coinbase_json, - 'debug_get_coinbase_json': debug_get_coinbase_json}; +module.exports = { + 'get_coinbase_json': get_coinbase_json, + 'debug_get_coinbase_json': debug_get_coinbase_json +}; diff --git a/models/index.js b/models/index.js index 9e188cc..d82ecdf 100644 --- a/models/index.js +++ b/models/index.js @@ -1,53 +1,54 @@ if (!global.hasOwnProperty('db')) { - var Sequelize = require('sequelize'); - var sq = null; - var fs = require('fs'); - var path = require('path'); - var PGPASS_FILE = path.join(__dirname, '../.pgpass'); - if (process.env.DATABASE_URL) { - /* Remote database - Do `heroku config` for details. We will be parsing a connection - string of the form: - postgres://bucsqywelrjenr:ffGhjpe9dR13uL7anYjuk3qzXo@\ - ec2-54-221-204-17.compute-1.amazonaws.com:5432/d4cftmgjmremg1 - */ - var pgregex = /postgres:\/\/([^:]+):([^@]+)@([^:]+):(\d+)\/(.+)/; - var match = process.env.DATABASE_URL.match(pgregex); - var user = match[1]; - var password = match[2]; - var host = match[3]; - var port = match[4]; - var dbname = match[5]; - var config = { - dialect: 'postgres', - protocol: 'postgres', - port: port, - host: host, - logging: true //false - }; - sq = new Sequelize(dbname, user, password, config); - } else { - /* Local database - We parse the .pgpass file for the connection string parameters. - */ - var pgtokens = fs.readFileSync(PGPASS_FILE).toString().trimRight().split(':'); - var host = pgtokens[0]; - var port = pgtokens[1]; - var dbname = pgtokens[2]; - var user = pgtokens[3]; - var password = pgtokens[4]; - var config = { - dialect: 'postgres', - protocol: 'postgres', - port: port, - host: host, - }; - var sq = new Sequelize(dbname, user, password, config); - } - global.db = { - Sequelize: Sequelize, - sequelize: sq, - Order: sq.import(__dirname + '/order') + var Sequelize = require('sequelize'); + var sq = null; + var fs = require('fs'); + var path = require('path'); + var PGPASS_FILE = path.join(__dirname, '../.pgpass'); + if (process.env.DATABASE_URL) { + /* Remote database + Do `heroku config` for details. We will be parsing a connection + string of the form: + postgres://bucsqywelrjenr:ffGhjpe9dR13uL7anYjuk3qzXo@\ + ec2-54-221-204-17.compute-1.amazonaws.com:5432/d4cftmgjmremg1 + */ + var pgregex = /postgres:\/\/([^:]+):([^@]+)@([^:]+):(\d+)\/(.+)/; + var match = process.env.DATABASE_URL.match(pgregex); + var user = match[1]; + var password = match[2]; + var host = match[3]; + var port = match[4]; + var dbname = match[5]; + var config = { + dialect: 'postgres', + protocol: 'postgres', + port: port, + host: host, + logging: true //false }; + sq = new Sequelize(dbname, user, password, config); + } else { + /* Local database + We parse the .pgpass file for the connection string parameters. + */ + var pgtokens = fs.readFileSync(PGPASS_FILE).toString().trimRight().split(':'); + var host = pgtokens[0]; + var port = pgtokens[1]; + var dbname = pgtokens[2]; + var user = pgtokens[3]; + var password = pgtokens[4]; + var config = { + dialect: 'postgres', + protocol: 'postgres', + port: port, + host: host, + }; + var sq = new Sequelize(dbname, user, password, config); + } + + global.db = { + Sequelize: Sequelize, + sequelize: sq, + Order: sq.import(__dirname + '/order') + }; } module.exports = global.db; diff --git a/models/order.js b/models/order.js index 1245be4..56af146 100644 --- a/models/order.js +++ b/models/order.js @@ -1,164 +1,188 @@ /* - Object/Relational mapping for instances of the Order class. + Object/Relational mapping for instances of the Order class. - - classes correspond to tables - - instances correspond to rows - - fields correspond to columns + - classes correspond to tables + - instances correspond to rows + - fields correspond to columns - In other words, this code defines how a row in the PostgreSQL "Order" - table maps to the JS Order object. Note that we've omitted a fair bit of - error handling from the classMethods and instanceMethods for simplicity. + In other words, this code defines how a row in the PostgreSQL "Order" + table maps to the JS Order object. Note that we've omitted a fair bit of + error handling from the classMethods and instanceMethods for simplicity. */ -var async = require('async'); -var util = require('util'); -var uu = require('underscore'); -var coinbase = require('./coinbase'); +var async = require('async') + , util = require('util') + , uu = require('underscore') + , coinbase = require('./coinbase'); module.exports = function(sequelize, DataTypes) { - return sequelize.define("Order", { - coinbase_id: {type: DataTypes.STRING, unique: true, allowNull: false}, - amount: {type: DataTypes.FLOAT}, - time: {type: DataTypes.STRING, allowNull: false} - }, { - classMethods: { - numOrders: function() { - this.count().success(function(c) { - console.log("There are %s Orders", c);}); - }, - allToJSON: function(successcb, errcb) { - this.findAll() - .success(function(orders) { - successcb(uu.invoke(orders, 'toJSON')); - }) - .error(errcb); - }, - totals: function(successcb, errcb) { - this.findAll().success(function(orders) { - var total_funded = 0.0; - orders.forEach(function(order) { - total_funded += parseFloat(order.amount); - }); - var totals = {total_funded: total_funded, - num_orders: orders.length}; - successcb(totals); - }).error(errcb); - }, - addAllFromJSON: function(orders, errcb) { - /* - This method is implemented naively and can be slow if - you have many orders. - - The ideal solution would first determine in bulk which of the - potentially new orders in order_json is actually new (and not - stored in the database). One way to do this is via the NOT IN - operator, which calculates a set difference: - http://www.postgresql.org/docs/9.1/static/functions-comparisons.html - This should work for even a large set of orders in the NOT IN - clause (http://stackoverflow.com/a/3407914) but you may need - to profile the query further. - - Once you have the list of new orders (i.e. orders which are - in Coinbase but not locally stored in the database), then - you'd want to launch several concurrent addFromJSON calls - using async.eachLimit - (https://github.com/caolan/async#eachLimit). The exact value - of the limit is how many concurrent reads and writes your - Postgres installation can handle. This is outside the scope - of the class and depends on your Postgres database settings, - the tuning of your EC2 instance, and other parameters. For a - t1.micro, we just set this to 1 to prevent the system from - hanging. - */ - var MAX_CONCURRENT_POSTGRES_QUERIES = 1; - async.eachLimit(orders, - MAX_CONCURRENT_POSTGRES_QUERIES, - this.addFromJSON.bind(this), errcb); - }, - addFromJSON: function(order_obj, cb) { - /* - Add from JSON only if order has not already been added to - our database. - - Note the tricky use of var _Order. We use this to pass in - the Order class to the success callback, as 'this' within - the scope of the callback is redefined to not be the Order - class but rather an individual Order instance. - - Put another way: within this classmethod, 'this' is - 'Order'. But within the callback of Order.find, 'this' - corresponds to the individual instance. We could also - do something where we accessed the class to which an instance - belongs, but this method is a bit more clear. - */ - var order = order_obj.order; // order json from coinbase - if (order.status != "completed") { - cb(); - } else { - var _Order = this; - _Order.find({where: {coinbase_id: order.id}}).success(function(order_instance) { - if (order_instance) { - // order already exists, do nothing - cb(); - } else { - /* - Build instance and save. - - Uses the _Order from the enclosing scope, - as 'this' within the callback refers to the current - found instance. - - Note also that for the amount, we convert - satoshis (the smallest Bitcoin denomination, - corresponding to 1e-8 BTC, aka 'Bitcents') to - BTC. - */ - var new_order_instance = _Order.build({ - coinbase_id: order.id, - amount: order.total_btc.cents / 100000000, - time: order.created_at - }); - new_order_instance.save().success(function() { - cb(); - }).error(function(err) { - cb(err); - }); - } - }); - } - }, - refreshFromCoinbase: function(cb) { - /* - This function hits Coinbase to download the latest list of - orders and then mirrors them to the local database. The - callback passed in expects a single error argument, - cb(err). Note that one can add much more error handling - here; we've removed that for the sake of clarity. - */ - var _Order = this; - coinbase.get_coinbase_json(1, function(err, orders) { - if (orders) { - _Order.addAllFromJSON(orders, cb); - } - }); - } - }, - instanceMethods: { - repr: function() { - return util.format( - "Order indexfn - example.com/orders -> orderfn - example.com/refresh_orders -> refresh_orderfn - example.com/api/orders -> api_orderfn - - Specifically, in each case we get an HTTP request as a JS object - ('request') and use it along with internal server variables to synthesize - and return an HTTP response ('response'). In our simple example none of - the features of the request are used aside from the path itself; in a - more complex example you might want to return different results on the - basis of the user's IP. - - The responses are generated by accessing the "Order" table in the local - PostgreSQL database through the Sequelize ORM (specifically through - model/order.js) and using the resulting Order instances to either - populate server-side templates (via response.render), to trigger a - redirect to another URL (via response.redirect), or to directly send data - (via response.json or response.send). - - Note that to the maximum extent possible, these handler functions do not - do heavy work on Order instances. We save that for the classMethods and - instanceMethods defined in model/order.js. Instead, route handlers focus - on the networking aspects of parsing the request and response, initiating - the query to the database, and packaging it all up in a request. + Define the routes for the app, i.e. the functions + which are executed once specific URLs are encountered. + + example.com/ -> indexfn + example.com/orders -> orderfn + example.com/refresh_orders -> refresh_orderfn + example.com/api/orders -> api_orderfn + + Specifically, in each case we get an HTTP request as a JS object + ('request') and use it along with internal server variables to synthesize + and return an HTTP response ('response'). In our simple example none of + the features of the request are used aside from the path itself; in a + more complex example you might want to return different results on the + basis of the user's IP. + + The responses are generated by accessing the "Order" table in the local + PostgreSQL database through the Sequelize ORM (specifically through + model/order.js) and using the resulting Order instances to either + populate server-side templates (via response.render), to trigger a + redirect to another URL (via response.redirect), or to directly send data + (via response.json or response.send). + + Note that to the maximum extent possible, these handler functions do not + do heavy work on Order instances. We save that for the classMethods and + instanceMethods defined in model/order.js. Instead, route handlers focus + on the networking aspects of parsing the request and response, initiating + the query to the database, and packaging it all up in a request. */ var indexfn = function(request, response) { - response.render("homepage", { - name: Constants.APP_NAME, - title: "My First " + Constants.APP_NAME, - product_name: Constants.PRODUCT_NAME, - twitter_username: Constants.TWITTER_USERNAME, - twitter_tweet: Constants.TWITTER_TWEET, - product_short_description: Constants.PRODUCT_SHORT_DESCRIPTION, - coinbase_preorder_data_code: Constants.COINBASE_PREORDER_DATA_CODE - }); + response.render("homepage", { + name: Constants.APP_NAME, + title: "My First " + Constants.APP_NAME, + product_name: Constants.PRODUCT_NAME, + twitter_username: Constants.TWITTER_USERNAME, + twitter_tweet: Constants.TWITTER_TWEET, + product_short_description: Constants.PRODUCT_SHORT_DESCRIPTION, + coinbase_preorder_data_code: Constants.COINBASE_PREORDER_DATA_CODE + }); }; var orderfn = function(request, response) { - var successcb = function(orders_json) { - response.render("orderpage", {orders: orders_json}); - }; - var errcb = build_errfn('error retrieving orders', response); - global.db.Order.allToJSON(successcb, errcb); + var successcb = function(orders_json) { + response.render("orderpage", {orders: orders_json}); + }; + var errcb = build_errfn('error retrieving orders', response); + global.db.Order.allToJSON(successcb, errcb); }; var api_orderfn = function(request, response) { - var successcb = function(totals) { - var data = uu.extend(totals, - {target: Constants.FUNDING_TARGET, - unit_symbol: Constants.FUNDING_UNIT_SYMBOL, - days_left: Constants.days_left()}); - data.total_funded *= Constants.FUNDING_SI_SCALE; - response.json(data); - }; - var errcb = build_errfn('error retrieving API orders', response); - global.db.Order.totals(successcb, errcb); + var successcb = function(totals) { + var data = uu.extend(totals, { + target: Constants.FUNDING_TARGET, + unit_symbol: Constants.FUNDING_UNIT_SYMBOL, + days_left: Constants.days_left() + }); + + data.total_funded *= Constants.FUNDING_SI_SCALE; + response.json(data); + }; + var errcb = build_errfn('error retrieving API orders', response); + global.db.Order.totals(successcb, errcb); }; var refresh_orderfn = function(request, response) { - var cb = function(err) { - if(err) { - console.log("Error in refresh_orderfn"); - response.send("Error refreshing orders."); - } else { - response.redirect("/orders"); - } - }; - global.db.Order.refreshFromCoinbase(cb); + var cb = function(err) { + if(err) { + console.log("Error in refresh_orderfn"); + response.send("Error refreshing orders."); + } else { + response.redirect("/orders"); + } + }; + global.db.Order.refreshFromCoinbase(cb); }; /* - Helper functions which create a ROUTES array for export and use by web.js + Helper functions which create a ROUTES array for export and use by web.js - Each element in the ROUTES array has two fields: path and fn, - corresponding to the relative path (the resource asked for by the HTTP - request) and the function executed when that resource is requested. + Each element in the ROUTES array has two fields: path and fn, + corresponding to the relative path (the resource asked for by the HTTP + request) and the function executed when that resource is requested. - [ { path: '/', fn: [Function] }, - { path: '/orders', fn: [Function] }, - { path: '/api/orders', fn: [Function] }, - { path: '/refresh_orders', fn: [Function] } ] + [ { path: '/', fn: [Function] }, + { path: '/orders', fn: [Function] }, + { path: '/api/orders', fn: [Function] }, + { path: '/refresh_orders', fn: [Function] } ] - It is certainly possible to implement define_routes with a simple for - loop, but we use a few underscore methods (object, zip, map, pairs), just - to familiarize you with the use of functional programming, which - becomes more necessary when dealing with async programming. + It is certainly possible to implement define_routes with a simple for + loop, but we use a few underscore methods (object, zip, map, pairs), just + to familiarize you with the use of functional programming, which + becomes more necessary when dealing with async programming. */ var define_routes = function(dict) { - var toroute = function(item) { - return uu.object(uu.zip(['path', 'fn'], [item[0], item[1]])); - }; - return uu.map(uu.pairs(dict), toroute); + var toroute = function(item) { + return uu.object(uu.zip(['path', 'fn'], [item[0], item[1]])); + }; + return uu.map(uu.pairs(dict), toroute); }; var ROUTES = define_routes({ - '/': indexfn, - '/orders': orderfn, - '/api/orders': api_orderfn, - '/refresh_orders': refresh_orderfn + '/': indexfn, + '/orders': orderfn, + '/api/orders': api_orderfn, + '/refresh_orders': refresh_orderfn }); module.exports = ROUTES; diff --git a/views/homepage.ejs b/views/homepage.ejs index 96b9a6d..aef40ca 100644 --- a/views/homepage.ejs +++ b/views/homepage.ejs @@ -11,7 +11,7 @@ - + @@ -23,8 +23,7 @@

OJqZwebS?Skl{J>xu*T= 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 R9n~^*8x2jPWVIm5{{eC7q>}&u diff --git a/public/fonts/ubuntu-700.woff b/public/fonts/ubuntu-700.woff index 80a3fc2f1de9dce7aee6c899ba7912bddb826840..e0f87a216eb059bfb0ab262c1897031ad12d1a7e 100644 GIT binary patch delta 23153 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 C;D*Wo delta 11094 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 Date: Sun, 8 Sep 2013 00:00:55 +0100 Subject: [PATCH 2/5] Updated paths for better compatibility, and css-js order changes. --- views/homepage.ejs | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/views/homepage.ejs b/views/homepage.ejs index 3f94a23..96b9a6d 100644 --- a/views/homepage.ejs +++ b/views/homepage.ejs @@ -4,17 +4,17 @@ <%= title %> - - - - - - - - + + + + + + + + @@ -29,10 +29,10 @@ - <%= name %> + <%= name %>