Class: SplitIoClient::Cache::Adapters::MemoryAdapters::QueueAdapter

Inherits:
Object
  • Object
show all
Defined in:
lib/splitclient-rb/cache/adapters/memory_adapters/queue_adapter.rb

Overview

Memory adapter implementation, which stores everything inside queue

Instance Method Summary collapse

Constructor Details

#initialize(max_size) ⇒ QueueAdapter

Returns a new instance of QueueAdapter.



7
8
9
10
11
# File 'lib/splitclient-rb/cache/adapters/memory_adapters/queue_adapter.rb', line 7

def initialize(max_size)
  @max_size = max_size
  @queue = Queue.new
  @current_size = Concurrent::AtomicFixnum.new(0)
end

Instance Method Details

#add_to_queue(data) ⇒ Object

Adds data to queue in non-blocking mode



19
20
21
22
23
24
25
# File 'lib/splitclient-rb/cache/adapters/memory_adapters/queue_adapter.rb', line 19

def add_to_queue(data)
  fail ThreadError if @current_size.value >= @max_size

  @queue.push(data)

  @current_size.increment
end

#clearObject



13
14
15
16
# File 'lib/splitclient-rb/cache/adapters/memory_adapters/queue_adapter.rb', line 13

def clear(_ = nil)
  @queue = Queue.new
  @current_size.value = 0
end

#empty?Boolean

Returns:

  • (Boolean)


46
47
48
# File 'lib/splitclient-rb/cache/adapters/memory_adapters/queue_adapter.rb', line 46

def empty?
  @queue.empty?
end

#get_batch(size) ⇒ Object



31
32
33
34
35
36
37
38
39
40
# File 'lib/splitclient-rb/cache/adapters/memory_adapters/queue_adapter.rb', line 31

def get_batch(size)
  items = []
  size.times do
    items << @queue.pop(true)
    @current_size.decrement
  end
  items
  rescue ThreadError
  items
end

#lengthObject



42
43
44
# File 'lib/splitclient-rb/cache/adapters/memory_adapters/queue_adapter.rb', line 42

def length
  @current_size.value
end