blob: a3dfda054e664326a5fcba64c546b32c80dbc959 [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership. The
# ASF licenses this file to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance with the
# License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
module ClientBucketMethods
def create_bucket(params)
obj = nil
request(:post, "#{api_uri.to_s}/buckets", {:name => params['id'],:location=>params['bucket_location'] }) do |response|
handle_backend_error(response) if response.code!=201
obj = base_object(:bucket, response)
end
end
def destroy_bucket(params)
#actually response here is 204 - no content - so nothing returned to client?
request(:delete, "#{api_uri.to_s}/buckets/#{params['id']}") do |response|
handle_backend_error(response) if response.code!=204
nil if response.code == 204
end
end
def create_blob(params)
blob = nil
resource = RestClient::Resource.new("#{api_uri.to_s}/buckets/#{params['bucket']}", :open_timeout => 10, :timeout => 45)
headers = default_headers.merge(extended_headers)
unless params['metadata'].nil?
metadata_headers = {}
params['metadata'].each do |k,v|
metadata_headers["X-Deltacloud-Blobmeta-#{k}"] = v
end
headers = headers.merge(metadata_headers)
end
resource.send(:post, {:blob_data => File.new(params['file_path'], 'rb'), :blob_id => params[:id]}, headers) do |response, request, block|
handle_backend_error(response) if response.code.eql?(500)
blob = base_object(:blob, response)
yield blob if block_given?
end
return blob
end
def destroy_blob(params)
request(:delete, "#{api_uri.to_s}/buckets/#{params['bucket']}/#{params[:id]}") do |response|
handle_backend_error(response) if response.code!=204
nil if response.code == 204
end
end
#RestClient doesn't do streaming 'get' yet - we already opened a pull request on this see
#https://github.com/archiloque/rest-client/issues/closed#issue/62 - apparently its going to
#be in the next version - unknown when. For now get full response. FIXME
def blob_data(params)
request(:get, "#{api_uri.to_s}/buckets/#{params['bucket']}/#{params[:id]}/content") do |response|
response
end
end
end