bubpubsub

a pubsub system with bubbling, replies and persistence

Usage no npm install needed!

<script type="module">
  import bubpubsub from 'https://cdn.skypack.dev/bubpubsub';
</script>

README

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);
```