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
permalink .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) = env_hash.select{|k,v| k.match(/^HTTP[-_]X[-_]Deltacloud[-_]Blobmeta[-_]/i)} = .inject({}){ |result, array| result[array.first.upcase] = array.last; result} end |
permalink .extract_segmented_blob_manifest(request) ⇒ Object
in “1=abc , 2=def , 3=ghi” out “2”=>“def”, “3”=>“ghi”
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 |
permalink .rename_metadata_headers(metadata, rename_to) ⇒ Object
e.g. from HTTP-X-Deltacloud-Blobmeta-FOO:BAR to amz-meta-FOO:BAR
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 |
permalink .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 |
permalink .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)
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 |
permalink .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 |
permalink .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 |