module Sinatra::API::Callbacks

An event pub/sub interface.

Attributes

callbacks[RW]

Public Class Methods

extended(base) click to toggle source
# File lib/sinatra/api/callbacks.rb, line 28
def self.extended(base)
  base.callbacks = {}
end

Public Instance Methods

on(event, &callback) click to toggle source

Add a callback to a given event.

@example Listening to :resource_located events

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

@example 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
# File lib/sinatra/api/callbacks.rb, line 54
def on(event, &callback)
  (self.callbacks[event.to_sym] ||= []) << callback
end
trigger(event, *args) click to toggle source

Broadcast an event to subscribed callbacks.

@example Triggering an event with an argument

Sinatra::API.trigger :special_event, 'Special Argument'
# 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