#!/usr/bin/env ruby # Require app require 'rubygems' require 'templater' require File.join(File.dirname(__FILE__), '..', 'lib', 'middleman') require File.join(File.dirname(__FILE__), '..', 'vendor', 'rack-test', 'lib', 'rack', 'test') module Generators extend Templater::Manifold desc "Build a staticmatic site" class Builder < Templater::Generator # Define source and desintation def self.source_root; Dir.pwd; end def destination_root; File.join(Dir.pwd, 'build'); end # Override template to ask staticmatic for the correct extension to output def self.template(name, *args, &block) return if args.first.include?('layout') return if File.basename(args.first)[0,1] == '_' if (args[0] === args[1]) newext = case File.extname(args.first) when '.haml', '.erb', '.mab', '.maruku' '.html' when '.sass' '.css' else File.extname(args.first) end args[1] = args[0].gsub(File.extname(args.first), newext).gsub('views/', '') end super(name, *args, &block) end def self.file(name, *args, &block) puts args.inspect args[1] = args[0].gsub('views/', '') if (args[0] === args[1]) super(name, *args, &block) end public_files_glob = File.join(source_root, "public", '**/*') Dir[public_files_glob].each do |action| next if File.directory?(action) action = action.sub("#{source_root}/", '') file(action.downcase.gsub(/[^a-z0-9]+/, '_').to_sym, action, action.gsub('public/', '')) end glob! "views", %w(haml sass erb builder mab maruku) end add :build, Builder end Middleman.set :root, Dir.pwd # Monkey-patch to use a dynamic renderer class Templater::Actions::Template def render request_path = destination.gsub(File.join(Dir.pwd, 'build'), "") browser = Rack::Test::Session.new(Rack::MockSession.new(Middleman)) browser.get(request_path) browser.last_response.body end end Generators.run_cli(Dir.pwd, 'mm-build', 1, %w(build --force).concat(ARGV))