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
- .extract_blob_metadata_hash(env_hash) ⇒ Object
-
.extract_segmented_blob_manifest(request) ⇒ Object
in “1=abc , 2=def , 3=ghi” out “2”=>“def”, “3”=>“ghi”.
-
.rename_metadata_headers(metadata, rename_to) ⇒ Object
e.g.
- .segment_order(request_context) ⇒ Object
-
.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).
- .segmented_blob_id(request_context) ⇒ Object
- .segmented_blob_op_type(request_context) ⇒ Object
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) = env_hash.select{|k,v| k.match(/^HTTP[-_]X[-_]Deltacloud[-_]Blobmeta[-_]/i)} = .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 |