Module: Sass::Callbacks

Defined in:
/var/www/sass-pages/.sass/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.

Examples:

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

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!

Defined Under Namespace

Modules: InstanceMethods

Class Method Summary

Instance Method Summary

Class Method Details

+ extended(base)

Automatically includes InstanceMethods when something extends this module.

Parameters:

  • (Module) base


30
31
32
# File '/var/www/sass-pages/.sass/lib/sass/callbacks.rb', line 30

def self.extended(base)
  base.send(:include, InstanceMethods)
end

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:

  • (Symbol) name — The name of the callback


50
51
52
# File '/var/www/sass-pages/.sass/lib/sass/callbacks.rb', line 50

def define_callback(name)
  class_eval "def on_\#{name}(&block)\n  @_sass_callbacks ||= {}\n  (@_sass_callbacks[\#{name.inspect}] ||= []) << block\nend\n\ndef run_\#{name}(*args)\n  return unless @_sass_callbacks\n  return unless @_sass_callbacks[\#{name.inspect}]\n  @_sass_callbacks[\#{name.inspect}].each {|c| c[*args]}\nend\nprivate :run_\#{name}\n"
end