Class: Segment::Analytics::MessageBatch

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Includes:
Defaults::MessageBatch, Logging
Defined in:
lib/segment/analytics/message_batch.rb

Overview

A batch of ‘Message`s to be sent to the API

Defined Under Namespace

Classes: JSONGenerationError

Constant Summary

Constants included from Defaults::MessageBatch

Defaults::MessageBatch::MAX_BYTES, Defaults::MessageBatch::MAX_SIZE

Instance Method Summary collapse

Methods included from Logging

included, #logger

Constructor Details

#initialize(max_message_count) ⇒ MessageBatch

Returns a new instance of MessageBatch.



16
17
18
19
20
# File 'lib/segment/analytics/message_batch.rb', line 16

def initialize(max_message_count)
  @messages = []
  @max_message_count = max_message_count
  @json_size = 0
end

Instance Method Details

#<<(message) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/segment/analytics/message_batch.rb', line 22

def <<(message)
  begin
    message_json = message.to_json
  rescue StandardError => e
    raise JSONGenerationError, "Serialization error: #{e}"
  end

  message_json_size = message_json.bytesize
  if message_too_big?(message_json_size)
    logger.error('a message exceeded the maximum allowed size')
    raise JSONGenerationError, 'Message Exceeded Maximum Allowed Size'
  else
    @messages << message
    @json_size += message_json_size + 1 # One byte for the comma
  end
end

#clearObject



43
44
45
46
# File 'lib/segment/analytics/message_batch.rb', line 43

def clear
  @messages.clear
  @json_size = 0
end

#full?Boolean

Returns:

  • (Boolean)


39
40
41
# File 'lib/segment/analytics/message_batch.rb', line 39

def full?
  item_count_exhausted? || size_exhausted?
end