class Middleman::MetaPages::Application
on Sinatra or figure out how to host Middleman inside Middleman.
Built using a ghetto little Rack web framework cobbled together because I didn’t want to depend
application and its configuration. Analogous to Firefox/Chrome’s “about:” pages.
Metadata pages to be served in preview, in order to present information about the Middleman
def call(*args)
def call(*args) @rack_app.call(*args) end
def config(env)
def config(env) global_config = @middleman.inst.config.all_settings.map {|c| ConfigSetting.new(c) } extension_config = Hash[@middleman.inst.extensions.map do |ext_name, extension| opts = if extension.is_a?(::Middleman::Extension) extension.options.all_settings.map {|c| ConfigSetting.new(c) } else nil end [ext_name, opts] end] template('config.html.erb', :global_config => global_config, :extension_config => extension_config, :registered_extensions => Middleman::Extensions.registered.dup) end
def index(env)
def index(env) template('index.html.erb') end
def initialize(middleman)
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
def response(content)
def response(content) [ 200, {"Content-Type" => "text/html"}, Array(content) ] end
def sitemap(env)
def sitemap(env) resources = @middleman.inst.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
def template(template_name, locals={})
def template(template_name, locals={}) template_path = File.join(File.dirname(__FILE__), 'meta_pages', 'templates', template_name) content = Tilt.new(template_path).render(nil, locals) response(content) end