Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node_modules/
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ ddpclient.call("login", [

```js
var DDPClient = require("ddp-client");
// or "ddp-client/promise" for promisified versions of all async functions

var ddpclient = new DDPClient({
// All properties optional, defaults shown
Expand Down
60 changes: 2 additions & 58 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@ class DDPClient extends EventEmitter{
self._callbacks = {};
self._updatedCallbacks = {};
self._pendingMethods = {};
self._observers = {};
}

_prepareHandlers() {
Expand Down Expand Up @@ -174,6 +173,7 @@ class DDPClient extends EventEmitter{
var item = {
"_id": id
};

if (data.fields) {
_.each(data.fields, function(value, key) {
item[key] = value;
Expand All @@ -190,23 +190,21 @@ class DDPClient extends EventEmitter{
// remove document from collection
} else if (data.msg === "removed") {
if (self.maintainCollections && data.collection) {
var name = data.collection, id = data.id;
self.collections[name].remove({"_id": id});
}

// change document in collection
} else if (data.msg === "changed") {
if (self.maintainCollections && data.collection) {
var name = data.collection, id = data.id;

var item = {
"_id": id
};

if (data.fields) {
_.each(data.fields, function(value, key) {
item[key] = value;
})
});
}

self.collections[name].upsert(item);
Expand All @@ -230,29 +228,11 @@ class DDPClient extends EventEmitter{
}
}


_getNextId() {
var self = this;
return (self._nextId += 1).toString();
}


_addObserver(observer) {
var self = this;
if (! self._observers[observer.name]) {
self._observers[observer.name] = {};
}
self._observers[observer.name][observer._id] = observer;
}


_removeObserver(observer) {
var self = this;
if (! self._observers[observer.name]) { return; }

delete self._observers[observer.name][observer._id];
}

//////////////////////////////////////////////////////////////////////////
// USER functions -- use these to control the client

Expand Down Expand Up @@ -285,7 +265,6 @@ class DDPClient extends EventEmitter{

var url = self._buildWsUrl();
self._makeWebSocketConnection(url);

}

_endPendingMethodCalls() {
Expand Down Expand Up @@ -334,7 +313,6 @@ class DDPClient extends EventEmitter{
self.removeAllListeners("failed");
}


// call a method on the server,
//
// callback = function(err, result)
Expand Down Expand Up @@ -368,7 +346,6 @@ class DDPClient extends EventEmitter{
});
}


callWithRandomSeed(name, params, randomSeed, callback, updatedCallback) {
var self = this;
var id = self._getNextId();
Expand Down Expand Up @@ -416,39 +393,6 @@ class DDPClient extends EventEmitter{
id : id
});
}

/**
* Adds an observer to a collection and returns the observer.
* Observation can be stopped by calling the stop() method on the observer.
* Functions for added, updated and removed can be added to the observer
* afterward.
*/
observe(name, added, updated, removed) {
var self = this;
var observer = {};
var id = self._getNextId();

// name, _id are immutable
Object.defineProperty(observer, "name", {
get: function() { return name; },
enumerable: true
});

Object.defineProperty(observer, "_id", { get: function() { return id; }});

observer.added = added || function(){};
observer.updated = updated || function(){};
observer.removed = removed || function(){};

observer.stop = function() {
self._removeObserver(observer);
};

self._addObserver(observer);

return observer;
}

}

module.exports = DDPClient;
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "ddp-client",
"version": "0.1.2",
"version": "0.1.3",
"description": "DDP Client for browsers and native JS runtimes (no dependencies on document or 3rd party WebSocket libraries)",
"main": "index.js",
"keywords": [
Expand Down
73 changes: 73 additions & 0 deletions promise.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
"use strict";

let DDPClient = require('./index.js');

class DDP extends DDPClient {
constructor(opts) {
super(opts);
}

connect() {
return new Promise((resolve, reject) => {
super.connect((err, wasReconnect) => {
if (err) {
console.log('DDP connection error!');
return reject(err);
}

if (wasReconnect) {
console.log('Reestablishment of a connection.');
}

console.log('connected to Meteor server');
resolve(this._isReconnecting);
});
});
}

call(name, params) {
return new Promise((resolve, reject) => {
super.call(name, params, (err, res) => {
if (err) {
reject(err);
} else {
resolve(res);
}
}, () => {
// callback which fires when server has finished
});
});
}

callWithRandomSeed(name, params, randomSeed) {
return new Promise((resolve, reject) => {
super.callWithRandomSeed(name, params, randomSeed, (err, res) => {
if (err) { r
reject(err);
} else {
resolve(res);
}
}, () => {
// callback which fires when server has finished
});
});
}

subscribe(...args) {
return super.subscribe(...args);
}

unsubscribe(...args) {
return super.unsubscribe(...args);
}

close() {
return super.close();
}

observe(...args) {
return super.observe(...args);
}
}

module.exports = DDP;