class Middleman::ExtensionManager

Public Class Methods

new(app) click to toggle source
# File lib/middleman-core/extension_manager.rb, line 8
def initialize(app)
  @app = app
  @activated = {}

  ::Middleman::Extensions.load_settings(@app)

  manager = self

  {
    before_sitemap: :before_sitemap,
    initialized: :before_configuration
  }.each do |key, value|
    cb = proc { manager.auto_activate(value) }
    @app.send(key, &cb)
  end

  @app.after_configuration_eval(&method(:activate_all))
end

Public Instance Methods

activate(ext_name, options={}, &block) click to toggle source

Activate an extension, optionally passing in options. This method is typically used from a project’s ‘config.rb`.

@example Activate an extension with no options

activate :lorem

@example Activate an extension, with options

activate :minify_javascript, inline: true

@example Use a block to configure extension options

activate :minify_javascript do |opts|
  opts.ignore += ['*-test.js']
end

@param [Symbol] ext_name The name of thed extension to activate @param [Hash] options Options to pass to the extension @yield [Middleman::Configuration::ConfigurationManager] Extension options that can be modified before the extension is initialized. @return [void]

# File lib/middleman-core/extension_manager.rb, line 49
def activate(ext_name, options={}, &block)
  begin
    extension = ::Middleman::Extensions.load(ext_name)
  rescue LoadError => e
    logger.debug "== Failed Activation `#{ext_name}` : #{e.message}"
    return
  end

  logger.debug "== Activating: #{ext_name}"

  if extension.supports_multiple_instances?
    @activated[ext_name] ||= {}
    key = "instance_#{@activated[ext_name].keys.length}"
    @activated[ext_name][key] = extension.new(@app, options, &block)
  elsif @activated.key?(ext_name)
    raise "#{ext_name} has already been activated and cannot be re-activated."
  else
    @activated[ext_name] = extension.new(@app, options, &block)
  end
end
activate_all() click to toggle source
# File lib/middleman-core/extension_manager.rb, line 70
def activate_all
  logger.debug 'Loaded extensions:'
  @instances = @activated.each_with_object([]) do |(ext_name, ext), sum|
    if ext.is_a?(Hash)
      ext.each do |instance_key, instance|
        logger.debug "== Extension: #{ext_name} #{instance_key}"
        sum << instance
      end
    else
      logger.debug "== Extension: #{ext_name}"
      sum << ext
    end
  end

  @instances.each do |ext|
    ::Middleman::Extension.activated_extension(ext)
  end
end
add_exposed_to_context(context) click to toggle source
# File lib/middleman-core/extension_manager.rb, line 89
def add_exposed_to_context(context)
  @instances.each do |ext|
    ext.add_exposed_to_context(context)
  end
end
auto_activate(key) click to toggle source
# File lib/middleman-core/extension_manager.rb, line 27
def auto_activate(key)
  ::Middleman::Extensions.auto_activate(key, @app)
end