views.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. var {Application} = require("stick");
  2. var fs = require('fs');
  3. var response = require('ringo/jsgi/response');
  4. var models = require('./models');
  5. var {Template} = require('reinhardt/template');
  6. var fortuneTemplate = module.singleton('fortuneTemplate', function() {
  7. return new Template(fs.read(module.resolve('../templates/fortunes.reinhardt')));
  8. });
  9. var app = exports.app = Application();
  10. app.configure("params", "route");
  11. app.get('/json', function() {
  12. var helloObject = {message: "Hello, World!"};
  13. return response.json(helloObject);
  14. });
  15. app.get('/db/:queries?', function(request, queries) {
  16. queries = parseInt(queries, 10) || 1;
  17. var worlds = [];
  18. var randId, world;
  19. for (var i = 0; i < queries; i++) {
  20. randId = ((Math.random() * 10000) | 0) + 1;
  21. world = models.store.query('select World.* from World where World.id = :id', {id: randId})[0];
  22. worlds.push(world.toJSON());
  23. }
  24. return response.json(worlds);
  25. });
  26. app.get('/fortune', function() {
  27. var fortunes = models.store.query('select Fortune.* from Fortune');
  28. fortunes.push({
  29. _id: 0,
  30. message: 'Additional fortune added at request time.'
  31. });
  32. fortunes.sort(models.Fortune.sort);
  33. return response.html(fortuneTemplate.render({fortunes: fortunes}));
  34. });
  35. app.get('/plaintext', function() {
  36. // @@ not available in ringojs 0.9
  37. // return response.text('Hello World');
  38. return {
  39. status: 200,
  40. headers: {"Content-Type": 'text/plain'},
  41. body: ['Hello World']
  42. };
  43. });
  44. app.get('/updates/:queries?', function(request, queries) {
  45. queries = parseInt(queries, 10) || 1;
  46. if (isNaN(queries) || queries < 1) {
  47. queries = 1;
  48. } else if (queries > 500) {
  49. queries = 500;
  50. }
  51. var worlds = [];
  52. var randId, world;
  53. models.store.beginTransaction();
  54. for (var i = 0; i < queries; i++) {
  55. randId = ((Math.random() * 10000) | 0) + 1;
  56. world = models.store.query('select World.* from World where World.id = :id', {id: randId})[0];
  57. world.randomNumber = ((Math.random() * 10000) | 0) + 1;
  58. try {
  59. world.save();
  60. } catch (e) {
  61. models.store.abortTransaction();
  62. return response.error('SQL error');
  63. }
  64. worlds.push(world.toJSON());
  65. }
  66. models.store.commitTransaction();
  67. return response.json(worlds);
  68. });