Project

pubsub

0.0
No commit activity in last 3 years
No release in over 3 years
PubSub pattern
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 2.6.0

Runtime

 Project Readme

pubsub¶ ↑

DESCRIPTION:¶ ↑

Ruby PubSub pattern for objects. Allows to coordinate object (publisher/subscriber) communication.

FEATURES:¶ ↑

  • Support multithread pulisher/subscriber

  • Contains message queue and dispatcher.

  • Dispatcher work in main thread and sleep when message queue is empty

USAGE:¶ ↑

Using pubsub is simple

require 'rubygems'
require 'ruby_events'

Include pubsub module into class

class MyPublischer
    include PubSub

end

Run message queue dispatcher

PubSub.run

Message in channel with subchannels (include ‘/’) sending throw all subchannels, e.g. for channel ‘system/info’ message sending to subsribers of channel ‘system/info’, subchannel ‘system’ and global channel ‘*’

Unsubscribe from all channels use unsubscribe method without params.

class MyPublischer
    include PubSub
    def initialize
        subscribe "system/info", :log_info
        subscribe "system/signout", :destroy
    end

    def destroy
        unsubscribe
    end
end

Unsubscribe all listeners from one channel use unsubscribe method with channel name

class TextLogger
    include PubSub
    def initialize
        subscribe "system/info", :log_info
    end

    def log_info
        #log to text file
    end
end

class ConsoleLogger
    include PubSub
    def initialize
        subscribe "system/info", :log_info
    end

    def log_info
        #log to console
    end
end

class LoggerManager
    include PubSub

    def unsubscribe_all_logger
        unsubscribe "system/info"
    end
end

Unsubscribe one listener from one channel use unsubscribe method with channel name and listener

class MyPublisher
    include PubSub

    def initialize
        subscribe "system/info", :log_info
    end

    def destroy
        unsubscribe "system/info", :log_info
    end
end

EXAMPLES:¶ ↑

Create object and subscribe it to channel “system/info”

class SystemLogger
    include PubSub

    def initialize
        subscribe "system/info", :log_info
    end

    def destroy
        unsubscribe
    end

    def log_info(message)
        puts message

        # stop pubsub dispatcher
        PubSub.stop
    end
end

class Publisher
    include PubSub

    def say_hello
        publish "system/info", "Hello world!"
    end
end

SystemLogger.new
publisher = Publisher.new
publisher.say_hello

# run pubsub dispatcher
PubSub.run

INSTALL:¶ ↑

  • gem install pubsub

DOCS:¶ ↑

rubydoc.info/gems/pubsub

Copyright © 2011 Max Kazarin. See LICENSE.txt for further details.