module Middleman::Extensions

def load(name)

def load(name)
  name = name.to_sym
  return nil unless registered.has_key?(name)
  extension = registered[name]
  if extension.is_a?(Proc)
    extension = extension.call() || nil
    registered[name] = extension
  end
  extension
end

def register(name, namespace=nil, version=nil, &block)

def register(name, namespace=nil, version=nil, &block)
  # If we've already got a matching extension that passed the 
  # version check, bail out.
  return if registered.has_key?(name.to_sym) && 
  !registered[name.to_sym].is_a?(String)
  if block_given?
    version = namespace
  end
  passed_version_check = true
  if !version.nil?
    requirement = ::Gem::Requirement.create(version)
    if !requirement.satisfied_by?(Middleman::GEM_VERSION)
      passed_version_check = false
    end
  end
  registered[name.to_sym] = if !passed_version_check
    "== #{name} failed version check. Requested #{version}, got #{Middleman::VERSION}"
  elsif block_given?
    block
  elsif namespace
    namespace
  end
end

def registered

def registered
  @_registered ||= {}
end