jkuester:meteor-collection-factory

v0.1.10Published 5 years ago

This package has not had recent updates. Please investigate it's current state before committing to using it in your project.

Archived, please use leaonline:collection-factory

Meteor Collection Factory

Create Mongo.Collection instances by using a single configuration object.

Project Status: Active – The project has reached a stable, usable state and is being actively developed. Build Status Size: Tiny License - MIT

Compatible with (optional):

  • aldeed:collection2-core + simpl-schema
  • dburles:mongo-collection-instances
  • dburles:burles:collection-helpers

Changelog

0.1.9

  • dropped dependency to dburles:mongo-collection-instances, only deps left are ecmascript and mongo
  • isomorphic codebase (no server/client related execution branching)
  • hooks are thus not restricted to server environment anymore
  • HookNames are exported
  • Renamed hooks (may cause breaks with previous config, please refactor)
    • insertAfter ==> afterInsert
    • updateAfter ==> afterUpdate
    • removeAfter ==> afterRemove

0.1.8

  • toggle hooks (on/off)
  • removed try/catch from insert/update/remove as this should be responsibility of the surrounding execution context

0.1.7

  • Remove dependencies to check npm versions
  • Remove SimpleSchema indirect dependency (it is totally optional now)
  • Remove hard dep to dburles:burles:collection-helpers (still working optional)
  • Update test code and test project to Meteor 1.8

0.1.4

  • Removed internal dependency to SimpleSchemaFactory
  • Included tmeasday:check-npm-versions

0.1.2

  • Fixed compatibility issues with hwillson:stub-collections

API

createCollection

1CollectionFactory.createCollection(definitionsObject);

Creates a new Mongo.Collection instance by a given definitions object. Minimum required attribute is name.

name:String - The name of the collection

Most basic example
1const Todos = CollectionFactory.createCollection({
2  name : "MY_COLLECTION_NAME",
3});
Optional Attributes

The following attributes for the parameter are accepted:

options:Object - Mongo.Collection options

schema:Object or SimpleSchema instance - attaches the schema to the collection. If it is an object, creates a new SimpleSchema from object. See:

explicit:Boolean - if true it inserts and immediately removes a temp doc to enforce explicit creation

publicFields:Object - A set of public fields as used by publications.

helpersObj:Object - To be used to attach helpers. See:

Hooks

There are hooks for insert, update, remove, as well as afterInsert, afterUpdate, afterRemove available on server.

insert: function(doc, callback, cb) {}

update: function(query, modifier, options, callback) {}

remove: function(selector, callback) {}

afterInsert: function(doc, callback, cb, insertResult) {}

afterUpdate: function(query, modifier, options, callback, updateResult) {}

afterRemove: function(selector, callback, removeResult) {}

The after hooks are also called, if an error has occured. In this case the result parameter will be the error. Note, that the this context is bound to the collection itself, so use this to make use of the collection.

More extended example
1const Todos = CollectionFactory.createCollection({
2	name : "todos",
3	schema: {
4		title: String,
5		createdAt: Number,
6		createdBy: String,
7		checked: {type: Boolean, defaultValue: false, },
8		description: String,
9	},
10	explicit: true,
11	publicFields: {
12		title: 1,
13		description: 1,
14		checked: 1,
15	},
16	insert:function(doc, callback, cb) {
17		doc.createdAt = new Date().getTime();
18		doc.createdBy = Meteor.userId();
19	},
20	afterUpdate: function(query, modifier, options, callback, updateResult){
21		if (updateResult) {
22			// you may log collection updates
23			Logger.log("info", "doc updated", Meteor.userId())
24			
25			// or execute actions immediately
26			const updatedDoc = this.find(query);
27			if (updatedDoc.checked){
28				//...notify creator of the todo...
29			}
30		}
31	},
32});

hasCollection

1CollectionFactory.hasCollection('name')

Uses Mongo.Collection instances to check for existence. See https://github.com/dburles/mongo-collection-instances

getCollection

1CollectionFactory.getCollection('name')

Has the same effect as Mongo.Collection.get('name'). See https://github.com/dburles/mongo-collection-instances

dropCollection

1CollectionFactory.dropCollection('name')

Drops a collection by name.