class RedisBatchPush::Processor

Public Class Methods

new(block, max_size=nil, max_interval_sec=nil) click to toggle source
# File lib/redis_batch_push/processor.rb, line 4
def initialize block, max_size=nil, max_interval_sec=nil
  @max_size = max_size
  @max_interval_sec = max_interval_sec
  validate!
  @block = block

  initialize_buffer
end

Public Instance Methods

initialize_buffer() click to toggle source
# File lib/redis_batch_push/processor.rb, line 13
def initialize_buffer
  @buffer = []
  @buffer_start_time = Time.now
end
must_send() click to toggle source
# File lib/redis_batch_push/processor.rb, line 28
def must_send
  by_buffer_size = @max_size && @buffer.size >= @max_size
  by_interval_passed = @max_interval_sec && process_current_time - @buffer_start_time >= @max_interval_sec

  by_buffer_size || by_interval_passed
end
process(item) click to toggle source
# File lib/redis_batch_push/processor.rb, line 42
def process item
  @buffer << item
  tick
end
process_current_time() click to toggle source
# File lib/redis_batch_push/processor.rb, line 24
def process_current_time
  Time.now
end
tick() click to toggle source
# File lib/redis_batch_push/processor.rb, line 35
def tick
  if must_send && @buffer.size > 0
    @block.call(@buffer)
    initialize_buffer
  end
end
validate!() click to toggle source
# File lib/redis_batch_push/processor.rb, line 18
def validate!
  if @max_size.nil? && @max_interval_sec.nil?
    raise "You must inform max_size or max_interval_sec"
  end
end