lib/stasis/server.rb in stasis-0.1.4 vs lib/stasis/server.rb in stasis-0.1.5

- old
+ new

@@ -17,25 +17,42 @@ while true sleep(1.0 / 1000.0) request = redis.lpop('stasis:requests') if request + files = {} request = Yajl::Parser.parse(request) - params = request['paths'] + [ - { - :collect => request['return'], - :write => request['write'] - } - ] - files = stasis.render(*params) + paths = request['paths'].reject do |path| + files[path] = redis.get("stasis:caches:#{root}:#{path}") + end - if request['return'] && request['paths'] && !request['paths'].empty? + if paths.empty? && !request['paths'].empty? + new_files = {} + else + params = request['paths'] + [ + { + :collect => request['return'], + :write => request['write'] + } + ] + new_files = stasis.render(*params) + end + + if request['ttl'] + new_files.each do |path, body| + key = "stasis:caches:#{root}:#{path}" + redis.set(key, body) + redis.expire(key, request['ttl']) + end + end + + if request['return'] request['wait'] = true end if request['wait'] - response = files + response = files.merge(new_files) redis.publish(self.class.response_key(request['id']), Yajl::Encoder.encode(response)) end end end rescue Interrupt \ No newline at end of file