Module: Sinatra::API::Callbacks

Included in:
Sinatra::API
Defined in:
lib/sinatra/api/callbacks.rb

Overview

An event pub/sub interface.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#callbacksObject

Returns the value of attribute callbacks.



26
27
28
# File 'lib/sinatra/api/callbacks.rb', line 26

def callbacks
  @callbacks
end

Class Method Details

.extended(base) ⇒ Object



28
29
30
# File 'lib/sinatra/api/callbacks.rb', line 28

def self.extended(base)
  base.callbacks = {}
end

Instance Method Details

#on(event, &callback) ⇒ Object

Add a callback to a given event.

Examples:

Listening to :resource_located events


Sinatra::API.on :resource_located do |resource, name|
  if resource.is_a?(Monkey)
    resource.eat_banana
  end
end

A callback with an instance method


class Monkey
  def initialize
    # This means that the monkey will eat a banana everytime a resource
    # is located.
    Sinatra::API.on :resource_located, &method(:eat_banana)
  end

  def eat_banana(*args)
  end
end


54
55
56
# File 'lib/sinatra/api/callbacks.rb', line 54

def on(event, &callback)
  (self.callbacks[event.to_sym] ||= []) << callback
end

#trigger(event, *args) ⇒ Object

Broadcast an event to subscribed callbacks.

Examples:

Triggering an event with an argument


Sinatra::API.trigger :special_event, 'Special Argument'


64
65
66
67
68
69
# File 'lib/sinatra/api/callbacks.rb', line 64

def trigger(event, *args)
  callbacks = self.callbacks[event.to_sym] || []
  callbacks.each do |callback|
    callback.call(*args)
  end
end