Google Gears API supported by Aptana Jaxer
Man I love it when I can delete code. Seeing the line count go away and leaving a small amount of text is a sight for sore eyes. I got to delete a lot of code today thanks to the kind folks at Aptana.
I recently wrote a shim that allows the Google Gears API to run as is on the server side. It wraps the Gears Database API with the Jaxer one.
What is particularly cool about this is that you can then write some code and:
- If the user has Gears installed, it runs client-side
- If the user doesn’t have Gears installed just run it on the server
I want to setup a nice way to make this trivial to setup.
The majority of the code was a simple wrapper around the result set, so Aptana decided to directly support the Gears API itself which allowed me to get rid of it all!
This makes the shim as simple as this:
// -- Wrap this code so it is available if using a proxy call function oncallback() { // Make up the namespaces to mimic Gears and a place for Jaxer holders google = {}; google.gears = {}; google.gears.factory = {}; google.gears.jaxer = {}; // Create sets up a database instance to be used google.gears.factory.create = function(className, version) { if (className.indexOf('database') < 0) { throw new Error('I can only do Database work right now'); } return new google.gears.jaxer.Db(); } // -- The Database Wrapper google.gears.jaxer.Db = function() { this.db = null; } google.gears.jaxer.Db.prototype.open = function(name) { this.db = new Jaxer.DB.SQLite.Connection({ PATH: 'resource:///../data/' + name + '.sqlite', CLOSE_AFTER_EXECUTE: 'open' }); } google.gears.jaxer.Db.prototype.execute = function(sqlStatement, argArray) { var rs = (argArray) ? this.db.execute(sqlStatement, argArray) : this.db.execute(sqlStatement); return rs; } }
Philip Maker has also taken GearsORM and made it work with Jaxer. Very cool indeed.