Skip to content

Commit be3f161

Browse files
authored
Merge pull request #217 from Teamwork/fix-op-validation
Allow op to be a non-object
2 parents 632fad3 + 90b46d6 commit be3f161

File tree

3 files changed

+39
-1
lines changed

3 files changed

+39
-1
lines changed

lib/ot.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ exports.apply = function(snapshot, op) {
102102
function applyOpEdit(snapshot, edit) {
103103
if (!snapshot.type) return {code: 4015, message: 'Document does not exist'};
104104

105-
if (typeof edit !== 'object') return {code: 5004, message: 'Missing op'};
105+
if (edit == null) return {code: 5004, message: 'Missing op'};
106106
var type = types[snapshot.type];
107107
if (!type) return {code: 4008, message: 'Unknown type'};
108108

test/client/number-type.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// A simple number type, where:
2+
//
3+
// - snapshot is an integer
4+
// - operation is an integer
5+
exports.type = {
6+
name: 'number-type',
7+
uri: 'http://sharejs.org/types/number-type',
8+
create: create,
9+
apply: apply,
10+
transform: transform
11+
};
12+
13+
function create(data) {
14+
return data | 0;
15+
}
16+
17+
function apply(snapshot, op) {
18+
return snapshot + op;
19+
}
20+
21+
function transform(op1, op2, side) {
22+
return op1;
23+
}

test/client/submit.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@ var async = require('async');
22
var expect = require('expect.js');
33
var types = require('../../lib/types');
44
var deserializedType = require('./deserialized-type');
5+
var numberType = require('./number-type');
56
types.register(deserializedType.type);
67
types.register(deserializedType.type2);
8+
types.register(numberType.type);
79

810
module.exports = function() {
911
describe('client submit', function() {
@@ -1073,6 +1075,19 @@ describe('client submit', function() {
10731075
});
10741076
});
10751077

1078+
it('allows snapshot and op to be a non-object', function(done) {
1079+
var doc = this.backend.connect().get('dogs', 'fido');
1080+
doc.create(5, numberType.type.uri, function (err) {
1081+
if (err) return done(err);
1082+
expect(doc.data).to.equal(5);
1083+
doc.submitOp(2, function(err) {
1084+
if (err) return done(err);
1085+
expect(doc.data).to.equal(7);
1086+
done();
1087+
});
1088+
});
1089+
});
1090+
10761091
describe('type.deserialize', function() {
10771092
it('can create a new doc', function(done) {
10781093
var doc = this.backend.connect().get('dogs', 'fido');

0 commit comments

Comments
 (0)