Class: ZipKit::BlockWrite
- Inherits:
-
Object
- Object
- ZipKit::BlockWrite
- Includes:
- WriteShovel
- Defined in:
- lib/zip_kit/block_write.rb
Overview
Acts as a converter between callers which send data to the #<<
method (such as all the ZipKit
writer methods, which push onto anything), and a given block. Every time #<<
gets called on the BlockWrite,
the block given to the constructor will be called with the same argument. ZipKit uses this object
when integrating with Rack and in the OutputEnumerator. Normally you wouldn't need to use it manually but
you always can. BlockWrite will also ensure the binary string encoding is forced onto any string
that passes through it.
For example, you can create a Rack response body like so:
class MyRackResponse
def each
writer = ZipKit::BlockWrite.new {|chunk| yield(chunk) }
writer << "Hello" << "world" << "!"
end
end
[200, {}, MyRackResponse.new]
Instance Method Summary collapse
-
#<<(buf) ⇒ ZipKit::BlockWrite
Sends a string through to the block stored in the BlockWrite.
-
#initialize(&block) {|bytes| ... } ⇒ BlockWrite
constructor
Creates a new BlockWrite.
Methods included from WriteShovel
Constructor Details
#initialize(&block) {|bytes| ... } ⇒ BlockWrite
Creates a new BlockWrite.
26 27 28 |
# File 'lib/zip_kit/block_write.rb', line 26 def initialize(&block) @block = block end |
Instance Method Details
#<<(buf) ⇒ ZipKit::BlockWrite
Sends a string through to the block stored in the BlockWrite.
43 44 45 46 47 48 49 |
# File 'lib/zip_kit/block_write.rb', line 43 def <<(buf) # Zero-size output has a special meaning when using chunked encoding return if buf.nil? || buf.bytesize.zero? @block.call(buf.b) self end |