Class: Clacky::Utils::LimitStack
- Inherits:
-
Object
- Object
- Clacky::Utils::LimitStack
- Defined in:
- lib/clacky/utils/limit_stack.rb
Overview
Auto-rolling fixed-size array Automatically discards oldest elements when size limit is exceeded
Instance Attribute Summary collapse
-
#items ⇒ Object
readonly
Returns the value of attribute items.
-
#max_size ⇒ Object
readonly
Returns the value of attribute max_size.
Instance Method Summary collapse
-
#clear ⇒ Object
Clear all elements.
-
#each(&block) ⇒ Object
Iterate over elements.
-
#empty? ⇒ Boolean
Check if empty.
-
#initialize(max_size: 5000) ⇒ LimitStack
constructor
A new instance of LimitStack.
-
#last(n = nil) ⇒ Object
Get last N elements.
-
#pop ⇒ Object
Remove and return the last element.
-
#push(*elements) ⇒ Object
(also: #<<)
Add elements (supports single or multiple).
-
#push_lines(text) ⇒ Object
Add multi-line text (split by lines and add).
-
#size ⇒ Object
Current size.
-
#to_a ⇒ Object
Get all elements.
-
#to_s ⇒ Object
Convert to string (for text content).
- #trim_if_needed ⇒ Object
Constructor Details
#initialize(max_size: 5000) ⇒ LimitStack
Returns a new instance of LimitStack.
10 11 12 13 |
# File 'lib/clacky/utils/limit_stack.rb', line 10 def initialize(max_size: 5000) @max_size = max_size @items = [] end |
Instance Attribute Details
#items ⇒ Object (readonly)
Returns the value of attribute items.
8 9 10 |
# File 'lib/clacky/utils/limit_stack.rb', line 8 def items @items end |
#max_size ⇒ Object (readonly)
Returns the value of attribute max_size.
8 9 10 |
# File 'lib/clacky/utils/limit_stack.rb', line 8 def max_size @max_size end |
Instance Method Details
#clear ⇒ Object
Clear all elements
65 66 67 68 |
# File 'lib/clacky/utils/limit_stack.rb', line 65 def clear @items.clear self end |
#each(&block) ⇒ Object
Iterate over elements
71 72 73 |
# File 'lib/clacky/utils/limit_stack.rb', line 71 def each(&block) @items.each(&block) end |
#empty? ⇒ Boolean
Check if empty
60 61 62 |
# File 'lib/clacky/utils/limit_stack.rb', line 60 def empty? @items.empty? end |
#last(n = nil) ⇒ Object
Get last N elements
40 41 42 |
# File 'lib/clacky/utils/limit_stack.rb', line 40 def last(n = nil) n ? @items.last(n) : @items.last end |
#pop ⇒ Object
Remove and return the last element
35 36 37 |
# File 'lib/clacky/utils/limit_stack.rb', line 35 def pop @items.pop end |
#push(*elements) ⇒ Object Also known as: <<
Add elements (supports single or multiple)
16 17 18 19 20 21 22 |
# File 'lib/clacky/utils/limit_stack.rb', line 16 def push(*elements) elements.each do |element| @items << element trim_if_needed end self end |
#push_lines(text) ⇒ Object
Add multi-line text (split by lines and add)
26 27 28 29 30 31 32 |
# File 'lib/clacky/utils/limit_stack.rb', line 26 def push_lines(text) return self if text.nil? || text.empty? lines = text.is_a?(Array) ? text : text.lines lines.each { |line| push(line) } self end |
#size ⇒ Object
Current size
55 56 57 |
# File 'lib/clacky/utils/limit_stack.rb', line 55 def size @items.size end |
#to_a ⇒ Object
Get all elements
45 46 47 |
# File 'lib/clacky/utils/limit_stack.rb', line 45 def to_a @items.dup end |
#to_s ⇒ Object
Convert to string (for text content)
50 51 52 |
# File 'lib/clacky/utils/limit_stack.rb', line 50 def to_s @items.join end |
#trim_if_needed ⇒ Object
76 77 78 79 80 81 |
# File 'lib/clacky/utils/limit_stack.rb', line 76 def trim_if_needed if @items.size > @max_size # Remove oldest elements, keep only the latest max_size items @items.shift(@items.size - @max_size) end end |