Sha256: 198de79433dbf95de9a2f0c63755ef1b210c8790058dcd447761a127fc5355bb
Contents?: true
Size: 861 Bytes
Versions: 2
Compression:
Stored size: 861 Bytes
Contents
class FormatParser::ReadLimiter NO_LIMIT = nil class BudgetExceeded < StandardError end def initialize(io, max_bytes: NO_LIMIT, max_reads: NO_LIMIT, max_seeks: NO_LIMIT) @max_bytes = max_bytes @max_reads = max_reads @max_seeks = max_seeks @io = io @seeks = 0 @reads = 0 @bytes = 0 end def seek(to_offset) @seeks += 1 if @max_seeks && @seeks > @max_seeks raise BudgetExceeded, "Seek budget exceeded (%d seeks performed)" % @max_seeks end @io.seek(to_offset) end def read(n) @bytes += n @reads += 1 if @max_bytes && @bytes > @max_bytes raise BudgetExceeded, "Read bytes budget (%d) exceeded" % @max_bytes end if @max_reads && @reads > @max_reads raise BudgetExceeded, "Number of read() calls exceeded (%d max)" % @max_reads end @io.read(n) end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
format_parser-0.1.1 | lib/read_limiter.rb |
format_parser-0.1.0 | lib/read_limiter.rb |