travis-api/vendor/travis-core/lib/travis/chunkifier.rb
2016-06-14 15:17:20 +02:00

60 lines
1.1 KiB
Ruby

require 'coder/cleaner/simple/encodings'
module Travis
class Chunkifier < Struct.new(:content, :chunk_size, :options)
include Enumerable
include Coder::Cleaner::Simple::Encodings::UTF_8
def initialize(*)
super
self.options ||= {}
end
def json?
options[:json]
end
def length
parts.length
end
def each(&block)
parts.each(&block)
end
def parts
@parts ||= split
end
def split
parts = content.scan(/.{1,#{chunk_split_size}}/m)
chunks = []
current_chunk = ''
parts.each do |part|
if too_big?(current_chunk + part)
chunks << current_chunk
current_chunk = part
else
current_chunk << part
end
end
chunks << current_chunk if current_chunk.length > 0
chunks
end
def chunk_split_size
size = chunk_size / 10
size == 0 ? 1 : size
end
def too_big?(current_chunk)
current_chunk = current_chunk.to_json if json?
current_chunk.bytesize > chunk_size
end
end
end