modulization

This commit is contained in:
Loic Nageleisen 2012-11-06 16:47:46 +01:00
parent 6bd9fef9af
commit 755bd3bc11

68
tee.rb
View file

@ -8,34 +8,44 @@ module Enumerable
end end
class IO class IO
def chunks(chunk_size=1024) module Chunkable
Enumerator.new { |y| y << read(chunk_size) until eof? } def chunks(chunk_size=1024)
end Enumerator.new { |y| y << read(chunk_size) until eof? }
end
def each_chunk(chunk_size=nil)
chunks.each { |*args| yield *args } def each_chunk(chunk_size=nil)
end chunks.each { |*args| yield *args }
def digest_with(digest, chunk_size=nil)
chunks(chunk_size).each { |chunk| digest << chunk }
digest
end
def sha256(chunk_size=nil)
digest_with Digest::SHA2.new(256), chunk_size
end
def tee(*procs)
ios = procs.map { |proc| FiberChunkedIO.new &proc }
chunks.each do |chunk|
ios.each do |io|
io.write chunk
end
end end
ios.each { |io| io.close }
ios.map { |io| io.result }
end end
module Digestable
def digest_with(digest, chunk_size=nil)
chunks(chunk_size).each { |chunk| digest << chunk }
digest
end
def sha256(chunk_size=nil)
digest_with Digest::SHA2.new(256), chunk_size
end
end
module Utils
def tee(*procs)
ios = procs.map { |proc| FiberChunkedIO.new &proc }
chunks.each do |chunk|
ios.each do |io|
io.write chunk
end
end
ios.each { |io| io.close }
ios.map { |io| io.result }
end
end
include Chunkable
include Digestable
include Utils
end end
class FiberChunkedIO class FiberChunkedIO
@ -83,11 +93,7 @@ class FiberChunkedIO
@chunks.shift @chunks.shift
end end
def chunks(chunk_size=1024) include IO::Chunkable
Enumerator.new do |y|
y << read(chunk_size) until eof?
end
end
end end
File.open("test") do |f| File.open("test") do |f|