Add callback so v4 extensions can see when other extensions are activated

This commit is contained in:
Thomas Reynolds 2013-06-04 15:51:03 -07:00
parent f3e2e8fdf5
commit 265f90e240
6 changed files with 63 additions and 1 deletions

View file

@ -142,6 +142,7 @@ module Middleman
# Search the root of the project for required files
$LOAD_PATH.unshift(root)
::Middleman::Extension.clear_after_extension_callbacks
run_hook :initialized
if config[:autoload_sprockets]
@ -178,7 +179,7 @@ module Middleman
run_hook :after_configuration
logger.debug "Loaded extensions:"
self.extensions.each do |ext,_|
self.extensions.each do |ext, klass|
if ext.is_a?(Hash)
ext.each do |k,_|
logger.debug "== Extension: #{k}"
@ -186,6 +187,10 @@ module Middleman
else
logger.debug "== Extension: #{ext}"
end
if klass.is_a?(::Middleman::Extension)
::Middleman::Extension.activated_extension(klass)
end
end
end
end

View file

@ -1,4 +1,5 @@
require "active_support/core_ext/class/attribute"
require "active_support/core_ext/module/delegation"
module Middleman
@ -131,11 +132,31 @@ module Middleman
def activate
new(::Middleman::Application)
end
def clear_after_extension_callbacks
@_extension_activation_callbacks = {}
end
def after_extension_activated(name, &block)
@_extension_activation_callbacks ||= {}
@_extension_activation_callbacks[name] ||= []
@_extension_activation_callbacks[name] << block if block_given?
end
def activated_extension(instance)
name = instance.class.extension_name
return unless @_extension_activation_callbacks && @_extension_activation_callbacks[name]
@_extension_activation_callbacks[name].each do |block|
block.arity == 1 ? block.call(instance) : block.call()
end
end
end
attr_accessor :options
attr_reader :app
delegate :after_extension_activated, :to => :"::Middleman::Extension"
def initialize(klass, options_hash={}, &block)
@_helpers = []
@klass = klass