Browse Source

add fortune test

"ringo" uses mustache from ringo's standardlibrary
the more framework-y "ringojs-stick" uses the reinhardt template engine
Simon Oberhammer 12 years ago
parent
commit
95c390c76f

+ 1 - 0
installer.py

@@ -125,6 +125,7 @@ class Installer:
     self.__run_command("rm ringojs_0.9-1_all.deb")
     self.__run_command("sudo ringo-admin install oberhamsi/sql-ringojs-client")
     self.__run_command("sudo ringo-admin install ringo/stick")
+    self.__run_command("sudo ringo-admin install oberhamsi/reinhardt")
 
     #######################################
     # Webservers

+ 20 - 0
ringojs-stick/templates/fortunes.reinhardt

@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Fortunes</title>
+</head>
+<body>
+<table>
+<tr>
+<th>id</th>
+<th>message</th>
+</tr>
+{% for fortune in fortunes %}
+<tr>
+<td>{{fortune.id}}</td>
+<td>{{fortune.message}}</td>
+</tr>
+{% endfor %}
+</table>
+</body>
+</html>

+ 34 - 0
ringojs-stick/views.js

@@ -1,10 +1,20 @@
 var sql = require('sql-ringojs-client');
 var {Application} = require("stick");
+var fs = require('fs');
+var {Template} = require('reinhardt/template');
 
 // DO NOT TOUCH THE FOLLOWING LINE.
 // THIS VARIABLE IS REGEX REPLACED BY setup.py
 var dbHost = 'localhost';
 
+var sortFortunes = function(a, b) {
+ return (a.message < b.message) ? -1 : (a.message > b.message) ? 1 : 0;
+};
+
+var fortuneTemplate = module.singleton('fortuneTemplate', function() {
+   return new Template(fs.read(module.resolve('./templates/fortunes.reinhardt')));
+})
+
 var datasource = module.singleton('pooling-datasource', function() {
   return sql.connect("jdbc:mysql://" + dbHost + "/hello_world", 'benchmarkdbuser', 'benchmarkdbpass');
 });
@@ -61,3 +71,27 @@ app.get('/db', function(request) {
       }
    }
 });
+
+app.get('/fortune', function() {
+   try {
+      var connection = datasource.getConnection();
+      var fortunes = sql.query(connection, 'select * from Fortune');
+      fortunes.push({
+         id: 0,
+         message: 'Additional fortune added at request time.'
+      });
+      fortunes.sort(sortFortunes);
+      return {
+         status: 200,
+         headers: {"Content-Type": "text/html; charset=UTF-8"},
+         body: [fortuneTemplate.render({fortunes: fortunes})]
+      }
+   } catch (e) {
+      connection.close();
+      connection = null;
+   } finally {
+      if (connection !== null) {
+         connection.close();
+      }
+   }
+});

+ 30 - 0
ringojs/ringo-main.js

@@ -1,9 +1,16 @@
 var sql = require('sql-ringojs-client');
+var mustache = require('ringo/mustache');
 
 // DO NOT TOUCH THE FOLLOWING LINE.
 // THIS VARIABLE IS REGEX REPLACED BY setup.py
 var dbHost = 'localhost';
 
+var sortFortunes = function(a, b) {
+ return (a.message < b.message) ? -1 : (a.message > b.message) ? 1 : 0;
+};
+
+var fortuneTemplate = require('fs').read(module.resolve('./templates/fortune.mustache'));
+
 exports.app = function(req) {
    var path = req.pathInfo;
    if (path === '/json') {
@@ -52,7 +59,30 @@ exports.app = function(req) {
             connection.close();
          }
       }
+   } else if (path === '/fortune') {
+      try {
+         var connection = datasource.getConnection();
+         var fortunes = sql.query(connection, 'select * from Fortune');
+         fortunes.push({
+            id: 0,
+            message: 'Additional fortune added at request time.'
+         });
+         fortunes.sort(sortFortunes);
+         return {
+            status: 200,
+            headers: {"Content-Type": "text/html; charset=UTF-8"},
+            body: [mustache.to_html(fortuneTemplate, {fortunes: fortunes})]
+         }
+      } catch (e) {
+         connection.close();
+         connection = null;
+      } finally {
+         if (connection !== null) {
+            connection.close();
+         }
+      }
    }
+   console.log(path)
 };
 
 

+ 20 - 0
ringojs/templates/fortune.mustache

@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Fortunes</title>
+</head>
+<body>
+<table>
+<tr>
+<th>id</th>
+<th>message</th>
+</tr>
+{{#fortunes}}
+<tr>
+<td>{{id}}</td>
+<td>{{message}}</td>
+</tr>
+{{/fortunes}}
+</table>
+</body>
+</html>