class CassetteRack::Engine

Public Class Methods

call(env) click to toggle source
# File lib/cassette-rack/engine.rb, line 14
def call(env)
  prototype.call(env)
end
prototype() click to toggle source
# File lib/cassette-rack/engine.rb, line 10
def prototype
  @prototype ||= new
end

Public Instance Methods

call(env) click to toggle source
# File lib/cassette-rack/engine.rb, line 5
def call(env)
  controller(env)
end

Private Instance Methods

controller(env) click to toggle source
# File lib/cassette-rack/engine.rb, line 20
def controller(env)
  request = Rack::Request.new(env)
  params = Hash[URI.decode_www_form(request.query_string)]
  body = Hash[URI.decode_www_form(request.body.read)]
  drawer = CassetteRack::Drawer.new(request.path_info)

  case body['_method']
  when 'delete'
    request_method = body['_method'].upcase
  else
    request_method = request.request_method
  end

  case request_method
  when 'DELETE'
    drawer.delete
  end

  case params['response']
  when 'preview'
    template = Liquid::Template.parse(CassetteRack::Configure.preview_template)
    body = template.render('body' => drawer.http.response.body)
  else
    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)

    template = Liquid::Template.parse(CassetteRack::Configure.application_template)
    body = template.render('cassettes_tag' => cassettes_tag, 'cassette_tag' => cassette_tag)
  end

  status = 200
  headers = {'Content-Type' => 'text/html'}
  [status, headers, [body]]
end
render_branch(node, script_name, path_info) click to toggle source
# File lib/cassette-rack/engine.rb, line 56
def render_branch(node, script_name, path_info)
  raw = "<ol #{node.level == 0 ? "id='tree'" : nil}><li>"
  raw += "<label class='branch' for='#{node.id}'>#{node.name}</label>"
  raw += "<input type='checkbox' id='#{node.id}' checked />\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 += "<ol>"
    raw += entries.map do |entry|
      raw = "<li class='leaf #{entry.id == path_info ? "active" : nil}'>"
      raw += "<a href=#{script_name}#{entry.id}>#{entry.name}</a></li>"
    end.join("\n")
    raw += "</ol>\n"
  end

  raw += "</li></ol>\n"
  raw
end
render_leaf(drawer, action) click to toggle source
# File lib/cassette-rack/engine.rb, line 83
def render_leaf(drawer, action)
  if drawer.exist?
    raw = drawer.render
    raw += "<div class='btn-group'>\n"
    raw += "<a class='btn btn-primary' href='#{action}?response=preview'>\n"
    raw += "<span>Preview</span></a>\n"
    raw += "<form method='post' action='#{action}'>\n"
    raw += "<input name='_method' value='delete' type='hidden' />\n"
    raw += "<input class='btn btn-danger' type='submit' value='Destroy'>\n"
    raw += "</form>\n"
    raw += "</div>\n"
  else
    raw = "<h3>Please select cassette</h3>"
  end

  raw
end