Class: On
- Inherits:
-
Object
- Object
- On
- Defined in:
- lib/on.rb,
lib/on/version.rb
Overview
Dynamic callbacks for Ruby blocks.
Example
require 'on'
def tweet(, &block)
callback = On.new(:success, :failure, &block)
callback.call :success
rescue => e
callback.call :failure, e.
end
tweet "hello world" do |callback|
callback.on :success do
# handle success
end
callback.on :failure do ||
# handle error message
end
end
Defined Under Namespace
Classes: Callback, InvalidCallback
Constant Summary collapse
- VERSION =
"0.1.0"
Instance Method Summary collapse
-
#call(name, *args) ⇒ Object
Dispatch callback.
-
#initialize(*callbacks, &block) ⇒ On
constructor
A new instance of On.
-
#on(name, &block) ⇒ Object
Handle a callback.
Constructor Details
#initialize(*callbacks, &block) ⇒ On
Returns a new instance of On.
26 27 28 29 30 31 |
# File 'lib/on.rb', line 26 def initialize(*callbacks, &block) raise ArgumentError, "please provide at least one callback" if callbacks.empty? raise ArgumentError, "please provide a block" unless block @callbacks = Set.new(callbacks) @block = block end |
Instance Method Details
#call(name, *args) ⇒ Object
Dispatch callback.
34 35 36 37 38 |
# File 'lib/on.rb', line 34 def call(name, *args) validate_callback!(name) @callback = Callback.new(name, args) @block.call(self) end |
#on(name, &block) ⇒ Object
Handle a callback.
41 42 43 44 45 46 |
# File 'lib/on.rb', line 41 def on(name, &block) validate_callback!(name) if @callback && @callback.name == name block.call(*@callback.args) end end |