comparison mod_couchdb/couchdb/mod_couchdb.lua @ 229:5689ffaf97df

mod_couchdb: Now added as a proper module using the new storage provider system.
author Waqas Hussain <waqas20@gmail.com>
date Sat, 31 Jul 2010 14:42:27 +0500
parents
children 2469f779b3f7
comparison
equal deleted inserted replaced
227:648c24de9040 229:5689ffaf97df
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
64 function driver:open(datastore, typ)
65 local handler = handlers[datastore];
66 if not handler then return nil; end
67 local host = module.host;
68 --local cache_key = host.." "..datastore;
69 --if self.ds_cache[cache_key] then return self.ds_cache[cache_key]; end
70 local instance = setmetatable({ host = host, datastore = datastore }, { __index = handler });
71 --for key,val in pairs(handler) do
72 -- instance[key] = val;
73 --end
74 --if instance.init then instance:init(); end
75 --self.ds_cache[cache_key] = instance;
76 return instance;
77 end
78
79 module:add_item("data-driver", driver);