Module: Sass::Callbacks

Included in:
Plugin
Defined in:
lib/sass/callbacks.rb

Overview

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.

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

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

Examples:

Define a callback

Use a callback

Instance Method Summary collapse

Instance Method Details

#define_callback(name) (protected)

This method returns an undefined value.

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).

Parameters:

  • name (Symbol)

    The name of the callback



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/sass/callbacks.rb', line 35

def define_callback(name)
  class_eval <<RUBY
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}
RUBY
end