Class: Textbringer::Ring

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/textbringer/ring.rb

Instance Method Summary collapse

Constructor Details

#initialize(max = 30, on_delete: ->(x) {}) ⇒ Ring

Returns a new instance of Ring.



7
8
9
10
11
12
# File 'lib/textbringer/ring.rb', line 7

def initialize(max = 30, on_delete: ->(x) {})
  @max = max
  @ring = []
  @current = -1
  @on_delete = on_delete
end

Instance Method Details

#[](n = 0) ⇒ Object



50
51
52
# File 'lib/textbringer/ring.rb', line 50

def [](n = 0)
  @ring[get_index(n)]
end

#clearObject



14
15
16
17
# File 'lib/textbringer/ring.rb', line 14

def clear
  @ring.clear
  @current = -1
end

#currentObject



38
39
40
41
42
43
# File 'lib/textbringer/ring.rb', line 38

def current
  if @ring.empty?
    raise EditorError, "Ring is empty"
  end
  @ring[@current]
end

#each(&block) ⇒ Object



62
63
64
# File 'lib/textbringer/ring.rb', line 62

def each(&block)
  @ring.each(&block)
end

#empty?Boolean

Returns:

  • (Boolean)


54
55
56
# File 'lib/textbringer/ring.rb', line 54

def empty?
  @ring.empty?
end

#popObject



32
33
34
35
36
# File 'lib/textbringer/ring.rb', line 32

def pop
  x = @ring[@current]
  rotate(1)
  x
end

#push(obj) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/textbringer/ring.rb', line 19

def push(obj)
  @current += 1
  if @ring.size < @max
    @ring.insert(@current, obj)
  else
    if @current == @max
      @current = 0
    end
    @on_delete.call(@ring[@current])
    @ring[@current] = obj
  end
end

#rotate(n) ⇒ Object



45
46
47
48
# File 'lib/textbringer/ring.rb', line 45

def rotate(n)
  @current = get_index(n)
  @ring[@current]
end

#sizeObject



58
59
60
# File 'lib/textbringer/ring.rb', line 58

def size
  @ring.size
end

#to_aObject



66
67
68
# File 'lib/textbringer/ring.rb', line 66

def to_a
  @ring.to_a
end