Method: FakeS3::Servlet#do_PUT

Defined in:
lib/fakes3/server.rb

#do_PUT(request, response) ⇒ Object



177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
# File 'lib/fakes3/server.rb', line 177

def do_PUT(request, response)
  s_req = normalize_request(request)
  query = CGI::parse(request.request_uri.query || "")

  return do_multipartPUT(request, response) if query['uploadId'].first

  response.status = 200
  response.body = ""
  response['Content-Type'] = "text/xml"
  response['Access-Control-Allow-Origin'] = '*'

  case s_req.type
  when Request::COPY
    object = @store.copy_object(s_req.src_bucket, s_req.src_object, s_req.bucket, s_req.object, request)
    response.body = XmlAdapter.copy_object_result(object)
  when Request::STORE
    bucket_obj = @store.get_bucket(s_req.bucket)
    if !bucket_obj
      # Lazily create a bucket.  TODO fix this to return the proper error
      bucket_obj = @store.create_bucket(s_req.bucket)
    end

    real_obj = @store.store_object(bucket_obj, s_req.object, s_req.webrick_request)
    response.header['ETag'] = "\"#{real_obj.md5}\""
  when Request::CREATE_BUCKET
    @store.create_bucket(s_req.bucket)
  end
end