comparison mod_couchdb/couchdb/couchdb.lib.lua @ 204:316d7c8e1fb0

mod_couchdb: Initial commit.
author Waqas Hussain <waqas20@gmail.com>
date Sat, 10 Jul 2010 01:35:05 +0500
parents
children
comparison
equal deleted inserted replaced
203:4927b9737bb7 204:316d7c8e1fb0
1
2 local http = require "socket.http";
3 local url = require "socket.url";
4
5 local couchapi = module:require("couchdb/couchapi");
6 local json = module:require("couchdb/json");
7
8 local couchdb_url = assert(module:get_option("couchdb_url"), "Option couchdb_url not specified");
9 local db = couchapi.db(couchdb_url);
10
11 local function couchdb_get(key)
12 local a,b = db:doc(key):get()
13 print(json.encode(a));
14 if b == 404 then return nil; end
15 if b == 200 then b = nil; end
16 return a.payload,b;
17 end
18
19 local function couchdb_put(key, value)
20 local a,b = db:doc(key):get();
21 return db:doc(key):put({ payload = value, _rev = a and a._rev });
22 end
23
24 local st = require "util.stanza";
25
26 local handlers = {};
27
28 handlers.accounts = {
29 get = function(self, user)
30 return couchdb_get(self.host.."/"..user.."/account");
31 end;
32 set = function(self, user, data)
33 return couchdb_put(self.host.."/"..user.."/account", data);
34 end;
35 };
36 handlers.vcard = {
37 get = function(self, user)
38 return couchdb_get(self.host.."/"..user.."/vcard");
39 end;
40 set = function(self, user, data)
41 return couchdb_put(self.host.."/"..user.."/vcard", data);
42 end;
43 };
44 handlers.private = {
45 get = function(self, user)
46 return couchdb_get(self.host.."/"..user.."/private");
47 end;
48 set = function(self, user, data)
49 return couchdb_put(self.host.."/"..user.."/private", data);
50 end;
51 };
52 handlers.roster = {
53 get = function(self, user)
54 return couchdb_get(self.host.."/"..user.."/roster");
55 end;
56 set = function(self, user, data)
57 return couchdb_put(self.host.."/"..user.."/roster", data);
58 end;
59 };
60
61 -----------------------------
62 local driver = {};
63 driver.__index = driver;
64
65 function driver:open(host, datastore, typ)
66 local cache_key = host.." "..datastore;
67 if self.ds_cache[cache_key] then return self.ds_cache[cache_key]; end
68 local instance = setmetatable({}, self);
69 instance.host = host;
70 instance.datastore = datastore;
71 local handler = handlers[datastore];
72 if not handler then return nil; end
73 for key,val in pairs(handler) do
74 instance[key] = val;
75 end
76 if instance.init then instance:init(); end
77 self.ds_cache[cache_key] = instance;
78 return instance;
79 end
80
81 -----------------------------
82 local _M = {};
83
84 function _M.new()
85 local instance = setmetatable({}, driver);
86 instance.__index = instance;
87 instance.ds_cache = {};
88 return instance;
89 end
90
91 return _M;