module Sass::Callbacks

A lightweight infrastructure for defining and running callbacks. Callbacks are defined using {#define_callback} at the class level, and called using `run_#{name}` at the instance level.

Clients can add callbacks by calling the generated `on_#{name}` method, and passing in a block that's run when the callback is activated.

@example Define a callback

class Munger
  extend Sass::Callbacks
  define_callback :string_munged

  def munge(str)
    res = str.gsub(/[a-z]/, '\1\1')
    run_string_munged str, res
    res
  end
end

@example Use a callback

m = Munger.new
m.on_string_munged {|str, res| puts "#{str} was munged into #{res}!"}
m.munge "bar" #=> bar was munged into bbaarr!

Public Class Methods

extended(base) click to toggle source

Automatically includes {InstanceMethods} when something extends this module.

@param base [Module]

# File lib/sass/callbacks.rb, line 30
def self.extended(base)
  base.send(:include, InstanceMethods)
end

Protected Instance Methods

define_callback(name) click to toggle source

Define a callback with the given name. This will define an `on_#{name}` method that registers a block, and a `run_#{name}` method that runs that block (optionall with some arguments).

@param name [Symbol] The name of the callback @return [void]

# File lib/sass/callbacks.rb, line 51
    def define_callback(name)
      class_eval "def on_#{name}(&block)
  @_sass_callbacks ||= {}
  (@_sass_callbacks[#{name.inspect}] ||= []) << block
end

def run_#{name}(*args)
  return unless @_sass_callbacks
  return unless @_sass_callbacks[#{name.inspect}]
  @_sass_callbacks[#{name.inspect}].each {|c| c[*args]}
end
private :run_#{name}
", __FILE__, __LINE__ + 1
    end