2010-03-07 09:24:30 -05:00
|
|
|
module ActiveSupport
|
2010-03-29 20:08:08 -04:00
|
|
|
@load_hooks = Hash.new {|h,k| h[k] = [] }
|
|
|
|
@loaded = {}
|
2010-03-07 09:24:30 -05:00
|
|
|
|
2010-05-15 09:08:55 -04:00
|
|
|
def self.on_load(name, options = {}, &block)
|
2010-03-29 20:08:08 -04:00
|
|
|
if base = @loaded[name]
|
2010-05-15 09:08:55 -04:00
|
|
|
execute_hook(base, options, block)
|
2010-03-29 20:08:08 -04:00
|
|
|
else
|
2010-05-15 09:08:55 -04:00
|
|
|
@load_hooks[name] << [block, options]
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def self.execute_hook(base, options, block)
|
|
|
|
if options[:yield]
|
|
|
|
block.call(base)
|
|
|
|
else
|
|
|
|
base.instance_eval(&block)
|
2010-03-07 09:24:30 -05:00
|
|
|
end
|
2010-03-29 20:08:08 -04:00
|
|
|
end
|
2010-03-07 09:24:30 -05:00
|
|
|
|
2010-03-29 20:08:08 -04:00
|
|
|
def self.run_load_hooks(name, base = Object)
|
|
|
|
@loaded[name] = base
|
2010-05-15 09:08:55 -04:00
|
|
|
@load_hooks[name].each do |hook, options|
|
|
|
|
execute_hook(base, options, hook)
|
|
|
|
end
|
2010-03-07 09:24:30 -05:00
|
|
|
end
|
|
|
|
end
|