karafka-core 2.5.7 → 2.5.9

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.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +44 -39
  3. data/.github/workflows/push.yml +3 -3
  4. data/.github/workflows/trigger-wiki-refresh.yml +1 -1
  5. data/.github/workflows/verify-action-pins.yml +1 -1
  6. data/.gitignore +0 -1
  7. data/.rubocop.yml +37 -0
  8. data/.ruby-version +1 -1
  9. data/.yard-lint.yml +275 -0
  10. data/CHANGELOG.md +12 -4
  11. data/Gemfile +5 -7
  12. data/Gemfile.lint +13 -0
  13. data/Gemfile.lint.lock +103 -0
  14. data/Gemfile.lock +19 -24
  15. data/Rakefile +14 -2
  16. data/karafka-core.gemspec +21 -21
  17. data/lib/karafka/core/configurable/node.rb +39 -39
  18. data/lib/karafka/core/configurable.rb +8 -10
  19. data/lib/karafka/core/contractable/contract.rb +6 -9
  20. data/lib/karafka/core/contractable/result.rb +10 -10
  21. data/lib/karafka/core/helpers/rspec_locator.rb +10 -10
  22. data/lib/karafka/core/helpers/time.rb +1 -1
  23. data/lib/karafka/core/monitoring/event.rb +1 -1
  24. data/lib/karafka/core/monitoring/monitor.rb +8 -12
  25. data/lib/karafka/core/monitoring/notifications.rb +25 -14
  26. data/lib/karafka/core/monitoring/statistics_decorator.rb +71 -54
  27. data/lib/karafka/core/version.rb +1 -1
  28. data/lib/karafka/core.rb +1 -1
  29. data/lib/karafka-core.rb +26 -26
  30. data/package-lock.json +331 -0
  31. data/package.json +9 -0
  32. data/renovate.json +28 -6
  33. data/test/lib/karafka/core/configurable/leaf_test.rb +3 -0
  34. data/test/lib/karafka/core/configurable/node_test.rb +3 -0
  35. data/test/lib/karafka/core/configurable_test.rb +504 -0
  36. data/test/lib/karafka/core/contractable/contract_test.rb +241 -0
  37. data/test/lib/karafka/core/contractable/result_test.rb +106 -0
  38. data/test/lib/karafka/core/contractable/rule_test.rb +5 -0
  39. data/test/lib/karafka/core/contractable_test.rb +3 -0
  40. data/test/lib/karafka/core/helpers/time_test.rb +29 -0
  41. data/test/lib/karafka/core/instrumentation/callbacks_manager_test.rb +81 -0
  42. data/test/lib/karafka/core/instrumentation_test.rb +35 -0
  43. data/test/lib/karafka/core/monitoring/event_test.rb +25 -0
  44. data/test/lib/karafka/core/monitoring/monitor_test.rb +237 -0
  45. data/test/lib/karafka/core/monitoring/notifications_test.rb +275 -0
  46. data/test/lib/karafka/core/monitoring/statistics_decorator_test.rb +284 -0
  47. data/test/lib/karafka/core/monitoring_test.rb +3 -0
  48. data/test/lib/karafka/core/patches/rdkafka/bindings_test.rb +25 -0
  49. data/test/lib/karafka/core/taggable/tags_test.rb +66 -0
  50. data/test/lib/karafka/core/taggable_test.rb +36 -0
  51. data/test/lib/karafka/core/version_test.rb +5 -0
  52. data/test/lib/karafka/core_test.rb +13 -0
  53. data/test/lib/karafka-core_test.rb +3 -0
  54. data/test/support/class_builder.rb +24 -0
  55. data/test/support/describe_current_helper.rb +85 -0
  56. data/test/test_helper.rb +55 -0
  57. metadata +32 -5
  58. data/.coditsu/ci.yml +0 -3
  59. data/.diffend.yml +0 -3
  60. data/.rspec +0 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 67cafa1111ce6ff11e3639edc28f436ea538dc3acdbd7db59a3e85e2b16c3c79
