Class: Textbringer::Ring

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

Instance Method Summary collapse

Constructor Details

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

Returns a new instance of Ring.

Parameters:

  • (Integer)
  • on_delete: (Proc) (defaults to: ->(x) {})


5
6
7
8
9
10
# File 'lib/textbringer/ring.rb', line 5

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

Instance Method Details

#[](n = 0) ⇒ Textbringer::Mark

Parameters:

  • (Integer)

Returns:



48
49
50
# File 'lib/textbringer/ring.rb', line 48

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

#clearInteger

Returns:

  • (Integer)


12
13
14
15
# File 'lib/textbringer/ring.rb', line 12

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

#currentString #currentTextbringer::Mark #currentArray[untyped] #currentnil

Overloads:

  • #currentString

    Returns:

    • (String)
  • #currentTextbringer::Mark

    Returns:

  • #currentArray[untyped]

    Returns:

    • (Array[untyped])
  • #currentnil

    Returns:

    • (nil)


36
37
38
39
40
41
# File 'lib/textbringer/ring.rb', line 36

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

#each(&block) ⇒ Array[untyped]

Returns:

  • (Array[untyped])


60
61
62
# File 'lib/textbringer/ring.rb', line 60

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

#empty?Boolean

Returns:

  • (Boolean)


52
53
54
# File 'lib/textbringer/ring.rb', line 52

def empty?
  @ring.empty?
end

#get_index(arg0) ⇒ Integer #get_index(arg0) ⇒ nil

Overloads:

  • #get_index(arg0) ⇒ Integer

    Parameters:

    • arg0 (Integer)

    Returns:

    • (Integer)
  • #get_index(arg0) ⇒ nil

    Parameters:

    • arg0 (Integer)

    Returns:

    • (nil)


70
71
72
73
74
75
76
77
78
79
80
# File 'lib/textbringer/ring.rb', line 70

def get_index(n)
  if @ring.empty?
    raise EditorError, "Ring is empty"
  end
  i = @current - n
  if 0 <= i && i < @ring.size
    i
  else
    i % @ring.size
  end
end

#popTextbringer::Mark #popString

Overloads:



30
31
32
33
34
# File 'lib/textbringer/ring.rb', line 30

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

#push(arg0) ⇒ Array[untyped] #push(arg0) ⇒ Array[untyped] #push(arg0) ⇒ Array[untyped] #push(arg0) ⇒ String

Overloads:

  • #push(arg0) ⇒ Array[untyped]

    Parameters:

    Returns:

    • (Array[untyped])
  • #push(arg0) ⇒ Array[untyped]

    Parameters:

    • arg0 (String)

    Returns:

    • (Array[untyped])
  • #push(arg0) ⇒ Array[untyped]

    Parameters:

    • arg0 (Array[untyped])

    Returns:

    • (Array[untyped])
  • #push(arg0) ⇒ String

    Parameters:

    • arg0 (String)

    Returns:

    • (String)


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

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(arg0) ⇒ String #rotate(arg0) ⇒ Textbringer::Mark #rotate(arg0) ⇒ Array[untyped] #rotate(arg0) ⇒ nil

Overloads:

  • #rotate(arg0) ⇒ String

    Parameters:

    • arg0 (Integer)

    Returns:

    • (String)
  • #rotate(arg0) ⇒ Textbringer::Mark

    Parameters:

    • arg0 (Integer)

    Returns:

  • #rotate(arg0) ⇒ Array[untyped]

    Parameters:

    • arg0 (Integer)

    Returns:

    • (Array[untyped])
  • #rotate(arg0) ⇒ nil

    Parameters:

    • arg0 (Integer)

    Returns:

    • (nil)


43
44
45
46
# File 'lib/textbringer/ring.rb', line 43

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

#sizeInteger

Returns:

  • (Integer)


56
57
58
# File 'lib/textbringer/ring.rb', line 56

def size
  @ring.size
end

#to_aArray[untyped]

Returns:

  • (Array[untyped])


64
65
66
# File 'lib/textbringer/ring.rb', line 64

def to_a
  @ring.to_a
end