0.3.4 • Published 8 years ago

fh-wfm-mediator v0.3.4

Weekly downloads
34
License
MIT
Repository
github
Last release
8 years ago

FeedHenry RainCatcher mediator Build Status

An implementation of the mediator pattern for use with RainCatcher modules.

API

MethodDescription
mediator#publish( channel, [data] )Publish data to a channel
mediator#subscribe( channel, callback )Subscribe to events in a channel
mediator#remove( channel, [identifier] )Unsubscribe to events in a channel
mediator#once( channel, callback )A one-time subscribtion to events in a channel
mediator#promise( channel )A promise-based API for mediator#once

Topics utilities

This module also provides a fluent, promise-based API for subscribing to convention and adhering to the request-response pattern used throughout the RainCatcher modules and available through mediator#request. Namely if a data:read topic that is used to provide a feature such as reading data from a remote source asyncronously, the result of the operation is by convention published in the done:data:read topic, and if it results in an error, it is published to the error:data:read topic.

This utility module helps with enforcing the same namespace for a set of related topics without repeating string literals or constants, and adhering to the convention above. It is available under lib/topics with jsdoc comments.

Example

var mediator = require('fh-wfm-mediator');
var Topics = require('fh-wfm-mediator/lib/topics');

var topics = new Topics(mediator)
  .prefix('wfm')
  .entity('user')
  // This will subscribe to wfm:user:read
  // and publish results to done:wfm:user:read:{id}
  // and errors to error:wfm:user:read:{id}
  .on('read', function(id) {
    // will request to 'data:user:read'
    return this.mediator.request(['data', this.entity, 'read'].join(':'), id);
  })
  // If you do not return a Promise from the handler function,
  // you must manually publish the result to another topic so it can be consumed
  .on('delete', function(id) {
    var self = this;
    this.mediator.request(this.entity + ':delete', id).then(function() {
      self.mediator.publish('done:ui:user:deleted:' + id);
    }).catch(function(e) {
      self.mediator.publish('error:ui:user:deleted:' + id, e);
    });
  });

Usage in an Angular.js client

API

Besides the above operations, the current operations are available :

MethodDescription
mediator#subscribeForScope( channel, scope, callback )Subscribe to events in a channel and unsubscribe when the scope is destroyed

Setup

This module is packaged in a CommonJS format, exporting the name of the Angular namespace. The module can be included in an angular.js as follows:

angular.module('app', [
, require('fh-wfm-mediator')
...
])

Integration

Inject the mediator service to broadcast and subscribe to events

.controller('MyController', function (mediator) {
  ...
}

Usage in an node.js backend

Require the module to get an instance of the mediator. Be sure to use that same instance throughout the application to maintain a single list of subscribers.

mediator = require('fh-wfm-mediator/lib/mediator')
1.0.0-pre.2

8 years ago

1.0.0-pre.1

8 years ago

0.3.4

8 years ago

0.3.3

8 years ago

0.3.2

8 years ago

0.4.0-rc1

8 years ago

0.3.1

8 years ago

0.3.1-alpha.2

8 years ago

0.3.1-alpha.1

8 years ago

0.3.0-rc8

8 years ago

0.2.0-0

8 years ago

0.3.0-rc7

8 years ago

0.3.0-rc6

8 years ago

0.3.0-rc5

8 years ago

0.3.0-rc4

8 years ago

0.1.0

8 years ago

0.3.0-rc3

8 years ago

0.3.0-rc2

8 years ago

0.1.0-rc4

8 years ago

0.2.0-rc3

8 years ago

0.2.0-rc2

8 years ago

0.2.0-rc1

8 years ago

0.1.0-rc3

8 years ago

0.1.0-rc2

9 years ago

0.1.0-rc1

9 years ago

0.0.15

9 years ago

0.0.14

9 years ago

0.0.13

9 years ago

0.0.12

9 years ago

0.0.11

9 years ago

0.0.10

9 years ago

0.0.9

9 years ago

0.0.8

9 years ago

0.0.7

10 years ago

0.0.6

10 years ago

0.0.5

10 years ago

0.0.4

10 years ago

0.0.3

10 years ago

0.0.2

10 years ago

0.0.1

10 years ago