bubpubsub

a pubsub system with bubbling, replies and persistence

npm install bubpubsub
1 downloads in the last day
1 downloads in the last week
32 downloads in the last month

bubPubSub

bubPubSub (VisualWeb's PubSub) is a publish/subscribe system for communication between objects/modules of your code. It's rather similar to common pubSub systems, but closer related to the event system of nodeJS or the browser. USP's are

  • (optional) BUBBLING along a topic-tree

  • (optional) PERSISTENCE of publications for later retrieval/reference

It is developed, used and sponsored by myLinkCloud (http://www.mylinkcloud.com), meinUnterricht (http://www.meinUnterricht.de), K.lab (http://www.klab-berlin.com), and ViSERiON (http://www.viserion.com) .

compatibility

bubPubSub works on both ends, the client and the server (nodeJS).

Installation with nodeJS

  $ npm install bubpubsub

Test (server-side)

cd to node_modules/bubpubsub
make

VERSION HISTORY:

- v0.8.7 22.11.12
    - introduced silent option as a per-publication flag to avoice console logging
- v0.8.6 22.11.12
    - bugFix
- v0.8.6 22.11.12
    - bugFix
- v0.8.5 19.11.12
    - bugFixes ..
- v0.8.4 15.11.12
    - bugFixes ..
    - old parameters for subscribe will be deprecated announcement
- v0.8.3 15.11.12
    - introduced autoUnsubscribe to subscribe options ! 
    - optional try-catch around subscribers
    - scope setting for subscribers
    - introduced limits for error and publication logs to 10000 items in order to limit memory usage.
- v0.82 28.07.2012
    - bugfix in chain default and if check. 
- v0.81 27.07.12
    - unsubscribe updated to do a better job of namespace (& memory) cleanup
- v0.80 22.06.12
    - added the option to do chaining. this needs quite some field-testing ;)
    - added chainDelay config setting for chained publications to allow breathing-time for the cpu 
- v0.71 15.06.12
    - made the code a bit more beautiful
    - introduced forceUniqueSubscriber to allow replacing subscriber methods by Id
    - replaced isFunction method by typeof test 
    - removed randomString method
    - switched from bad style == to good style === operators... 
    - changed licence
- v0.70 21.03.12
    - renamed
    - fused client (jQuery) and server (nodeJS) versions
    - series of bugfixes
- v0.60    29.10.11            
    - removed dependencies from jQuery. 
    - enabled using the same file for client- and nodeJS server-side implementation
    - added the reply function explicitely

Usage

there is a detailed description of all functions in the source-code ... 

examples (more in the source JS)

    // SUBSCRIPTION TO a deep branch WITHOUT PICKING UP BUBBLES 
     var myEuropeSubscription = aBubPubSub.subscribe(
         '/politics/europe', 
         function(data, currentBranch, publisher, replyCall, subscriptionIdObject) { 
             console.log('original publication branch: ' + data.originalTopic);  
            console.log('i subscribed to : ' + currentBranch);  
             replyCall('I am [' + myEuropeSubscription.id + '] and I am only interested in european politics');
         }, 
         { getBubbles: false } 
         'myEuropeSubscriber'
     );

   // SUBSCRIPTION TO ROOT WITH BUBBLING
    var myRootSubscription = aBubPubSub.subscribe(
         '/', 
         function(data, currentBranch, publisher, replyCall, subscriptionIdObject) { 
             console.log('original publication branch: ' + data.originalTopic);  
            console.log('i subscribed to : ' + currentBranch);  
             replyCall('I am [' + myRootSubscription.id + '] and I pick up any publication');
         }, 
         { getBubbles: true } 
         'myRootSubscriber'
     );

       // PUBLISH WITH PERSISTANCE AND BUBBLING
    aBubPubSub.publish(
         '/politics/europe/germany/pipa', 
         { 
             content: 'this is wonderfool',  
        },
        { 
            bubble:true, 
            persist:true 
        }, 
        'myTestPublisher1',
        function(replyCallParametersOfYourChoice) {
            console.dir(replyCallParametersOfYourChoice);
            return true;
        }
     );

    // PUBLISH WITH PERSISTANCE AND BUBBLING
    aBubPubSub.publish(
         '/politics/europe/germany/pipa/legislation', 
         { 
             content: 'this can not be picked up by the nonBubbler or the persistence check (below)',  
        },
        { 
            bubble:true, 
            persist:false 
        }, 
        'myTestPublisher2',
        function(replyCallParametersOfYourChoice) {
            console.dir(replyCallParametersOfYourChoice);
            return true;
        }
     );


    // PERSISTANCE
    var persistentPublicationObjectArrayOnPolitics = aBubPubSub.wasPublishedOnTopic('/politics', true);

    // UNSUBSCRIBE
    aBubPubSub.unsubscribe(myRootSubscription);
npm loves you