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 = "
  1. " raw += "" raw += "\n" entries = [] node.entries.each do |entry| if entry.leaf? entries << entry else raw += render_branch(entry, script_name, path_info) end end if entries.count > 0 raw += "
      " raw += entries.map do |entry| raw = "
    1. " raw += "#{entry.name}
    2. " end.join("\n") raw += "
    \n" end raw += "
\n" raw end def render_leaf(drawer, action) if drawer.exist? raw = drawer.render raw += "
\n" raw += "\n" raw += "\n" raw += "
\n" else raw = "

Please select cassette

" end raw end # end private end end