require 'rubygems' require File.join(File.dirname(__FILE__), 'ticket') require 'sinatra/base' require 'sinatra/options-route' require 'sinatra/response-header-helpers' module Rack module TicketOffice class Booth < Sinatra::Base register Sinatra::OptionsRoute helpers Sinatra::ResponseHeaderHelpers attr_writer :store, :counter def template(&block) @template = block end options_route "/?" do allow :post, :options halt end [:get, :put, :delete].each do |method| send(method, "/") do allow :post, :options halt 405 end end post "/" do halt 500 unless request.env['REMOTE_USER'] new_id = @counter.next ticket_initialiser = @template.call(new_id) ticket = @store.create(ticket_initialiser) ticket.key = new_id.to_s ticket.user = request.env['REMOTE_USER'] ticket.save "" end end end end