class Middleman::Extension

Attributes

app[R]
options[RW]

Public Class Methods

activate() click to toggle source
# File lib/middleman-core/extension.rb, line 44
def activate
  new(::Middleman::Application)
end
activated_extension(instance) click to toggle source
# File lib/middleman-core/extension.rb, line 58
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
after_extension_activated(name, &block) click to toggle source
# File lib/middleman-core/extension.rb, line 52
def after_extension_activated(name, &block)
  @_extension_activation_callbacks ||= {}
  @_extension_activation_callbacks[name] ||= []
  @_extension_activation_callbacks[name] << block if block_given?
end
clear_after_extension_callbacks() click to toggle source
# File lib/middleman-core/extension.rb, line 48
def clear_after_extension_callbacks
  @_extension_activation_callbacks = {}
end
config() click to toggle source
# File lib/middleman-core/extension.rb, line 12
def config
  @_config ||= ::Middleman::Configuration::ConfigurationManager.new
end
extension_name() click to toggle source
# File lib/middleman-core/extension.rb, line 36
def extension_name
  ext_name || name.underscore.split('/').last.to_sym
end
helpers(*m, &block) click to toggle source

Add helpers to the global Middleman application. This accepts either a list of modules to add on behalf of this extension, or a block whose contents will all be used as helpers in a new module.

# File lib/middleman-core/extension.rb, line 24
def helpers(*m, &block)
  self.defined_helpers ||= []

  if block_given?
    mod = Module.new
    mod.module_eval(&block)
    m = [mod]
  end

  self.defined_helpers += m
end
new(klass, options_hash={}, &block) click to toggle source
# File lib/middleman-core/extension.rb, line 72
def initialize(klass, options_hash={}, &block)
  @_helpers = []
  @klass = klass

  setup_options(options_hash, &block)
  setup_app_reference_when_available

  # Bind app hooks to local methods
  bind_before_configuration
  bind_after_configuration
  bind_before_build
  bind_after_build
end
option(key, default=nil, description=nil) click to toggle source
# File lib/middleman-core/extension.rb, line 16
def option(key, default=nil, description=nil)
  config.define_setting(key, default, description)
end
register(n=extension_name) click to toggle source
# File lib/middleman-core/extension.rb, line 40
def register(n=extension_name)
  ::Middleman::Extensions.register(n, self)
end

Public Instance Methods

app=(app) click to toggle source
# File lib/middleman-core/extension.rb, line 86
def app=(app)
  @app = app

  (self.class.defined_helpers || []).each do |m|
    app.class.send(:include, m)
  end
end

Protected Instance Methods

bind_after_build() click to toggle source
# File lib/middleman-core/extension.rb, line 153
def bind_after_build
  ext = self
  return unless ext.respond_to?(:after_build)

  @klass.after_build do |builder|
    if ext.method(:after_build).arity == 1
      ext.after_build(builder)
    else
      ext.after_build
    end
  end
end
bind_after_configuration() click to toggle source
# File lib/middleman-core/extension.rb, line 128
def bind_after_configuration
  ext = self
  @klass.after_configuration do
    ext.after_configuration if ext.respond_to?(:after_configuration)

    # rubocop:disable IfUnlessModifier
    if ext.respond_to?(:manipulate_resource_list)
      ext.app.sitemap.register_resource_list_manipulator(ext.class.extension_name, ext)
    end
  end
end
bind_before_build() click to toggle source
# File lib/middleman-core/extension.rb, line 140
def bind_before_build
  ext = self
  return unless ext.respond_to?(:before_build)

  @klass.before_build do |builder|
    if ext.method(:before_build).arity == 1
      ext.before_build(builder)
    else
      ext.before_build
    end
  end
end
bind_before_configuration() click to toggle source
# File lib/middleman-core/extension.rb, line 119
def bind_before_configuration
  ext = self
  return unless ext.respond_to?(:before_configuration)

  @klass.before_configuration do
    ext.before_configuration
  end
end
setup_app_reference_when_available() click to toggle source
# File lib/middleman-core/extension.rb, line 107
def setup_app_reference_when_available
  ext = self

  @klass.initialized do
    ext.app = self
  end

  @klass.instance_available do
    ext.app ||= self
  end
end
setup_options(options_hash) { |options| ... } click to toggle source
# File lib/middleman-core/extension.rb, line 96
def setup_options(options_hash)
  @options = self.class.config.dup
  @options.finalize!

  options_hash.each do |k, v|
    @options[k] = v
  end

  yield @options if block_given?
end