4
- data.tar.gz: 88501c54d507465eee6e438d58a51c3b1225b060c24649bb00d923c8d5eb7d9b
3
+ metadata.gz: f40905132baef109ff513aedd80d0be8aa041a4bc44117e2e897e554daa9b47c
4
+ data.tar.gz: d4fbaeb025d4f79d834aea13f4defd294f7d874c628973ce5279b840b713d006
5
5
  SHA512:
6
- metadata.gz: 421b6144707c52cb077c36e54bc1936692d27704d5af83b601827b3201a9db91d4abd0777373d60b9e21784f2769f50a3a27c00e94b38372e2986bde2e40cfbf
7
- data.tar.gz: 0504c6cf7a700c0ebf8db610b9cf26ca93472b735269f78c03c17c2c176b14404625eaa009fb46d7b2013878e830e4cfc09408b7a6e76f0a08e436231729d824
6
+ metadata.gz: 8ae8c3a4772bb914737111319cab6706a45a6af62826a16cb357d43a7521f0b390e2ab338e2e818c24c738d586d1feb89c18799b055d83ce4f089b9642c36910
7
+ data.tar.gz: fbeaeac510a0b2ad3ef23cca8d5a5b958a9e6debbe98899fb4590f3a1dbccaec7543fbd58dea66b5cd344a7783b051d4d60398ba370e66d8fb07a2244ad454d0
@@ -17,20 +17,19 @@ jobs:
17
17
  specs:
18
18
  timeout-minutes: 15
19
19
  runs-on: ubuntu-latest
20
- needs: diffend
21
20
  strategy:
22
21
  fail-fast: false
23
22
  matrix:
24
23
  ruby:
25
- - '3.5.0-preview1'
24
+ - '4.0'
26
25
  - '3.4'
27
26
  - '3.3'
28
27
  - '3.2'
29
28
  include:
30
- - ruby: '3.4'
29
+ - ruby: '4.0'
31
30
  coverage: 'true'
32
31
  steps:
33
- - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
32
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
34
33
  with:
35
34
  fetch-depth: 0
36
35
 
@@ -38,7 +37,7 @@ jobs:
38
37
  run: "[ -e $APT_DEPS ] || sudo apt-get install -y --no-install-recommends $APT_DEPS"
39
38
 
40
39
  - name: Set up Ruby
41
- uses: ruby/setup-ruby@1c58d16f1a2d74dc895c05f92d1e31ffe691110e # v1.261.0
40
+ uses: ruby/setup-ruby@09a7688d3b55cf0e976497ff046b70949eeaccfd # v1.288.0
42
41
  with:
43
42
  ruby-version: ${{matrix.ruby}}
44
43
  bundler: 'latest'
@@ -58,62 +57,68 @@ jobs:
58
57
  - name: Run all tests
59
58
  env:
60
59
  GITHUB_COVERAGE: ${{matrix.coverage}}
61
- run: bundle exec rspec
60
+ run: bundle exec rake test
62
61
 
63
- diffend:
62
+ rubocop:
64
63
  timeout-minutes: 5
65
64
  runs-on: ubuntu-latest
66
- strategy:
67
- fail-fast: false
65
+ env:
66
+ BUNDLE_GEMFILE: Gemfile.lint
68
67
  steps:
69
- - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
68
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
70
69
  with:
71
70
  fetch-depth: 0
72
71
  - name: Set up Ruby
73
- uses: ruby/setup-ruby@1c58d16f1a2d74dc895c05f92d1e31ffe691110e # v1.261.0
72
+ uses: ruby/setup-ruby@09a7688d3b55cf0e976497ff046b70949eeaccfd # v1.288.0
74
73
  with:
