Sha256: b9d61cc4914a35b0b8e9165020f104aa0a7ef8feb4ccfedce8109f3f35fb37be
Contents?: true
Size: 1.37 KB
Versions: 109
Compression:
Stored size: 1.37 KB
Contents
# 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! module Sass::Callbacks protected # 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] 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 end
Version data entries
109 entries across 109 versions & 2 rubygems