class Middleman::MetaPages::Application

Metadata pages to be served in preview, in order to present information about the Middleman application and its configuration. Analogous to Firefox/Chrome's “about:” pages.

Built using a ghetto little Rack web framework cobbled together because I didn't want to depend on Sinatra or figure out how to host Middleman inside Middleman.

Public Class Methods

new(middleman) click to toggle source
# File lib/middleman-core/meta_pages.rb, line 15
def initialize(middleman)
  # Hold a reference to the middleman application
  @middleman = middleman

  meta_pages = self
  @rack_app = ::Rack::Builder.new do
    # Serve assets from metadata/assets
    use ::Rack::Static, urls: ['/assets'], root: File.join(File.dirname(__FILE__), 'meta_pages')

    map '/' do
      run meta_pages.method(:index)
    end

    map '/sitemap' do
      run meta_pages.method(:sitemap)
    end

    map '/config' do
      run meta_pages.method(:config)
    end
  end
end

Public Instance Methods

call(*args) click to toggle source
# File lib/middleman-core/meta_pages.rb, line 38
def call(*args)
  @rack_app.call(*args)
end
config(_) click to toggle source

Inspect configuration

# File lib/middleman-core/meta_pages.rb, line 61
def config(_)
  global_config = @middleman.config.all_settings.map { |c| ConfigSetting.new(c) }
  extension_config = {}
  auto_activated_config = {}

  @middleman.extensions.each do |ext_name, extension|
    if ::Middleman::Extensions.auto_activated.include? ext_name
      auto_activated_config[ext_name] = extension_options(extension)
      next
    end

    if extension.is_a?(Hash)
      # Multiple instance extension
      if extension.size == 1
        extension_config[ext_name] = extension_options(extension.values.first)
      else
        extension.each do |inst, ext|
          extension_config["#{ext_name} (#{inst})"] = extension_options(ext)
        end
      end
    else
      extension_config[ext_name] = extension_options(extension)
    end
  end

  template('config.html.erb',
           global_config: global_config,
           extension_config: extension_config,
           auto_activated_config: auto_activated_config,
           registered_extensions: Middleman::Extensions.registered.dup)
end
index(_) click to toggle source

The index page

# File lib/middleman-core/meta_pages.rb, line 43
def index(_)
  template('index.html.erb')
end
sitemap(_) click to toggle source

Inspect the sitemap

# File lib/middleman-core/meta_pages.rb, line 48
def sitemap(_)
  resources = @middleman.sitemap.resources(true)

  sitemap_tree = SitemapTree.new

  resources.each do |resource|
    sitemap_tree.add_resource resource
  end

  template('sitemap.html.erb', sitemap_tree: sitemap_tree)
end

Private Instance Methods

extension_options(extension) click to toggle source
# File lib/middleman-core/meta_pages.rb, line 107
def extension_options(extension)
  extension.options.all_settings.map { |c| ConfigSetting.new(c) }
end
response(content) click to toggle source

Respond to an HTML request

# File lib/middleman-core/meta_pages.rb, line 103
def response(content)
  [200, { 'Content-Type' => 'text/html' }, Array(content)]
end
template(template_name, locals={}) click to toggle source

Render a template with the given name and locals

# File lib/middleman-core/meta_pages.rb, line 96
def template(template_name, locals={})
  template_path = File.join(File.dirname(__FILE__), 'meta_pages', 'templates', template_name)
  content = Tilt.new(template_path).render(::Object.new, locals)
  response(content)
end