require 'rack' module CassetteRack class Engine def call(env) controller(env) end class << self def prototype @prototype ||= new end def call(env) prototype.call(env) end end private def controller(env) request = Rack::Request.new(env) drawer = CassetteRack::Drawer.new(request.path_info) case request.request_method when 'DELETE' drawer.delete end tree = CassetteRack::Tree.create(CassetteRack::Configure.source_path) cassettes_tag = render_branch(tree, request.script_name, request.path_info) cassette_tag = render_leaf(drawer, request.script_name + request.path_info) status = 200 headers = {'Content-Type' => 'text/html'} template = Liquid::Template.parse(CassetteRack::Configure.application_template) body = template.render('cassettes_tag' => cassettes_tag, 'cassette_tag' => cassette_tag) [status, headers, [body]] end def render_branch(node, script_name, path_info) raw = "