Class: Gitlab::Json::LimitedEncoder

Inherits:
Object
  • Object
show all
Defined in:
lib/gitlab/json.rb

Constant Summary collapse

LimitExceeded =
Class.new(StandardError)

Class Method Summary collapse

Class Method Details

.encode(object, limit: 25.megabytes) ⇒ String

Generates JSON for an object or raise an error if the resulting json string is too big

Parameters:

  • object (Hash, Array, Object)

    must be hash, array, or an object that responds to .to_h or .to_json

  • limit (Integer) (defaults to: 25.megabytes)

    max size of the resulting json string

Returns:

  • (String)

Raises:

  • (LimitExceeded)

    if the resulting json string is bigger than the specified limit



243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
# File 'lib/gitlab/json.rb', line 243

def self.encode(object, limit: 25.megabytes)
  buffer = StringIO.new
  buffer_size = 0

  ::Yajl::Encoder.encode(object) do |data_chunk|
    chunk_size = data_chunk.bytesize

    raise LimitExceeded if buffer_size + chunk_size > limit

    buffer << data_chunk
    buffer_size += chunk_size
  end

  buffer.string
end