RbEvent

Gem Version Build Status Coverage Status

Simple event

You can use event in Ruby like AS3, .Net

require 'rb_event'

class Test
  include RbEvent

  def say
    fire_event :said, "Hello? World!"
  end

  def say_hello(msg)
    puts msg
  end
end

inst = Test.new
inst.listen :said do |msg|
  puts msg
end
inst.say
# Hello? World!

inst.listen :said, inst.method(:say_hello)
inst.say
# Hello? World!

Installation

Run gem install rb_event or add gem 'rb_event' to your Gemfile

And add to your .rb source file:

require 'rb_event'

Usage

Add include RbEvent to your class, and see below.

listen(name, listener=nil, &listener_block)

  • name [#to_sym] Event name
  • listener [#call]

Adds an event listener and returns the listener added.

listener 'or' listener_block required.

Also aliased as: add_listener

unlisten(name, listener)

Removes an event listener.

Also aliased as: remove_listener

listen?(name, listener)

Checks the listener is added.

Also aliased as: has_listener?.

protected fire_event(name, *args)

Calls listeners

Example

Block listener

require 'rb_event'

class Test
  include RbEvent

  def say
    fire_event :said, "Hello? World!"
  end
end

inst = Test.new
inst.listen :said do |msg|
  puts msg
end
inst.say
# Hello? World!

Method as a listener

require 'rb_event'

class Test
  include RbEvent

  def say_hello(msg)
    puts msg
  end
end

inst.listen :said, inst.method(:say_hello)
inst.say
# Hello? World!

Remove event listener

require 'rb_event'

class Test
  include RbEvent
end

# Works with every listener type (Block, Proc, Method ...)
inst = Test.new # <RbEvent::Listener: ...>
listener = inst.listen(:test) {}
puts inst.listen?(:test, listener) # true
inst.unlisten :test, listener

# Proc
p = Proc.new {}
inst.listen :test, p
puts inst.listen?(:test, p) # true
inst.unlisten :test, p

# Method
def callback
end
inst.listen :test, method(:callback)
puts inst.listen?(:test, method(:callback)) # true
inst.unlisten :test, method(:callback)

Author

Sputnik Gugja ([email protected])

License

This is free software released into the public domain (CC0 license).

See LICENSE file.