Alex Rivera | Logout

How to do Events in Ruby?

Asked 2009-03-03T05:05:58.827
17

I come from a C# background, and have just started programming in Ruby. The thing is, that I need to know how I can raise events in my classes so that various observers can be triggered when things need to happen.

The problem is the books I have on Ruby don't even mention events, let alone provide examples. Is anyone able to help me?

Edit
Report

2 Answers

24

The question has already been answered, but there's an observer built right into the standard library if you want to give that a look. I've used it in the past for a small game project, and it works very well.

answered 2009-03-03T08:22:31.893
6

Extremely simple Ruby listener. This is not exactly a replacement for .NET events, but this one is an extremely simple example of a very simple listener.

module Listenable

    def listeners() @listeners ||= [] end

    def add_listener(listener)
        listeners << listener
    end

    def remove_listener(listener)
        listeners.delete listener
    end

    def notify_listeners(event_name, *args)
        listeners.each do |listener|
            if listener.respond_to? event_name
                listener.__send__ event_name, *args
            end
        end
    end

end

To use:

class CowListenable
    include Listenable

    def speak
        notify_listeners :spoken, 'moooo!'
    end

end

class CowListener

    def initialize(cow_listenable)
        cow_listenable.add_listener self
    end

    def spoken(message)
        puts "The cow said '#{message}'"
    end

end

cow_listenable = CowListenable.new
CowListener.new(cow_listenable)
cow_listenable.speak

Output:

The cow said 'moooo!'
answered 2013-08-02T19:23:17.883

Your Answer