Class: ZipTricks::BlockWrite
- Inherits:
-
Object
- Object
- ZipTricks::BlockWrite
- Defined in:
- lib/zip_tricks/block_write.rb
Overview
Stashes a block given by the Rack webserver when calling each() on a body, and calls that block every time it is written to using :<< (shovel). Poses as an IO for rubyzip.
Instance Method Summary collapse
-
#<<(buf) ⇒ Object
Every time this object gets written to, call the Rack body each() block with the bytes given instead.
-
#close ⇒ Object
Does nothing.
-
#initialize(&block) ⇒ BlockWrite
constructor
The block is the block given to each() of the Rack body, or other block you want to receive the string chunks written by the zip compressor.
Constructor Details
#initialize(&block) ⇒ BlockWrite
The block is the block given to each() of the Rack body, or other block you want to receive the string chunks written by the zip compressor.
9 10 11 |
# File 'lib/zip_tricks/block_write.rb', line 9 def initialize(&block) @block = block end |
Instance Method Details
#<<(buf) ⇒ Object
Every time this object gets written to, call the Rack body each() block with the bytes given instead.
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/zip_tricks/block_write.rb', line 22 def <<(buf) return if buf.nil? # Ensure we ALWAYS write in binary encoding. encoded = if buf.encoding != Encoding::BINARY # If we got a frozen string we can't force_encoding on it begin buf.force_encoding(Encoding::BINARY) rescue buf.dup.force_encoding(Encoding::BINARY) end else buf end # buf.dup.force_encoding(Encoding::BINARY) # Zero-size output has a special meaning when using chunked encoding return if encoded.bytesize.zero? @block.call(encoded) self end |
#close ⇒ Object
Does nothing
47 48 49 |
# File 'lib/zip_tricks/block_write.rb', line 47 def close nil end |