module BlobHelper

Constants

DELTACLOUD_BLOBMETA_HEADER

Public Class Methods

extract_blob_metadata_hash(env_hash) click to toggle source
# File lib/deltacloud/helpers/blob_stream_helper.rb, line 65
def self.extract_blob_metadata_hash(env_hash)
  meta_array = env_hash.select{|k,v| k.match(/^HTTP[-_]X[-_]Deltacloud[-_]Blobmeta[-_]/)}
  metadata = meta_array.inject({}){ |result, array| result[array.first.upcase] = array.last; result}
  metadata
end
extract_segmented_blob_manifest(request) click to toggle source

in “1=abc , 2=def , 3=ghi” out {“1”=>“abc”, “2”=>“def”, “3”=>“ghi”}

# File lib/deltacloud/helpers/blob_stream_helper.rb, line 107
def self.extract_segmented_blob_manifest(request)
  manifest_hash = request.body.read.split(",").inject({}) do |res,current|
    k,v=current.strip.split("=")
    res[k]=v
    res
  end
end
rename_metadata_headers(metadata, rename_to) click to toggle source

e.g. from HTTP-X-Deltacloud-Blobmeta-FOO:BAR to amz-meta-FOO:BAR

# File lib/deltacloud/helpers/blob_stream_helper.rb, line 74
def self.rename_metadata_headers(metadata, rename_to)
  metadata.gsub_keys(DELTACLOUD_BLOBMETA_HEADER, rename_to)
end
segment_order(request_context) click to toggle source
# File lib/deltacloud/helpers/blob_stream_helper.rb, line 84
def self.segment_order(request_context)
  (request_context.env["HTTP_X_DELTACLOUD_SEGMENTORDER"] || request_context.env["QUERY_STRING"].match(/segment_order=(\w)*/){|m| m[0].split("=").pop})
end
segmented_blob(request_context) click to toggle source

in the following segment* methods, using context.env rather than context.params so it works for both Thin and Sinatra request objects (streaming)

# File lib/deltacloud/helpers/blob_stream_helper.rb, line 79
def self.segmented_blob(request_context)
  return true if (request_context.env["HTTP_X_DELTACLOUD_BLOBTYPE"] == 'segmented' || request_context.env["QUERY_STRING"].match(/blob_type=segmented/))
  false
end
segmented_blob_id(request_context) click to toggle source
# File lib/deltacloud/helpers/blob_stream_helper.rb, line 88
def self.segmented_blob_id(request_context)
  (request_context.env["HTTP_X_DELTACLOUD_SEGMENTEDBLOB"] || request_context.env["QUERY_STRING"].match(/segmented_blob=(\w)*/){|m| m[0].split("=").pop})
end
segmented_blob_op_type(request_context) click to toggle source
# File lib/deltacloud/helpers/blob_stream_helper.rb, line 92
def self.segmented_blob_op_type(request_context)
  is_segmented = segmented_blob(request_context)
  blob_id = segmented_blob_id(request_context)
  segment_order = segment_order(request_context)
  #if blob_type=segmented AND segmented_blob_id AND segment_order then it is a "SEGMENT"
  #if blob_type=segmented AND segmented_blob_id then it is a "FINALIZE"
  #if blob_type=segmented then it is "INIT"
  return "segment" if (is_segmented && blob_id && segment_order)
  return "finalize" if (is_segmented && blob_id)
  return "init" if is_segmented
  nil # should explode something instead
end