• Jump To … +
    Nodulator.ls ClientDB.ls index.ls Resource.ls Bus.ls Cache.ls ChangeWatcher.ls Debug.ls Wrappers.ls Nodulator.ls Resource.ls Schema.ls NModule.ls AccountResource.ls User.ls index.ls Nodulator-Angular.ls TaskDirective.ls index.ls TaskService.ls main.ls index.ls index.ls Task.ls index.ls index.ls index.ls index.ls index.ls DOM.ls View.ls index.ls Nodulator.ls Mongo.ls Mysql.ls SqlMem.ls index.ls Resource.ls Request.ls Route.ls index.ls
  • Cache.ls

  • ¶
    redis = require \redis
    Debug = require '../Helpers/Debug'
    
    debug-cache = new Debug 'N::Resource::Cache'
    
    class RedisCache
    
      ({host = '127.0.0.1', port = 6379, database = 0}) ->
    
        @client = redis.createClient {host, port}
        @client.select database
        @client.flushdb()
    
      Get: (name, done) ->
        @client.get name, (err, reply) ->
          return done err if err?
    
          done null, reply
    
      Set: (name, value, done) ->
        @client.set name, value, (err, reply) ~>
          return done err if err?
    
          @client.expire(name, 3600);
          done null, reply
    
      Delete: (name, done) ->
        @client.del name, (err, reply) ~>
          return done err if err?
    
          done null, reply
    
      Reset: ->
        @client.flushdb()
    
    class MemCache
    
      ->
        @client = {}
    
      Get: (name, done) ->
        if @client[name]?
          return done null, reply
    
        done!
    
      Set: (name, value, done) ->
        @client[name] = value
    
        done!
    
      Delete: (name, done) ->
        delete @client[name]
    
        done!
    
      Reset: ->
        @client = {}
    
    
    class Cache
    
      (config) ->
        if config?.cache?.type is \Redis or config?.cache is \Redis
          debug-cache.Warn 'Redis cache init'
          @client = new RedisCache config.cache if not is-type \String config.cache
          @client = new RedisCache {} if is-type \String config.cache
        else if config?.cache?.type is \Mem or config?.cache is \Mem
          debug-cache.Warn 'Mem cache init'
          @client = new MemCache
        else
          debug-cache.Warn 'No cache activated'
    
      Get: (name, done) ->
        return done! if not @client?
        @client.Get name, (err, reply) ->
          return done! done err if err?
    
          debug-cache.Warn 'Cache answered for ' + name
          done null, reply
    
      Set: (name, value, done) ->
        return done! if not @client?
        @client.Set name, value, (err, reply) ~>
          return done! done err if err?
    
          debug-cache.Warn 'Cache updated for ' + name
          done null, reply
    
      Delete: (name, done) ->
        return done! if not @client?
        @client.Delete name, (err, reply) ~>
          return done! done err if err?
    
          debug-cache.Warn 'Cache deleted for ' + name
          done null, reply
    
      Reset: ->
        return if not @client?
        @client.Reset!
    
    module.exports = -> new Cache it