Module: BlobHelper

Defined in:
lib/deltacloud/helpers/blob_stream_helper.rb

Constant Summary collapse

DELTACLOUD_BLOBMETA_HEADER =
/HTTP[-_]X[-_]Deltacloud[-_]Blobmeta[-_]/i

Class Method Summary collapse

Class Method Details

.extract_blob_metadata_hash(env_hash) ⇒ Object



67
68
69
70
71
# File 'lib/deltacloud/helpers/blob_stream_helper.rb', line 67

def self.(env_hash)
  meta_array = env_hash.select{|k,v| k.match(/^HTTP[-_]X[-_]Deltacloud[-_]Blobmeta[-_]/i)}
   = meta_array.inject({}){ |result, array| result[array.first.upcase] = array.last; result}
  
end

.extract_segmented_blob_manifest(request) ⇒ Object

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



109
110
111
112
113
114
115
# File 'lib/deltacloud/helpers/blob_stream_helper.rb', line 109

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) ⇒ Object

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



76
77
78
# File 'lib/deltacloud/helpers/blob_stream_helper.rb', line 76

def self.(, rename_to)
  .gsub_keys(DELTACLOUD_BLOBMETA_HEADER, rename_to)
end

.segment_order(request_context) ⇒ Object



86
87
88
# File 'lib/deltacloud/helpers/blob_stream_helper.rb', line 86

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) ⇒ Object

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



81
82
83
84
# File 'lib/deltacloud/helpers/blob_stream_helper.rb', line 81

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) ⇒ Object



90
91
92
# File 'lib/deltacloud/helpers/blob_stream_helper.rb', line 90

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) ⇒ Object



94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/deltacloud/helpers/blob_stream_helper.rb', line 94

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