philiprehberger-ring_buffer 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +17 -0
- data/lib/philiprehberger/ring_buffer/version.rb +1 -1
- data/lib/philiprehberger/ring_buffer.rb +17 -0
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7c4971ce57872af1d067144dcc2f47be6361c2223b33f3d3fe64e52be9a5b436
|
|
4
|
+
data.tar.gz: da55e74cbcb7de740c01f7867f4667de5e605f64cb3d2c87e36dd7ab5cfe80ac
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c1d3172843fb04b1c5a1119899b1977cfaf1e4d8f04d5035615a05813cc364377f86b05dd2206e845582e23fa4eee273adfa7bd6f34a5b1f9fd4ebfdff531d91
|
|
7
|
+
data.tar.gz: c644de2e1a605a9675b318aae413e5de527ed08e51d2987ffd936bde5de97391ac8c005b60402799f605e01ff93f1281336a1659f3caf11d21f00628c6bbc7ff
|
data/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,11 @@ and this gem adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.8.0] - 2026-04-28
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- `RingBuffer#each_chunk(size)` — yield successive non-overlapping chunks of `size` elements (oldest first). Returns an Enumerator without a block. Raises `Error` for non-positive sizes.
|
|
14
|
+
|
|
10
15
|
## [0.7.0] - 2026-04-21
|
|
11
16
|
|
|
12
17
|
### Added
|
data/README.md
CHANGED
|
@@ -167,6 +167,22 @@ buf.sample # => random element
|
|
|
167
167
|
buf.sample(2) # => [random, random]
|
|
168
168
|
```
|
|
169
169
|
|
|
170
|
+
### Chunked Iteration
|
|
171
|
+
|
|
172
|
+
Yield successive non-overlapping chunks of fixed size in oldest-first order.
|
|
173
|
+
The final chunk may be shorter:
|
|
174
|
+
|
|
175
|
+
```ruby
|
|
176
|
+
buf = Philiprehberger::RingBuffer.new(10)
|
|
177
|
+
(1..7).each { |v| buf.push(v) }
|
|
178
|
+
|
|
179
|
+
buf.each_chunk(2).to_a # => [[1, 2], [3, 4], [5, 6], [7]]
|
|
180
|
+
|
|
181
|
+
buf.each_chunk(3) do |chunk|
|
|
182
|
+
process_batch(chunk)
|
|
183
|
+
end
|
|
184
|
+
```
|
|
185
|
+
|
|
170
186
|
### Enumerable
|
|
171
187
|
|
|
172
188
|
```ruby
|
|
@@ -210,6 +226,7 @@ buf.select(&:odd?) # => [1, 3]
|
|
|
210
226
|
| `#ema(alpha:)` | Exponential moving average (single float) |
|
|
211
227
|
| `#range` | Spread between min and max numeric elements |
|
|
212
228
|
| `#count_by(&block)` | Bucketed counts by block return value |
|
|
229
|
+
| `#each_chunk(size)` | Yield successive non-overlapping chunks of `size` elements (oldest first) |
|
|
213
230
|
|
|
214
231
|
## Development
|
|
215
232
|
|
|
@@ -361,5 +361,22 @@ module Philiprehberger
|
|
|
361
361
|
each { |element| result[block.call(element)] += 1 }
|
|
362
362
|
result
|
|
363
363
|
end
|
|
364
|
+
|
|
365
|
+
# Yield successive non-overlapping chunks of `size` elements (oldest first)
|
|
366
|
+
#
|
|
367
|
+
# The final chunk may be shorter than `size` if the buffer length is not
|
|
368
|
+
# a multiple of `size`. An empty buffer yields nothing.
|
|
369
|
+
#
|
|
370
|
+
# @param size [Integer] chunk size (must be positive)
|
|
371
|
+
# @yield [chunk] each chunk in oldest-to-newest order
|
|
372
|
+
# @yieldparam chunk [Array] up to `size` elements
|
|
373
|
+
# @return [Enumerator] when no block is given
|
|
374
|
+
# @raise [Error] when `size` is not a positive integer
|
|
375
|
+
def each_chunk(size, &block)
|
|
376
|
+
raise Error, 'size must be a positive integer' unless size.is_a?(Integer) && size.positive?
|
|
377
|
+
return enum_for(:each_chunk, size) unless block
|
|
378
|
+
|
|
379
|
+
to_a.each_slice(size, &block)
|
|
380
|
+
end
|
|
364
381
|
end
|
|
365
382
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: philiprehberger-ring_buffer
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.8.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Philip Rehberger
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-04-
|
|
11
|
+
date: 2026-04-29 00:00:00.000000000 Z
|
|
12
12
|
dependencies: []
|
|
13
13
|
description: Fixed-capacity ring buffer that overwrites oldest entries on overflow,
|
|
14
14
|
with index access, push/pop/shift mutation, oldest/newest peek, built-in statistics
|