75
- ruby-version: 3.4
76
- self-hosted: false
74
+ ruby-version: '4.0.1'
75
+ bundler-cache: true
76
+ - name: Run rubocop
77
+ run: bundle exec rubocop
77
78
 
78
- - name: Install latest bundler
79
- run: gem install bundler --no-document
80
- - name: Install Diffend plugin
81
- run: bundle plugin install diffend
82
- - name: Bundle Secure
83
- run: bundle secure
79
+ yard-lint:
80
+ timeout-minutes: 5
81
+ runs-on: ubuntu-latest
82
+ env:
83
+ BUNDLE_GEMFILE: Gemfile.lint
84
+ steps:
85
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
86
+ with:
87
+ fetch-depth: 0
88
+ - name: Set up Ruby
89
+ uses: ruby/setup-ruby@09a7688d3b55cf0e976497ff046b70949eeaccfd # v1.288.0
90
+ with:
91
+ ruby-version: '4.0.1'
92
+ bundler-cache: true
93
+ - name: Run yard-lint
94
+ run: bundle exec yard-lint lib/
84
95
 
85
- coditsu:
96
+ lostconf:
86
97
  timeout-minutes: 5
87
98
  runs-on: ubuntu-latest
88
- strategy:
89
- fail-fast: false
90
99
  steps:
91
- - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
100
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
92
101
  with:
93
102
  fetch-depth: 0
94
- - name: Download Coditsu script
95
- run: |
96
- curl -sSL https://api.coditsu.io/run/ci -o coditsu_script.sh
97
- chmod +x coditsu_script.sh
98
- - name: Verify Coditsu script checksum
99
- run: |
100
- EXPECTED_SHA256="0aecc5aa010f53fca264548a41467a2b0a1208d750ce1da3e98a217304cacbbc"
101
- ACTUAL_SHA256=$(sha256sum coditsu_script.sh | awk '{ print $1 }')
102
- if [ "$ACTUAL_SHA256" != "$EXPECTED_SHA256" ]; then
103
- echo "::error::Checksum verification failed. Expected $EXPECTED_SHA256 but got $ACTUAL_SHA256."
104
- exit 1
105
- fi
106
- - name: Run Coditsu
107
- run: ./coditsu_script.sh
103
+ - name: Set up Node.js
104
+ uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
105
+ with:
106
+ node-version: '20'
107
+ cache: 'npm'
108
+ - name: Install dependencies
109
+ run: npm ci
110
+ - name: Run lostconf
111
+ run: npx lostconf --fail-on-stale
108
112
 
109
113
  ci-success:
110
114
  name: CI Success
111
115
  runs-on: ubuntu-latest
112
116
  if: always()
113
117
  needs:
114
- - diffend
115
- - coditsu
118
+ - rubocop
116
119
  - specs
120
+ - yard-lint
121
+ - lostconf
117
122
  steps:
118
123
  - name: Check all jobs passed
119
124
  if: |
@@ -19,12 +19,12 @@ jobs:
19
19
  id-token: write
20
20
 
21
21
  steps:
22
- - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
22
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
23
23
  with:
24
24
  fetch-depth: 0
25
25
 
26
26
  - name: Set up Ruby
27
- uses: ruby/setup-ruby@1c58d16f1a2d74dc895c05f92d1e31ffe691110e # v1.261.0
27
+ uses: ruby/setup-ruby@09a7688d3b55cf0e976497ff046b70949eeaccfd # v1.288.0
28
28
  with:
29
29
  bundler-cache: false
30
30
 
@@ -32,4 +32,4 @@ jobs:
32
32
  run: |
33
33
  bundle install --jobs 4 --retry 3
34
34
 
35
- - uses: rubygems/release-gem@a25424ba2ba8b387abc8ef40807c2c85b96cbe32 # v1.1.1
35
+ - uses: rubygems/release-gem@1c162a739e8b4cb21a676e97b087e8268d8fc40b # v1.1.2
@@ -13,7 +13,7 @@ jobs:
13
13
  if: github.repository_owner == 'karafka'
