Mercurial > prosody-modules
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); |