-
Notifications
You must be signed in to change notification settings - Fork 0
EventPublisher module for Ruby
License
davybrion/EventPublisher
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
The EventPublisher module enables you to define multiple events in a class, and have objects subscribe to them with either a Method instance, or a block. Subscribers can obviously also unsubscribe Method instances, though blocks can't be unsubscribed.
To install, simply type this:
gem install eventpublisher
Here's a simple example that illustrates the usage of the EventPublisher module:
class Publisher
include EventPublisher
event :first_event
event :second_event
def trigger_events
trigger :first_event, "first event"
trigger :second_event, "second event", "extra argument"
end
end
class FirstSubscriber
def initialize(publisher)
@publisher = publisher
@publisher.subscribe_all self
end
def stop_listening
@publisher.unsubscribe_all self
end
def first_event_handler(args)
puts "first_event_handler of FirstSubscriber received #{args}"
end
def second_event_handler(arg1, arg2)
puts "second_event_handler of FirstSubscriber received arg1 = #{arg1} arg2 = #{arg2}"
end
end
class SecondSubscriber
def initialize(publisher)
@publisher = publisher
@publisher.subscribe :first_event, method(:first_handler)
@publisher.subscribe(:second_event) { |arg1, arg2| puts "block from SecondSubscriber received: #{arg1} #{arg2}"}
end
def stop_listening
@publisher.unsubscribe :first_event, method(:first_handler)
end
def first_handler(args)
puts "first_handler of SecondSubscriber received #{args}"
end
end
publisher = Publisher.new
first_subscriber = FirstSubscriber.new(publisher)
second_subscriber = SecondSubscriber.new(publisher)
puts "you should see 4 outputted strings when the events are triggered"
publisher.trigger_events
first_subscriber.stop_listening
second_subscriber.stop_listening
puts "you should still see 1 outputted string because the block is still subscribed, while the Method instances have been unsubscribed"
publisher.trigger_events
The output of running this code is the following:
you should see 4 outputted strings when the events are triggered
first_event_handler of FirstSubscriber received first event
first_handler of SecondSubscriber received first event
second_event_handler of FirstSubscriber received arg1 = second event arg2 = extra argument
block from SecondSubscriber received: second event extra argument
you should still see 1 outputted string because the block is still subscribed, while the Method instances have been unsubscribed
block from SecondSubscriber received: second event extra argument
About
EventPublisher module for Ruby
Resources
License
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published