This gem allows you to easily use minimalistic events in Ruby.
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.
This gem requires Ruby 2.5+. It might work with older versions of Rails though.
Add the gem to your Gemfile
:
gem 'rbminivents'
and run:
bundle install
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
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
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
)
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