lib/shuck/server.rb in shuck-0.0.3 vs lib/shuck/server.rb in shuck-0.0.4

- old
+ new

@@ -2,28 +2,41 @@ require 'shuck/file_store' require 'shuck/xml_adapter' module Shuck class Servlet < WEBrick::HTTPServlet::AbstractServlet - def initialize(server,store) + def initialize(server,store,hostname) super(server) @store = store + @hostname = hostname end def do_GET(request, response) path = request.path path_len = path.size + host = request["HOST"] + path_style_request = true + bucket = nil + if host != @hostname + bucket = host.split(".")[0] + path_style_request = false + end - if path == "/" + if path == "/" and path_style_request response.status = 200 response['Content-Type'] = 'text/xml' buckets = @store.buckets response.body = XmlAdapter.buckets(buckets) else - elems = path[1,path_len].split("/") - bucket = elems[0] - if elems.size == 1 + if path_style_request + elems = path[1,path_len].split("/") + bucket = elems[0] + else + elems = path.split("/") + end + + if elems.size == 1 bucket_obj = @store.get_bucket(bucket) if bucket_obj response.status = 200 response.body = XmlAdapter.bucket(bucket_obj) response['Content-Type'] = "application/xml" @@ -49,21 +62,43 @@ end def do_PUT(request,response) path = request.path path_len = path.size + path_style_request = true + host = request["Host"] + bucket = nil + path_style_request = true + if host != @hostname + bucket = host.split(".")[0] + path_style_request = false + end + if path == "/" - puts "Unsure what to do" - else - elems = path[1,path_len].split("/") - bucket = elems[0] - if elems.size == 1 + if bucket @store.create_bucket(bucket) - else - object = elems[1,elems.size].join('/') - @store.store_object(bucket,object,request) + else + puts "Unsure what to do" end + else + if path_style_request + elems = path[1,path_len].split("/") + bucket = elems[0] + else + elems = path.split("/") + end + + if path_style_request + if elems.size == 1 + @store.create_bucket(bucket) + else + object = elems[1,elems.size].join('/') + @store.store_object(bucket,object,request) + end + else + @store.store_object(bucket,path,request) + end end response.status = 200 response.body = "" response['Content-Type'] = "text/xml" end @@ -78,17 +113,18 @@ p request end end class Server - def initialize(port,store) + def initialize(port,store,hostname = "localhost") @port = port @store = store + @hostname = hostname end def serve @server = WEBrick::HTTPServer.new(:Port => @port) - @server.mount "/", Servlet, @store + @server.mount "/", Servlet, @store,@hostname trap "INT" do @server.shutdown end @server.start end def shutdown