Flirt
This Ruby gem is a brutally simple take on the observer pattern.
Flirt acts as a single point to which events can be sent and listeners can be registered, in order to promote extreme decoupling between components.
Installation
Add this line to your application's Gemfile:
gem 'flirt'
And then execute:
$ bundle
Or install it yourself as:
$ gem install flirt
Usage
To publish an event:
Flirt.publish :picked, event_data
To subscribe:
class MyListener
def initialize
Flirt.subscribe self, :picked, with: :picked_callback
end
def picked_callback(event_data)
puts "The #{event_data[:fruit]} has been picked"
end
end
To unsubscribe:
Flirt.unsubscribe self, :picked, with: :picked_callback
end
Syntactic sugar for subscription and unsubscription has been provided in the form of a module:
class MyListener
include Flirt::Listener
def initialize
subscribe_to :picked, with: :picked_callback
end
def before_destroy
unsubscribe_from :picked, with: :picked_callback
end
def picked_callback(event_data)
puts "The #{event_data[:fruit]} has been picked"
end
end
or even:
class MyListener
extend Flirt::Listener
subscribe_to :picked, with: :picked_callback
def self.picked_callback(event_data)
puts "The #{event_data[:fruit]} has been picked"
end
end
unsubscribe_from can technically be used in the class context, but probably doesn't have as much use.
Flirt defaults to 'enabled'. Switch Flirt off:
Flirt.disable
And back on again:
Flirt.enable
TODO: Disable only a set of events:
Flirt.disable only: [:pancake_cooked, :picked]
TODO: Enable only a set of events:
Flirt.enable only: [:topping_added, :pancake_flipped]
Enabled status affects broadcast/publish, listeners can still be added and will be remembered. No listeners will be removed.
Clear all listeners:
Flirt.clear
Contributing
- Fork it ( https://github.com/[my-github-username]/flirt/fork )
- Create your feature branch (
git checkout -b my-new-feature) - Commit your changes (
git commit -am 'Add some feature') - Push to the branch (
git push origin my-new-feature) - Create a new Pull Request