Sha256: cd99340d33e7b22a4aca29bd09541a490225dffdacff02b8d2823c988cdb3b8a
Contents?: true
Size: 1.52 KB
Versions: 15
Compression:
Stored size: 1.52 KB
Contents
# frozen_string_literal: true # Released under the MIT License. # Copyright, 2019-2023, by Samuel Williams. # Copyright, 2020, by Bryan Powell. require_relative 'readable' module Protocol module HTTP module Body # A body which buffers all it's contents. class Buffered < Readable # Wraps an array into a buffered body. # @return [Readable, nil] the wrapped body or nil if nil was given. def self.wrap(body) if body.is_a?(Readable) return body elsif body.is_a?(Array) return self.new(body) elsif body.is_a?(String) return self.new([body]) elsif body return self.for(body) end end def self.for(body) chunks = [] body.each do |chunk| chunks << chunk end self.new(chunks) end def initialize(chunks = [], length = nil) @chunks = chunks @length = length @index = 0 end attr :chunks def finish self end def length @length ||= @chunks.inject(0) {|sum, chunk| sum + chunk.bytesize} end def empty? @index >= @chunks.length end # A buffered response is always ready. def ready? true end def read if chunk = @chunks[@index] @index += 1 return chunk.dup end end def write(chunk) @chunks << chunk end def rewind @index = 0 end def inspect "\#<#{self.class} #{@chunks.size} chunks, #{self.length} bytes>" end end end end end
Version data entries
15 entries across 15 versions & 1 rubygems