-
Notifications
You must be signed in to change notification settings - Fork 5
/
pantry-memcached.coffee
43 lines (32 loc) · 1.16 KB
/
pantry-memcached.coffee
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Log = require 'coloured-log'
Memcached = require 'memcached'
module.exports = class MemcachedStorage
constructor: (servers = "localhost:11211", options = {}, verbosity = 'DEBUG') ->
# configure the log
@log = new Log(verbosity)
# connect to redis server
@client = new Memcached(servers, options)
@client.on 'issue', (details) ->
@log.warning details
@client.on 'failure', (details) ->
@log.error details
@client.on 'reconnecting', (details) ->
@log.notice details
@client.on 'reconnected', (details) ->
@log.info details
@client.on 'remove', (details) ->
@log.notice details
@log.notice "New memcached storage created"
@log.info "Servers: #{servers}"
# retrieve a specific resource
get: (key, callback) ->
@client.get key, (err, results) ->
if err then @log.error err
callback err, if err then null else JSON.parse(results)
# save a specific resource
put: (resource, callback) ->
@client.set resource.options.key, JSON.stringify(resource), resource.options.maxLife, (err, results) =>
if err then @log.error err
callback(err, results) if callback?
#allow chaining, mostly for testing
return @