rbminivents
This gem allows you to easily use minimalistic events in Ruby.
Description
This gem was made under the influence of the tiny JS library minivents by allouis that I liked. It seemed to me that it would be quite nice to move something like this to Ruby.
Getting started
Requirements
This gem requires Ruby 2.5+. It might work with older versions of Rails though.
Installation
Add the gem to your Gemfile
:
gem 'rbminivents'
and run:
bundle install
API
This project is similar to the original one in many ways, but some features are not implemented. You can use standard ruby mixins for fully functionality. So,
on
: Listen to event. Returns handle
off
: Stop listening to event
emit
: Emit event
Examples
Standard way
require 'rbminivents'
sandbox = RbMinivents::Events.new
sandbox.on(:event) do
# do stuff
end
sandbox.emit(:event) # does stuff
sandbox.off(:event)
sandbox.emit(:event) # does not do stuff
Passing parameters
require 'rbminivents'
sandbox = RbMinivents::Events.new
sandbox.on(:event) do |name|
puts "Hello, #{name}!"
end
sandbox.emit(:event, 'Max') #=> Hello, Max!
require 'rbminivents'
sandbox = RbMinivents::Events.new
sandbox.on(:event) do |hash, arr, num, bool|
puts hash[:name]
p arr
puts "5 + #{num} = #{5 + num}"
puts "It's true!" if bool
end
# max, [1, 2, 3], 5 + 7 = 12
sandbox.emit(:event,
{name: 'max'},
[1, 2, 3],
7,
false
)
Using Off
require 'rbminivents'
sandbox = RbMinivents::Events.new
handler1 = sandbox.on(:event) do
puts "First Hello!"
end
handler2 = sandbox.on(:event) do
puts "Second Hello!"
end
# remove just this callback
sandbox.emit(:event) # => First Hello!\nSecond Hello!
sandbox.off(:event, handler1)
sandbox.emit(:event) # => Second Hello!
sandbox.off(:event, handler2)
sandbox.emit(:event) # => nothing...
# re-add listener to show can remove all at once
sandbox.on(:event) do
puts "Hello!"
end
# remove all
sandbox.off(:event)
sandbox.emit(:event) # => nothing again