14
14
  steps:
15
15
  - name: Trigger wiki refresh
16
- uses: peter-evans/repository-dispatch@ff45666b9427631e3450c54a1bcbee4d9ff4d7c0 # v3.0.0
16
+ uses: peter-evans/repository-dispatch@28959ce8df70de7be546dd1250a005dd32156697 # v4.0.1
17
17
  with:
18
18
  token: ${{ secrets.WIKI_REPO_TOKEN }}
19
19
  repository: karafka/wiki
@@ -7,7 +7,7 @@ jobs:
7
7
  verify_action_pins:
8
8
  runs-on: ubuntu-latest
9
9
  steps:
10
- - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
10
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
11
11
  - name: Check SHA pins
12
12
  run: |
13
13
  if grep -E -r "uses: .*/.*@(v[0-9]+|main|master)($|[[:space:]]|$)" --include="*.yml" --include="*.yaml" .github/workflows/ | grep -v "#"; then
data/.gitignore CHANGED
@@ -6,7 +6,6 @@
6
6
  app.god
7
7
 
8
8
  # minimal Rails specific artifacts
9
- /.coditsu/local.yml
10
9
  db/*.sqlite3
11
10
  /log/development.log
12
11
  /log/production.log
data/.rubocop.yml ADDED
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ plugins:
4
+ - rubocop-minitest
5
+ - rubocop-performance
6
+ - rubocop-thread_safety
7
+
8
+ inherit_gem:
9
+ standard: config/base.yml
10
+ standard-performance: config/base.yml
11
+
12
+ AllCops:
13
+ NewCops: enable
14
+ TargetRubyVersion: 3.2
15
+ Include:
16
+ - "**/*.rb"
17
+ - "**/*.gemspec"
18
+ - "**/Gemfile"
19
+ - "**/Rakefile"
20
+ - Gemfile.lint
21
+
22
+ # Layout
23
+ Layout/LineLength:
24
+ Max: 100
25
+
26
+ Layout/SpaceInsideHashLiteralBraces:
27
+ EnforcedStyle: space
28
+
29
+ # ThreadSafety
30
+ ThreadSafety/ClassAndModuleAttributes:
31
+ Enabled: false
32
+
33
+ ThreadSafety/ClassInstanceVariable:
34
+ Enabled: false
35
+
36
+ ThreadSafety/NewThread:
37
+ Enabled: false
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 3.4.6
1
+ 4.0.1
data/.yard-lint.yml ADDED
@@ -0,0 +1,275 @@
1
+ # YARD-Lint Configuration
2
+ # See https://github.com/mensfeld/yard-lint for documentation
3
+
4
+ # Global settings for all validators
5
+ AllValidators:
6
+ YardOptions:
7
+ - "--private"
8
+ - "--protected"
9
+ Exclude:
10
+ - .git/**/*
11
+ - vendor/**/*
12
+ - node_modules/**/*
13
+ - test/**/*
14
+ FailOnSeverity: convention
15
+ MinCoverage: 98.0
16
+ DiffMode:
17
+ DefaultBaseRef:
18
+
19
+ # Documentation validators
20
+ Documentation/UndocumentedObjects:
21
+ Description: Checks for classes, modules, and methods without documentation.
22
+ Enabled: true
23
+ Severity: error
24
+ ExcludedMethods:
25
+ - initialize/0
26
+ - "/^_/"
27
+
28
+ Documentation/UndocumentedMethodArguments:
29
+ Description: Checks for method parameters without @param tags.
30
+ Enabled: true
31
+ Severity: error
32
+
33
+ Documentation/UndocumentedBooleanMethods:
34
+ Description: Checks that question mark methods document their boolean return.
35
+ Enabled: true
36
+ Severity: error
37
+
38
+ Documentation/UndocumentedOptions:
39
+ Description: Detects methods with options hash parameters but no @option tags.
40
+ Enabled: true
41
+ Severity: error
42
+
43
+ Documentation/MarkdownSyntax:
44
+ Description: Detects common markdown syntax errors in documentation.
45
+ Enabled: true
46
+ Severity: error
47
+
48
+ Documentation/EmptyCommentLine:
49
+ Description: Detects empty comment lines at the start or end of documentation blocks.
50
+ Enabled: true
51
+ Severity: convention
52
+ EnabledPatterns:
53
+ Leading: true
54
+ Trailing: true
55
+
56
+ Documentation/BlankLineBeforeDefinition:
57
+ Description: Detects blank lines between YARD documentation and method definition.
58
+ Enabled: true
59
+ Severity: convention
60
+ OrphanedSeverity: convention
61
+ EnabledPatterns:
62
+ SingleBlankLine: true
63
+ OrphanedDocs: true
64
+
65
+ # Tags validators
66
+ Tags/Order:
67
+ Description: Enforces consistent ordering of YARD tags.
68
+ Enabled: true
69
+ Severity: error
70
+ EnforcedOrder:
71
+ - param
72
+ - option
73
+ - return
74
+ - raise
75
+ - example
76
+
77
+ Tags/InvalidTypes:
78
+ Description: Validates type definitions in @param, @return, @option tags.
79
+ Enabled: true
80
+ Severity: error
81
+ ValidatedTags:
82
+ - param
83
+ - option
84
+ - return
85
+
86
+ Tags/TypeSyntax:
87
+ Description: Validates YARD type syntax using YARD parser.
88
+ Enabled: true
89
+ Severity: error
90
+ ValidatedTags:
91
+ - param
92
+ - option
93
+ - return
94
+ - yieldreturn
95
+
96
+ Tags/MeaninglessTag:
97
+ Description: Detects @param/@option tags on classes, modules, or constants.
98
+ Enabled: true
99
+ Severity: error
100
+ CheckedTags:
101
+ - param
102
+ - option
103
+ InvalidObjectTypes:
104
+ - class
105
+ - module
106
+ - constant
107
+
108
+ Tags/CollectionType:
109
+ Description: Validates Hash collection syntax consistency.
110
+ Enabled: true
111
+ Severity: error
112
+ EnforcedStyle: long
113
+ ValidatedTags:
114
+ - param
115
+ - option
116
+ - return
117
+ - yieldreturn
118
+
119
+ Tags/TagTypePosition:
120
+ Description: Validates type annotation position in tags.
121
+ Enabled: true
122
+ Severity: error
123
+ CheckedTags:
124
+ - param
125
+ - option
126
+ EnforcedStyle: type_after_name
127
+
128
+ Tags/ApiTags:
129
+ Description: Enforces @api tags on public objects.
130
+ Enabled: false
131
+ Severity: error
132
+ AllowedApis:
133
+ - public
134
+ - private
135
+ - internal
136
+
137
+ Tags/OptionTags:
138
+ Description: Requires @option tags for methods with options parameters.
139
+ Enabled: true
140
+ Severity: error
141
+
142
+ Tags/ExampleSyntax:
143
+ Description: Validates Ruby syntax in @example tags.
144
+ Enabled: true
145
+ Severity: warning
146
+
147
+ Tags/RedundantParamDescription:
148
+ Description: Detects meaningless parameter descriptions that add no value.
149
+ Enabled: true
150
+ Severity: convention
151
+ CheckedTags:
152
+ - param
153
+ - option
154
+ Articles:
155
+ - The
156
+ - the
157
+ - A
158
+ - a
159
+ - An
160
+ - an
161
+ MaxRedundantWords: 6
162
+ GenericTerms:
163
+ - object
164
+ - instance
165
+ - value
166
+ - data
167
+ - item
168
+ - element
169
+ EnabledPatterns:
170
+ ArticleParam: true
171
+ PossessiveParam: true
172
+ TypeRestatement: true
173
+ ParamToVerb: true
174
+ IdPattern: true
175
+ DirectionalDate: true
176
+ TypeGeneric: true
177
+
178
+ Tags/InformalNotation:
179
+ Description: Detects informal tag notation patterns like "Note:" instead of @note.
180
+ Enabled: true
181
+ Severity: warning
182
+ CaseSensitive: false
183
+ RequireStartOfLine: true
184
+ Patterns:
185
+ Note: "@note"
186
+ Todo: "@todo"
187
+ TODO: "@todo"
188
+ FIXME: "@todo"
189
+ See: "@see"
190
+ See also: "@see"
191
+ Warning: "@deprecated"
192
+ Deprecated: "@deprecated"
193
+ Author: "@author"
194
+ Version: "@version"
195
+ Since: "@since"
196
+ Returns: "@return"
197
+ Raises: "@raise"
198
+ Example: "@example"
199
+
200
+ Tags/NonAsciiType:
201
+ Description: Detects non-ASCII characters in type annotations.
202
+ Enabled: true
203
+ Severity: warning
204
+ ValidatedTags:
205
+ - param
206
+ - option
207
+ - return
208
+ - yieldreturn
209
+ - yieldparam
210
+
211
+ Tags/TagGroupSeparator:
212
+ Description: Enforces blank line separators between different YARD tag groups.
213
+ Enabled: false
214
+ Severity: convention
215
+ TagGroups:
216
+ param:
217
+ - param
218
+ - option
219
+ return:
220
+ - return
221
+ error:
222
+ - raise
223
+ - throws
224
+ example:
225
+ - example
226
+ meta:
227
+ - see
228
+ - note
229
+ - todo
230
+ - deprecated
231
+ - since
232
+ - version
233
+ - api
234
+ yield:
235
+ - yield
236
+ - yieldparam
237
+ - yieldreturn
238
+ RequireAfterDescription: false
239
+
240
+ # Warnings validators - catches YARD parser errors
241
+ Warnings/UnknownTag:
242
+ Description: Detects unknown YARD tags.
243
+ Enabled: true
244
+ Severity: error
245
+
246
+ Warnings/UnknownDirective:
247
+ Description: Detects unknown YARD directives.
248
+ Enabled: true
249
+ Severity: error
250
+
251
+ Warnings/InvalidTagFormat:
252
+ Description: Detects malformed tag syntax.
253
+ Enabled: true
254
+ Severity: error
255
+
256
+ Warnings/InvalidDirectiveFormat:
257
+ Description: Detects malformed directive syntax.
258
+ Enabled: true
259
+ Severity: error
260
+
261
+ Warnings/DuplicatedParameterName:
262
+ Description: Detects duplicate @param tags.
263
+ Enabled: true
264
+ Severity: error
265
+
266
+ Warnings/UnknownParameterName:
267
+ Description: Detects @param tags for non-existent parameters.
268
+ Enabled: true
269
+ Severity: error
270
+
271
+ # Semantic validators
272
+ Semantic/AbstractMethods:
273
+ Description: Ensures @abstract methods do not have real implementations.
274
+ Enabled: true
275
+ Severity: error
data/CHANGELOG.md CHANGED
@@ -1,11 +1,19 @@
1
1
  # Karafka Core Changelog
