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

[View source]

65
66
67
68
69
# File 'lib/deltacloud/helpers/blob_stream_helper.rb', line 65

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”

[View source]

107
108
109
110
111
112
113
# 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) ⇒ Object

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

[View source]

74
75
76
# File 'lib/deltacloud/helpers/blob_stream_helper.rb', line 74

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

.segment_order(request_context) ⇒ Object

[View source]

84
85
86
# 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) ⇒ Object

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

[View source]

79
80
81
82
# 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) ⇒ Object

[View source]

88
89
90
# 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) ⇒ Object

[View source]

92
93
94
95
96
97
98
99
100
101
102
103
# 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