| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- Keys = require('./UpdateKeys')
- RedisManager = require "./RedisManager"
- Errors = require "./Errors"
- module.exports = class ShareJsDB
- constructor: (@project_id, @doc_id, @lines, @version) ->
- @appliedOps = {}
- # ShareJS calls this detacted from the instance, so we need
- # bind it to keep our context that can access @appliedOps
- @writeOp = @_writeOp.bind(@)
-
- getOps: (doc_key, start, end, callback) ->
- if start == end
- return callback null, []
- # In redis, lrange values are inclusive.
- if end?
- end--
- else
- end = -1
- [project_id, doc_id] = Keys.splitProjectIdAndDocId(doc_key)
- RedisManager.getPreviousDocOps doc_id, start, end, callback
-
- _writeOp: (doc_key, opData, callback) ->
- @appliedOps[doc_key] ?= []
- @appliedOps[doc_key].push opData
- callback()
- getSnapshot: (doc_key, callback) ->
- if doc_key != Keys.combineProjectIdAndDocId(@project_id, @doc_id)
- return callback(new Errors.NotFoundError("unexpected doc_key #{doc_key}, expected #{Keys.combineProjectIdAndDocId(@project_id, @doc_id)}"))
- else
- return callback null, {
- snapshot: @lines.join("\n")
- v: parseInt(@version, 10)
- type: "text"
- }
- # To be able to remove a doc from the ShareJS memory
- # we need to called Model::delete, which calls this
- # method on the database. However, we will handle removing
- # it from Redis ourselves
- delete: (docName, dbMeta, callback) -> callback()
|