2
2
 
3
+ ## 2.5.9 (2026-03-02)
4
+ - [Enhancement] Optimize `StatisticsDecorator` to eliminate per-hash Array allocations by using `each_pair` with a per-call pending-writes buffer instead of `current.keys.each`, reducing allocations from tens of thousands to one per call at scale.
5
+ - [Enhancement] Inline `StatisticsDecorator#append` and `#suffix_keys_for` into `#diff` to reduce method call overhead by ~96% (from ~915k to ~39k calls at 6400 partitions).
6
+ - [Enhancement] Support `excluded_keys` option in `StatisticsDecorator` to skip decoration of unused librdkafka statistics subtrees (e.g. broker toppars, window stats), yielding ~28% additional speedup at scale.
7
+
8
+ ## 2.5.8 (2025-11-23)
9
+ - [Enhancement] Memoize `StatisticsDecorator` suffix keys to reduce string allocations (#268).
10
+
3
11
  ## 2.5.7 (2025-09-28)
4
12
  - [Enhancement] Optimize `Node#deep_dup` to reduce array allocations during configuration deep copying.
5
13
  - [Enhancement] Optimize `Result#initialize` to use shared `EMPTY_HASH` constant for successful validations.
6
14
  - [Enhancement] Optimize `StatisticsDecorator#append` string concatenation to reduce allocations.
7
15
  - [Enhancement] Optimize `Notifications#instrument` payload handling to avoid unnecessary hash merges for empty payloads.
8
- - [Change] Remove Ruby 3.1 support due to EOL.
16
+ - **[EOL]** Remove Ruby 3.1 support due to EOL.
9
17
 
10
18
  ## 2.5.6 (2025-09-02)
11
19
  - [Change] Normalize how libs and dependencies are required (no functional change for the end user)
@@ -55,7 +63,7 @@
55
63
  - [Change] Allow `karafka-rdkafka` `0.18.0`.
56
64
 
57
65
  ## 2.4.5 (2024-11-19)
58
- - **[Breaking]** Drop Ruby `3.0` support according to the EOL schedule.
66
+ - **[EOL]** Drop Ruby `3.0` support according to the EOL schedule.
59
67
  - [Enhancement] Support listeners inspection via `#listeners`.
60
68
  - [Fix] Restore `#available_events` notifications bus method.
61
69
  - [Change] Set minimum `karafka-rdkafka` on `0.17.6` to support new features.
@@ -78,7 +86,7 @@
78
86
  - [Enhancement] Allow clearing one event type (dorner).
79
87
 
80
88
  ## 2.4.0 (2024-04-26)
81
- - **[Breaking]** Drop Ruby `2.7` support.
89
+ - **[EOL]** Drop Ruby `2.7` support.
82
90
  - [Enhancement] Provide necessary alterations for custom oauth token callbacks to operate.
83
91
  - [Change] Set minimum `karafka-rdkafka` on `0.15.0` to support new features.
84
92
 
@@ -93,7 +101,7 @@
93
101
  - [Enhancement] Set backtrace for errors propagated via the errors callbacks.
94
102
 
95
103
  ## 2.2.5 (2023-10-31)
96
- - [Change] Drop support for Ruby 2.6 due to incompatibilities in usage of `ObjectSpace::WeakMap`
104
+ - **[EOL]** Drop support for Ruby 2.6 due to incompatibilities in usage of `ObjectSpace::WeakMap`
97
105
  - [Change] Set minimum `karafka-rdkafka` on `0.13.8` to support consumer `#position`.
98
106
 
99
107
  ## 2.2.4 (2023-10-25)
data/Gemfile CHANGED
@@ -1,14 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- source 'https://rubygems.org'
4
-
5
- plugin 'diffend'
3
+ source "https://rubygems.org"
6
4
 
7
5
  gemspec
8
6
 
9
7
  group :test do
10
- gem 'byebug'
11
- gem 'rspec'
12
- gem 'simplecov'
13
- gem 'warning'
8
+ gem "byebug"
9
+ gem "minitest"
10
+ gem "simplecov"
11
+ gem "warning"
14
12
  end
data/Gemfile.lint ADDED
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+
5
+ # Documentation linting
6
+ gem "yard-lint"
7
+
8
+ # Code style (StandardRB via RuboCop)
9
+ gem "standard"
10
+ gem "standard-performance"
11
+ gem "rubocop-performance"
12
+ gem "rubocop-minitest"
13
+ gem "rubocop-thread_safety"