Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

fh-wfm-mediator

Package Overview
Dependencies
Maintainers
5
Versions
45
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

fh-wfm-mediator

An implementation of the mediator pattern for use with WFM

  • 1.0.0-pre.2
  • development
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
13
increased by85.71%
Maintainers
5
Weekly downloads
 
Created
Source

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

Subscription Callbacks

When passing a callback to a mediator.subscribe function, it is necessary to return a Promise if the operation is asynchronous or if the response from the subscriber is required.

var mediator = require('fh-wfm-mediator');
var Promise = require('bluebird');

mediator.subscribe("wfm:topic", function(topicData) {

  return new Promise(function(resolve, reject) {
    doSomeAyncFunction(topicData, function(err, result){
      err ? reject(err) : resolve(result);
    });
  });

});

//The published topic will not resolve until all of the asynchronous subscribers have resolved / rejected
//The `result` is the resolved value of the highest priority subscriber.
mediator.publish("wfm:topic").then(function(result) {
  console.log("All of the subscribers have resolved.", result);
}).catch(function(err) {
  console.error("An error occurred when executing topic wfm:topic", err);
});

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.

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

//A set of topics for saving user data
var userDataTopics = new Topic(mediator)
  .prefix('wfm:data')
  .entity('user')
  .on('read', function(id) {
    //asyncReadUser returns a Promise
    return asyncReadUser(id);
  }).on('update', function(userToUpdate) {
    //asyncReadUser returns a Promise
    return asyncUpdateUser(userToUpdate);
  });


new Topic(mediator)
  .prefix('wfm')
  .entity('user')
  // This will subscribe to wfm:user:read
  .on('read', function(id) {
    // will publish to 'wfm:user:data:read', which returns a Promise.
    return userDataTopics.publish('read', id).then(function(user) {
      //We have retrieved the user, we can apply any additional asynchronous operations we need when the resolving the user
      return readUserGroupInformation(user.id).then(function(groupInformation) {
        user.groupName = groupInformation.name;
        return user;
      });
    });
  })
  .on('update_location', function(id, location) {
    //If we don't want to wait for the subscribers to resolve, just return null.
    userDataTopics.publish('read', id).then(function(user) {
      //We have retrieved the user, we can apply any additional asynchronous operations we need when the resolving the user
      user.location = location;
      userDataTopics.publish('update', user);
    });

    return null;
  });


mediator.publish('wfm:user:read', "userid1234").then(function(user) {
  //All of the subscribers have resolved.
  console.log("User read with id " + user.id + " and group name " + user.groupName);
}).catch(function(err) {
  console.log("Error reading user information", err);
});

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')

Keywords

FAQs

Package last updated on 15 Jun 2017

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc