Class: Rox::Core::Analytics::MessageBatch

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Includes:
Defaults::MessageBatch, Logging
Defined in:
lib/rox/core/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.



15
16
17
18
19
# File 'lib/rox/core/analytics/message_batch.rb', line 15

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

Instance Method Details

#<<(message) ⇒ Object



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

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')
  else
    @messages << message
    @json_size += message_json_size + 1 # One byte for the comma
  end
end

#clearObject



41
42
43
44
# File 'lib/rox/core/analytics/message_batch.rb', line 41

def clear
  @messages.clear
  @json_size = 0
end

#full?Boolean

Returns:

  • (Boolean)


37
38
39
# File 'lib/rox/core/analytics/message_batch.rb', line 37

def full?
  item_count_exhausted? || size_exhausted?
end