Class: Chef::Knife::Core::CookbookSiteStreamingUploader::MultipartStream
- Inherits:
-
Object
- Object
- Chef::Knife::Core::CookbookSiteStreamingUploader::MultipartStream
- Defined in:
- lib/chef/knife/core/cookbook_site_streaming_uploader.rb
Instance Method Summary collapse
-
#initialize(parts) ⇒ MultipartStream
constructor
A new instance of MultipartStream.
- #read(how_much, dst_buf = nil) ⇒ Object
- #size ⇒ Object
Constructor Details
#initialize(parts) ⇒ MultipartStream
Returns a new instance of MultipartStream.
203 204 205 206 207 |
# File 'lib/chef/knife/core/cookbook_site_streaming_uploader.rb', line 203 def initialize(parts) @parts = parts @part_no = 0 @part_offset = 0 end |
Instance Method Details
#read(how_much, dst_buf = nil) ⇒ Object
213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 |
# File 'lib/chef/knife/core/cookbook_site_streaming_uploader.rb', line 213 def read(how_much, dst_buf = nil) if @part_no >= @parts.size dst_buf.replace("") if dst_buf return dst_buf end how_much_current_part = @parts[@part_no].size - @part_offset how_much_current_part = [how_much_current_part, how_much].min how_much_next_part = how_much - how_much_current_part current_part = @parts[@part_no].read(@part_offset, how_much_current_part) # recurse into the next part if the current one was not large enough if how_much_next_part > 0 @part_no += 1 @part_offset = 0 next_part = read(how_much_next_part) result = current_part + (next_part || "") else @part_offset += how_much_current_part result = current_part end dst_buf ? dst_buf.replace(result || "") : result end |
#size ⇒ Object
209 210 211 |
# File 'lib/chef/knife/core/cookbook_site_streaming_uploader.rb', line 209 def size @parts.inject(0) { |size, part| size + part.size } end |