0.0
No release in over 3 years
Low commit activity in last 3 years
This gem allows you to create and emit your events very easily and minimalistic.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

 Project Readme

rbminivents

This gem allows you to easily use minimalistic events in Ruby.

rb.minvents logo

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