# 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 <<RUBY, __FILE__, __LINE__ + 1
    def on_#{name}(&block)
      @_sass_callbacks = {} unless defined? @_sass_callbacks
      (@_sass_callbacks[#{name.inspect}] ||= []) << block
    end

    def run_#{name}(*args)
      return unless defined? @_sass_callbacks
      return unless @_sass_callbacks[#{name.inspect}]
      @_sass_callbacks[#{name.inspect}].each {|c| c[*args]}
    end
    private :run_#{name}
    RUBY
        end