From 5edb7e63303a109e25a574c1de816605e363027d Mon Sep 17 00:00:00 2001 From: Mikkel Hoegh Date: Sat, 20 Aug 2011 20:12:58 +0200 Subject: [PATCH] Initial version MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Rather naïve implementation of stringify only (no going back). --- README.md | 13 +++++++++++++ hstore.js | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ package.json | 17 +++++++++++++++++ 3 files changed, 81 insertions(+) create mode 100644 README.md create mode 100644 hstore.js create mode 100644 package.json diff --git a/README.md b/README.md new file mode 100644 index 0000000..1b89d15 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +hstore for Node.js +================== + +[Node.js][] module for transforming JavaScript objects to [hstore][] +format as used by [PostgreSQL][]. + +This can be used to store key/value pairs in a format recognized by the +database, so you can query them via SQL. + +[Node.js]: http://nodejs.org/ +[hstore]: http://www.postgresql.org/docs/current/interactive/hstore.html +[PostgreSQL]: http://www.postgresql.org/ + diff --git a/hstore.js b/hstore.js new file mode 100644 index 0000000..ea22c57 --- /dev/null +++ b/hstore.js @@ -0,0 +1,51 @@ +/** + * Module for converting JavaScript objects to hstore format. + */ + +var hstore = {}; + +"use strict"; + +/** + * Convert an arbitrary value to string. + */ +function convertToString(value) { + switch (typeof value) { + case 'boolean': + return String(value); + case 'null': + return 'NULL'; + case 'number': + return isFinite(value) ? String(value) : 'NULL' + case 'string': + return quoteString(value); + } +} + +/** + * Quote a string. + */ +function quoteString(string) { + // Naïve quoting of strings. Assumes there's not quotes in the string. + return '"' + string + '"'; +} + +/** + * Convert JavaScript object to hstore format. + */ +hstore.stringify = function (data) { + pairs = []; + + Object.keys(data).forEach(function (key) { + var value = convertToString(data[key]); + + if (value) { + pairs.push('"' + key + '"=>' + value); + } + }); + + return pairs.join(); +}; + +module.exports = hstore; + diff --git a/package.json b/package.json new file mode 100644 index 0000000..6b51e67 --- /dev/null +++ b/package.json @@ -0,0 +1,17 @@ +{ + "author": "Mikkel Hoegh (http://mikkel.hoegh.org/)", + "name": "hstore", + "description": "Library for transforming JavaScript objects to hstore format, used by the PostgreSQL RDBMS.", + "keywords" : ["postgres", "postgre", "database", "rdbms"], + "main" : "hstore.js", + "version": "0.0.1", + "repository": { + "type": "git", + "url": "git://github.com/mikl/node-hstore.git" + }, + "engines": { + "node": "~v0.4.10" + }, + "dependencies": {}, + "devDependencies": {} +}