require 'bonsai' require 'liquid' require 'maruku' require 'json' module ExtraFilters def markdownify(input) Maruku.new(input).to_html end def sanitize(input) input.gsub(/[^a-zA-Z0-9_]/,"") end def json(input) input.to_json end def unique(input) @n = (@n || 0) + 1 input + @n.to_s end end Liquid::Template.register_filter(ExtraFilters) task :serve do begin Bonsai.log "Press Control+C to quit" require 'rack' require 'sinatra' require 'watch' require 'launchy' Bonsai.root_dir = Dir.pwd server = fork { app = Rack::Builder.app { use Bonsai::StaticPassThrough, :root => Bonsai.root_dir + "/output", :urls => ["/"] run Bonsai::DevelopmentServer } Rack::Handler.default.run(app, :Port => 5000) do Launchy.open("http://localhost:5000/") end } Watch.new("{content,templates,public}/**/*") { Bonsai::Exporter.process! } rescue Interrupt Process.kill("QUIT", server) Process.wait(server) exit end end task :build do Bonsai.root_dir = Dir.pwd Bonsai::Exporter.publish! end