ソースを参照

Merge remote-tracking branch 'upstream/devel' into devel

Xavier Priour 9 年 前
コミット
0608b90d3b
3 ファイル変更52 行追加91 行削除
  1. 1 1
      .meteor/packages
  2. 1 1
      .meteor/versions
  3. 50 89
      server/publications/boards.js

+ 1 - 1
.meteor/packages

@@ -18,13 +18,13 @@ es5-shim
 aldeed:collection2
 cfs:gridfs
 cfs:standard-packages
+cottz:publish-relations
 dburles:collection-helpers
 idmontie:migrations
 matb33:collection-hooks
 matteodem:easy-search
 mongo
 mquandalle:collection-mutations
-reywood:publish-composite
 
 # Account system
 accounts-password

+ 1 - 1
.meteor/versions

@@ -39,6 +39,7 @@ check@1.1.0
 chuangbo:cookie@1.1.0
 coffeescript@1.0.11
 cosmos:browserify@0.9.2
+cottz:publish-relations@2.0.0
 dburles:collection-helpers@1.0.4
 ddp@1.2.2
 ddp-client@1.2.1
@@ -120,7 +121,6 @@ reactive-dict@1.1.3
 reactive-var@1.0.6
 reload@1.1.4
 retry@1.0.4
-reywood:publish-composite@1.4.2
 routepolicy@1.0.6
 seriousm:emoji-continued@1.4.0
 service-configuration@1.0.5

+ 50 - 89
server/publications/boards.js

@@ -55,97 +55,58 @@ Meteor.publish('archivedBoards', function() {
   });
 });
 
-Meteor.publishComposite('board', function(boardId) {
+Meteor.publishRelations('board', function(boardId) {
   check(boardId, String);
-  return {
-    find() {
-      return Boards.find({
-        _id: boardId,
-        archived: false,
-        // If the board is not public the user has to be a member of it to see
-        // it.
-        $or: [
-          { permission: 'public' },
-          { members: { $elemMatch: { userId: this.userId, isActive: true }}},
-        ],
-      }, { limit: 1 });
-    },
-    children: [
-      // Lists
-      {
-        find(board) {
-          return Lists.find({
-            boardId: board._id,
-          });
-        },
-      },
 
-      // Cards and cards comments
-      // XXX Originally we were publishing the card documents as a child of the
-      // list publication defined above using the following selector `{ listId:
-      // list._id }`. But it was causing a race condition in publish-composite,
-      // that I documented here:
-      //
-      //   https://github.com/englue/meteor-publish-composite/issues/29
-      //
-      // I then tried to replace publish-composite by cottz:publish, but it had
-      // a similar problem:
-      //
-      //   https://github.com/Goluis/cottz-publish/issues/4
-      //   https://github.com/wekan/wekan/pull/78
-      //
-      // The current state of relational publishing in meteor is a bit sad,
-      // there are a lot of various packages, with various APIs, some of them
-      // are unmaintained. Fortunately this is something that will be fixed by
-      // meteor-core at some point:
-      //
-      //   https://trello.com/c/BGvIwkEa/48-easy-joins-in-subscriptions
-      //
-      // And in the meantime our code below works pretty well -- it's not even a
-      // hack!
-      {
-        find(board) {
-          return Cards.find({
-            boardId: board._id,
-          });
-        },
+  this.cursor(Boards.find({
+    _id: boardId,
+    archived: false,
+    // If the board is not public the user has to be a member of it to see
+    // it.
+    $or: [
+      { permission: 'public' },
+      { members: { $elemMatch: { userId: this.userId, isActive: true }}},
+    ],
+  }, { limit: 1 }), function(boardId, board) {
+    this.cursor(Lists.find({ boardId }));
 
-        children: [
-          // comments
-          {
-            find(card) {
-              return CardComments.find({
-                cardId: card._id,
-              });
-            },
-          },
-          // Attachments
-          {
-            find(card) {
-              return Attachments.find({
-                cardId: card._id,
-              });
-            },
-          },
-        ],
-      },
+    // Cards and cards comments
+    // XXX Originally we were publishing the card documents as a child of the
+    // list publication defined above using the following selector `{ listId:
+    // list._id }`. But it was causing a race condition in publish-composite,
+    // that I documented here:
+    //
+    //   https://github.com/englue/meteor-publish-composite/issues/29
+    //
+    // cottz:publish had a similar problem:
+    //
+    //   https://github.com/Goluis/cottz-publish/issues/4
+    //
+    // The current state of relational publishing in meteor is a bit sad,
+    // there are a lot of various packages, with various APIs, some of them
+    // are unmaintained. Fortunately this is something that will be fixed by
+    // meteor-core at some point:
+    //
+    //   https://trello.com/c/BGvIwkEa/48-easy-joins-in-subscriptions
+    //
+    // And in the meantime our code below works pretty well -- it's not even a
+    // hack!
+    this.cursor(Cards.find({ boardId }), function(cardId) {
+      this.cursor(CardComments.find({ cardId }));
+      this.cursor(Attachments.find({ cardId }));
+    });
 
-      // Board members. This publication also includes former board members that
-      // aren't members anymore but may have some activities attached to them in
-      // the history.
-      {
-        find(board) {
-          return Users.find({
-            _id: { $in: _.pluck(board.members, 'userId') },
-          });
-        },
-        // Presence indicators
-        children: [{
-          find(user) {
-            return presences.find({userId: user._id});
-          },
-        }],
-      },
-    ],
-  };
+    // Board members. This publication also includes former board members that
+    // aren't members anymore but may have some activities attached to them in
+    // the history.
+    //
+    this.cursor(Users.find({
+      _id: { $in: _.pluck(board.members, 'userId') },
+    }), function(userId) {
+      // Presence indicators
+      this.cursor(presences.find({ userId }));
+    });
+  });
+
+  return this.ready();
 });