waterdrop 2.0.7 → 2.6.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/.github/FUNDING.yml +1 -0
  4. data/.github/workflows/ci.yml +22 -11
  5. data/.ruby-version +1 -1
  6. data/CHANGELOG.md +200 -0
  7. data/Gemfile +0 -2
  8. data/Gemfile.lock +32 -75
  9. data/README.md +22 -275
  10. data/certs/cert_chain.pem +26 -0
  11. data/config/locales/errors.yml +33 -0
  12. data/docker-compose.yml +19 -12
  13. data/lib/waterdrop/clients/buffered.rb +90 -0
  14. data/lib/waterdrop/clients/dummy.rb +69 -0
  15. data/lib/waterdrop/clients/rdkafka.rb +34 -0
  16. data/lib/{water_drop → waterdrop}/config.rb +39 -16
  17. data/lib/waterdrop/contracts/config.rb +43 -0
  18. data/lib/waterdrop/contracts/message.rb +64 -0
  19. data/lib/{water_drop → waterdrop}/errors.rb +14 -7
  20. data/lib/waterdrop/instrumentation/callbacks/delivery.rb +102 -0
  21. data/lib/{water_drop → waterdrop}/instrumentation/callbacks/error.rb +6 -2
  22. data/lib/{water_drop → waterdrop}/instrumentation/callbacks/statistics.rb +1 -1
  23. data/lib/{water_drop/instrumentation/stdout_listener.rb → waterdrop/instrumentation/logger_listener.rb} +66 -21
  24. data/lib/waterdrop/instrumentation/monitor.rb +20 -0
  25. data/lib/{water_drop/instrumentation/monitor.rb → waterdrop/instrumentation/notifications.rb} +12 -14
  26. data/lib/waterdrop/instrumentation/vendors/datadog/dashboard.json +1 -0
  27. data/lib/waterdrop/instrumentation/vendors/datadog/metrics_listener.rb +210 -0
  28. data/lib/waterdrop/middleware.rb +50 -0
  29. data/lib/{water_drop → waterdrop}/producer/async.rb +40 -4
  30. data/lib/{water_drop → waterdrop}/producer/buffer.rb +12 -30
  31. data/lib/{water_drop → waterdrop}/producer/builder.rb +6 -11
  32. data/lib/{water_drop → waterdrop}/producer/sync.rb +44 -15
  33. data/lib/waterdrop/producer/transactions.rb +170 -0
  34. data/lib/waterdrop/producer.rb +308 -0
  35. data/lib/{water_drop → waterdrop}/version.rb +1 -1
  36. data/lib/waterdrop.rb +28 -2
  37. data/renovate.json +6 -0
  38. data/waterdrop.gemspec +14 -11
  39. data.tar.gz.sig +0 -0
  40. metadata +71 -111
  41. metadata.gz.sig +0 -0
  42. data/certs/mensfeld.pem +0 -25
  43. data/config/errors.yml +0 -6
  44. data/lib/water_drop/contracts/config.rb +0 -26
  45. data/lib/water_drop/contracts/message.rb +0 -42
  46. data/lib/water_drop/instrumentation/callbacks/delivery.rb +0 -30
  47. data/lib/water_drop/instrumentation/callbacks/statistics_decorator.rb +0 -77
  48. data/lib/water_drop/instrumentation/callbacks_manager.rb +0 -39
  49. data/lib/water_drop/instrumentation.rb +0 -20
  50. data/lib/water_drop/patches/rdkafka/bindings.rb +0 -42
  51. data/lib/water_drop/patches/rdkafka/producer.rb +0 -20
  52. data/lib/water_drop/producer/dummy_client.rb +0 -32
  53. data/lib/water_drop/producer.rb +0 -162
  54. data/lib/water_drop.rb +0 -36
  55. /data/lib/{water_drop → waterdrop}/contracts.rb +0 -0
  56. /data/lib/{water_drop → waterdrop}/producer/status.rb +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 261d7b8295e2e1b3a6b9658d4409dc58ff8c336e8e5d6064e80d92c8e3215bbe
4
- data.tar.gz: f67bad60fe2cd37ac1658533ceec0daa1ec9ab527bb022da7f1cc40ccde89088
3
+ metadata.gz: 3798d61ff3464dd6aaeb21f5457230a3b079748f260c59138142144efc62dc40
4
+ data.tar.gz: c9699bc202a67fbb8e456a4e0d316f56e8635e0986a09d0429a25999553c4a76
5
5
  SHA512:
6
- metadata.gz: e0529057c22d4b76c61f788f038e8fb024785aa3a2c89c266cfe2b50d1f2b44e8a96e16ca626f62e721d4ae48fe4afac7113e32e5cd5ccbc5e7adf36aa0558af
7
- data.tar.gz: 31241cad722c315aefab9d4ad2613908f053bf3c905779e8fe5c6f1975fbc866b34526442386c1faec2e2386d5f5332c4b7e80a326aa8aca9b8ab1b94e51d572
6
+ metadata.gz: c6a6d03d205314775b71ca0c4e922ef52159965e30b9280727712f25368f6af78c821d6d468b2362bd4094fbd2d4747195dc1e3a7cd76a0e4582f81a66829b43
7
+ data.tar.gz: 9541ae05afde65cf1124661fd57e23afb4265601748c6b4a60f6fc6f8cabe463cf59b6ac683e7d047e454cc671182808f800add0f68b780bbb1b1325abcab892
checksums.yaml.gz.sig CHANGED
Binary file
@@ -0,0 +1 @@
1
+ custom: ['https://karafka.io/#become-pro']
@@ -1,5 +1,7 @@
1
1
  name: ci
2
2
 
3
+ concurrency: ci-${{ github.ref }}
4
+
3
5
  on:
4
6
  pull_request:
5
7
  push:
@@ -14,35 +16,44 @@ jobs:
14
16
  fail-fast: false
15
17
  matrix:
16
18
  ruby:
19
+ - '3.3.0-preview2'
20
+ - '3.2'
21
+ - '3.1'
17
22
  - '3.0'
18
23
  - '2.7'
19
- - '2.6'
20
- - 'jruby-9.3.1.0'
21
24
  include:
22
- - ruby: '3.0'
25
+ - ruby: '3.2'
23
26
  coverage: 'true'
24
27
  steps:
25
- - uses: actions/checkout@v2
28
+ - uses: actions/checkout@v4
29
+
26
30
  - name: Install package dependencies
27
31
  run: "[ -e $APT_DEPS ] || sudo apt-get install -y --no-install-recommends $APT_DEPS"
32
+
28
33
  - name: Set up Ruby
29
34
  uses: ruby/setup-ruby@v1
30
35
  with:
31
36
  ruby-version: ${{matrix.ruby}}
37
+ bundler-cache: true
38
+
32
39
  - name: Run Kafka with docker-compose
33
- # We need to give Kafka enough time to start and create all the needed topics, etc
34
- # If anyone has a better idea on how to do it smart and easily, please contact me
35
40
  run: |
36
- docker-compose up -d
37
- sleep 5
41
+ docker-compose up -d || (sleep 5 && docker-compose up -d)
42
+
43
+ - name: Wait for Kafka
44
+ run: |
45
+ sleep 15
46
+
38
47
  - name: Install latest bundler
39
48
  run: |
40
49
  gem install bundler --no-document
41
50
  bundle config set without 'tools benchmarks docs'
51
+
42
52
  - name: Bundle install
43
53
  run: |
44
54
  bundle config set without development
45
55
  bundle install --jobs 4 --retry 3
56
+
46
57
  - name: Run all tests
47
58
  env:
48
59
  GITHUB_COVERAGE: ${{matrix.coverage}}
@@ -53,13 +64,13 @@ jobs:
53
64
  strategy:
54
65
  fail-fast: false
55
66
  steps:
56
- - uses: actions/checkout@v2
67
+ - uses: actions/checkout@v4
57
68
  with:
58
69
  fetch-depth: 0
59
70
  - name: Set up Ruby
60
71
  uses: ruby/setup-ruby@v1
61
72
  with:
62
- ruby-version: 3.0
73
+ ruby-version: 3.2
63
74
  - name: Install latest bundler
64
75
  run: gem install bundler --no-document
65
76
  - name: Install Diffend plugin
@@ -72,7 +83,7 @@ jobs:
72
83
  strategy:
73
84
  fail-fast: false
74
85
  steps:
75
- - uses: actions/checkout@v2
86
+ - uses: actions/checkout@v4
76
87
  with:
77
88
  fetch-depth: 0
78
89
  - name: Run Coditsu
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 3.0.2
1
+ 3.2.2
data/CHANGELOG.md CHANGED
@@ -1,5 +1,205 @@
1
1
  # WaterDrop changelog
2
2
 
3
+ ## 2.6.11 (2023-10-25)
4
+ - [Enhancement] Return delivery handles and delivery report for both dummy and buffered clients with proper topics, partitions and offsets assign and auto-increment offsets per partition.
5
+ - [Fix] Fix a case where buffered test client would not accumulate messages on failed transactions
6
+
7
+ ## 2.6.10 (2023-10-24)
8
+ - [Improvement] Introduce `message.purged` event to indicate that a message that was not delivered to Kafka was purged. This most of the time refers to messages that were part of a transaction and were not yet dispatched to Kafka. It always means, that given message was not delivered but in case of transactions it is expected. In case of non-transactional it usually means `#purge` usage or exceeding `message.timeout.ms` so `librdkafka` removes this message from its internal queue. Non-transactional producers do **not** use this and pipe purges to `error.occurred`.
9
+ - [Fix] Fix a case where `message.acknowledged` would not have `caller` key.
10
+ - [Fix] Fix a bug where critical errors (like `IRB::Abort`) would not abort the ongoing transaction.
11
+
12
+ ## 2.6.9 (2023-10-23)
13
+ - [Improvement] Introduce a `transaction.finished` event to indicate that transaction has finished whether it was aborted or committed.
14
+ - [Improvement] Use `transaction.committed` event to indicate that transaction has been committed.
15
+
16
+ ## 2.6.8 (2023-10-20)
17
+ - **[Feature]** Introduce transactions support.
18
+ - [Improvement] Expand `LoggerListener` to inform about transactions (info level).
19
+ - [Improvement] Allow waterdrop to use topic as a symbol or a string.
20
+ - [Improvement] Enhance both `message.acknowledged` and `error.occurred` (for `librdkafka.dispatch_error`) with full delivery_report.
21
+ - [Improvement] Provide `#close!` that will force producer close even with outgoing data after the ma wait timeout.
22
+ - [Improvement] Provide `#purge` that will purge any outgoing data and data from the internal queues (both WaterDrop and librdkafka).
23
+ - [Fix] Fix the `librdkafka.dispatch_error` error dispatch for errors with negative code.
24
+
25
+ ## 2.6.7 (2023-09-01)
26
+ - [Improvement] early flush data from `librdkafka` internal buffer before closing.
27
+ - [Maintenance] Update the signing cert as the old one expired.
28
+
29
+ ## 2.6.6 (2023-08-03)
30
+ - [Improvement] Provide `log_messages` option to `LoggerListener` so the extensive messages data logging can disabled.
31
+
32
+ ## 2.6.5 (2023-07-22)
33
+ - [Fix] Add cause to the errors that are passed into instrumentation (konalegi)
34
+
35
+ ## 2.6.4 (2023-07-11)
36
+ - [Improvement] Use original error `#inspect` for `WaterDrop::Errors::ProduceError` and `WaterDrop::Errors::ProduceManyError` instead of the current empty string.
37
+
38
+ ## 2.6.3 (2023-06-28)
39
+ - [Change] Use `Concurrent::AtomicFixnum` to track operations in progress to prevent potential race conditions on JRuby and TruffleRuby (not yet supported but this is for future usage).
40
+ - [Change] Require `karafka-rdkafka` `>= 0.13.2`.
41
+ - [Change] Require 'karafka-core' `>= 2.1.1`
42
+
43
+ ## 2.6.2 (2023-06-21)
44
+ - [Refactor] Introduce a counter-based locking approach to make sure, that we close the producer safely but at the same time not to limit messages production with producing lock.
45
+ - [Refactor] Make private methods private.
46
+ - [Refactor] Validate that producer is not closed only when attempting to produce.
47
+ - [Refactor] Improve one 5 minute long spec to run in 10 seconds.
48
+ - [Refactor] clear client assignment after closing.
49
+
50
+ ## 2.6.1 (2023-06-19)
51
+ - [Refactor] Remove no longer needed patches.
52
+ - [Fix] Fork detection on a short lived processes seems to fail. Clear the used parent process client reference not to close it in the finalizer (#356).
53
+ - [Change] Require `karafka-rdkafka` `>= 0.13.0`.
54
+ - [Change] Require 'karafka-core' `>= 2.1.0`
55
+
56
+ ## 2.6.0 (2023-06-11)
57
+ - [Improvement] Introduce `client_class` setting for ability to replace underlying client with anything specific to a given env (dev, test, etc).
58
+ - [Improvement] Introduce `Clients::Buffered` useful for writing specs that do not have to talk with Kafka (id-ilych)
59
+ - [Improvement] Make `#produce` method private to avoid confusion and make sure it is not used directly (it is not part of the official API).
60
+ - [Change] Change `wait_on_queue_full` from `false` to `true` as a default.
61
+ - [Change] Rename `wait_on_queue_full_timeout` to `wait_backoff_on_queue_full` to match what it actually does.
62
+ - [Enhancement] Introduce `wait_timeout_on_queue_full` with proper meaning. That is, this represents time after which despite backoff the error will be raised. This should allow to raise an error in case the backoff attempts were insufficient. This prevents from a case, where upon never deliverable messages we would end up with an infinite loop.
63
+ - [Fix] Provide `type` for queue full errors that references the appropriate public API method correctly.
64
+
65
+ ### Upgrade notes
66
+
67
+ 1. Rename `wait_on_queue_full_timeout` to `wait_backoff_on_queue_full`.
68
+ 2. Set `wait_on_queue_full` to `false` if you did not use it and do not want.
69
+
70
+ ## 2.5.3 (2023-05-26)
71
+ - [Enhancement] Include topic name in the `error.occurred` notification payload.
72
+ - [Enhancement] Include topic name in the `message.acknowledged` notification payload.
73
+ - [Maintenance] Require `karafka-core` `2.0.13`
74
+
75
+ ## 2.5.2 (2023-04-24)
76
+ - [Fix] Require missing Pathname (#345)
77
+
78
+ ## 2.5.1 (2023-03-09)
79
+ - [Feature] Introduce a configurable backoff upon `librdkafka` queue full (false by default).
80
+
81
+ ## 2.5.0 (2023-03-04)
82
+ - [Feature] Pipe **all** the errors including synchronous errors via the `error.occurred`.
83
+ - [Improvement] Pipe delivery errors that occurred not via the error callback using the `error.occurred` channel.
84
+ - [Improvement] Introduce `WaterDrop::Errors::ProduceError` and `WaterDrop::Errors::ProduceManyError` for any inline raised errors that occur. You can get the original error by using the `#cause`.
85
+ - [Improvement] Include `#dispatched` messages handler in the `WaterDrop::Errors::ProduceManyError` error, to be able to understand which of the messages were delegated to `librdkafka` prior to the failure.
86
+ - [Maintenance] Remove the `WaterDrop::Errors::FlushFailureError` in favour of correct error that occurred to unify the error handling.
87
+ - [Maintenance] Rename `Datadog::Listener` to `Datadog::MetricsListener` to align with Karafka (#329).
88
+ - [Fix] Do **not** flush when there is no data to flush in the internal buffer.
89
+ - [Fix] Wait on the final data flush for short-lived producers to make sure, that the message is actually dispatched by `librdkafka` or timeout.
90
+
91
+ ### Upgrade notes
92
+
93
+ Please note, this **is** a **breaking** release, hence `2.5.0`.
94
+
95
+ 1. If you used to catch `WaterDrop::Errors::FlushFailureError` now you need to catch `WaterDrop::Errors::ProduceError`. `WaterDrop::Errors::ProduceManyError` is based on the `ProduceError`, hence it should be enough.
96
+ 2. Prior to `2.5.0` there was always a chance of partial dispatches via `produce_many_` methods. Now you can get the info on all the errors via `error.occurred`.
97
+ 3. Inline `Rdkafka::RdkafkaError` are now re-raised via `WaterDrop::Errors::ProduceError` and available under `#cause`. Async `Rdkafka::RdkafkaError` errors are still directly available and you can differentiate between errors using the event `type`.
98
+ 4. If you are using the Datadog listener, you need to:
99
+
100
+ ```ruby
101
+ # Replace require:
102
+ require 'waterdrop/instrumentation/vendors/datadog/listener'
103
+ # With
104
+ require 'waterdrop/instrumentation/vendors/datadog/metrics_listener'
105
+
106
+ # Replace references of
107
+ ::WaterDrop::Instrumentation::Vendors::Datadog::Listener.new
108
+ # With
109
+ ::WaterDrop::Instrumentation::Vendors::Datadog::MetricsListener.new
110
+ ```
111
+
112
+ ## 2.4.11 (2023-02-24)
113
+ - Replace the local rspec locator with generalized core one.
114
+ - Make `::WaterDrop::Instrumentation::Notifications::EVENTS` list public for anyone wanting to re-bind those into a different notification bus.
115
+
116
+ ## 2.4.10 (2023-01-30)
117
+ - Include `caller` in the error instrumentation to align with Karafka.
118
+
119
+ ## 2.4.9 (2023-01-11)
120
+ - Remove empty debug logging out of `LoggerListener`.
121
+ - Do not lock Ruby version in Karafka in favour of `karafka-core`.
122
+ - Make sure `karafka-core` version is at least `2.0.9` to make sure we run `karafka-rdkafka`.
123
+
124
+ ## 2.4.8 (2023-01-07)
125
+ - Use monotonic time from Karafka core.
126
+
127
+ ## 2.4.7 (2022-12-18)
128
+ - Add support to customizable middlewares that can modify message hash prior to validation and dispatch.
129
+ - Fix a case where upon not-available leader, metadata request would not be retried
130
+ - Require `karafka-core` 2.0.7.
131
+
132
+ ## 2.4.6 (2022-12-10)
133
+ - Set `statistics.interval.ms` to 5 seconds by default, so the defaults cover all the instrumentation out of the box.
134
+
135
+ ### Upgrade notes
136
+
137
+ If you want to disable `librdkafka` statistics because you do not use them at all, update the `kafka` `statistics.interval.ms` setting and set it to `0`:
138
+
139
+ ```ruby
140
+ producer = WaterDrop::Producer.new
141
+
142
+ producer.setup do |config|
143
+ config.deliver = true
144
+ config.kafka = {
145
+ 'bootstrap.servers': 'localhost:9092',
146
+ 'statistics.interval.ms': 0
147
+ }
148
+ end
149
+ ```
150
+
151
+ ## 2.4.5 (2022-12-10)
152
+ - Fix invalid error scope visibility.
153
+ - Cache partition count to improve messages production and lower stress on Kafka when `partition_key` is on.
154
+
155
+ ## 2.4.4 (2022-12-09)
156
+ - Add temporary patch on top of `rdkafka-ruby` to mitigate metadata fetch timeout failures.
157
+
158
+ ## 2.4.3 (2022-12-07)
159
+ - Support for librdkafka 0.13
160
+ - Update Github Actions
161
+ - Change auto-generated id from `SecureRandom#uuid` to `SecureRandom#hex(6)`
162
+ - Remove shared components that were moved to `karafka-core` from WaterDrop
163
+
164
+ ## 2.4.2 (2022-09-29)
165
+ - Allow sending tombstone messages (#267)
166
+
167
+ ## 2.4.1 (2022-08-01)
168
+ - Replace local statistics decorator with the one extracted to `karafka-core`.
169
+
170
+ ## 2.4.0 (2022-07-28)
171
+ - Small refactor of the DataDog/Statsd listener to align for future extraction to `karafka-common`.
172
+ - Replace `dry-monitor` with home-brew notification layer (API compatible) and allow for usage with `ActiveSupport::Notifications`.
173
+ - Remove all the common code into `karafka-core` and add it as a dependency.
174
+
175
+ ## 2.3.3 (2022-07-18)
176
+ - Replace `dry-validation` with home-brew validation layer and drop direct dependency on `dry-validation`.
177
+ - Remove indirect dependency on dry-configurable from DataDog listener (no changes required).
178
+
179
+ ## 2.3.2 (2022-07-17)
180
+ - Replace `dry-configurable` with home-brew config and drop direct dependency on `dry-configurable`.
181
+
182
+ ## 2.3.1 (2022-06-17)
183
+ - Update rdkafka patches to align with `0.12.0` and `0.11.1` support.
184
+
185
+ ## 2.3.0 (2022-04-03)
186
+ - Rename StdoutListener to LoggerListener (#240)
187
+
188
+ ## 2.2.0 (2022-02-18)
189
+ - Add Datadog listener for metrics + errors publishing
190
+ - Add Datadog example dashboard template
191
+ - Update Readme to show Dd instrumentation usage
192
+ - Align the directory namespace convention with gem name (waterdrop => WaterDrop)
193
+ - Introduce a common base for validation contracts
194
+ - Drop CI support for ruby 2.6
195
+ - Require all `kafka` settings to have symbol keys (compatibility with Karafka 2.0 and rdkafka)
196
+
197
+ ## 2.1.0 (2022-01-03)
198
+ - Ruby 3.1 support
199
+ - Change the error notification key from `error.emitted` to `error.occurred`.
200
+ - Normalize error tracking and make all the places publish errors into the same notification endpoint (`error.occurred`).
201
+ - Start semantic versioning WaterDrop.
202
+
3
203
  ## 2.0.7 (2021-12-03)
4
204
  - Source code metadata url added to the gemspec
5
205
  - Replace `:producer` with `:producer_id` in events and update `StdoutListener` accordingly. This change aligns all the events in terms of not publishing the whole producer object in the events.
data/Gemfile CHANGED
@@ -6,8 +6,6 @@ plugin 'diffend'
6
6
 
7
7
  gemspec
8
8
 
9
- gem 'rdkafka'
10
-
11
9
  group :development do
12
10
  gem 'byebug'
13
11
  end
data/Gemfile.lock CHANGED
@@ -1,112 +1,69 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- waterdrop (2.0.7)
5
- concurrent-ruby (>= 1.1)
6
- dry-configurable (~> 0.13)
7
- dry-monitor (~> 0.5)
8
- dry-validation (~> 1.7)
9
- rdkafka (>= 0.10)
4
+ waterdrop (2.6.11)
5
+ karafka-core (>= 2.2.3, < 3.0.0)
10
6
  zeitwerk (~> 2.3)
11
7
 
12
8
  GEM
13
9
  remote: https://rubygems.org/
14
10
  specs:
15
- activesupport (6.1.4.1)
11
+ activesupport (7.0.7.2)
16
12
  concurrent-ruby (~> 1.0, >= 1.0.2)
17
13
  i18n (>= 1.6, < 2)
18
14
  minitest (>= 5.1)
19
15
  tzinfo (~> 2.0)
20
- zeitwerk (~> 2.3)
21
16
  byebug (11.1.3)
22
- concurrent-ruby (1.1.9)
23
- diff-lcs (1.4.4)
17
+ concurrent-ruby (1.2.2)
18
+ diff-lcs (1.5.0)
24
19
  docile (1.4.0)
25
- dry-configurable (0.13.0)
26
- concurrent-ruby (~> 1.0)
27
- dry-core (~> 0.6)
28
- dry-container (0.9.0)
29
- concurrent-ruby (~> 1.0)
30
- dry-configurable (~> 0.13, >= 0.13.0)
31
- dry-core (0.7.1)
32
- concurrent-ruby (~> 1.0)
33
- dry-events (0.3.0)
34
- concurrent-ruby (~> 1.0)
35
- dry-core (~> 0.5, >= 0.5)
36
- dry-inflector (0.2.1)
37
- dry-initializer (3.0.4)
38
- dry-logic (1.2.0)
39
- concurrent-ruby (~> 1.0)
40
- dry-core (~> 0.5, >= 0.5)
41
- dry-monitor (0.5.0)
42
- dry-configurable (~> 0.13, >= 0.13.0)
43
- dry-core (~> 0.5, >= 0.5)
44
- dry-events (~> 0.2)
45
- dry-schema (1.8.0)
46
- concurrent-ruby (~> 1.0)
47
- dry-configurable (~> 0.13, >= 0.13.0)
48
- dry-core (~> 0.5, >= 0.5)
49
- dry-initializer (~> 3.0)
50
- dry-logic (~> 1.0)
51
- dry-types (~> 1.5)
52
- dry-types (1.5.1)
53
- concurrent-ruby (~> 1.0)
54
- dry-container (~> 0.3)
55
- dry-core (~> 0.5, >= 0.5)
56
- dry-inflector (~> 0.1, >= 0.1.2)
57
- dry-logic (~> 1.0, >= 1.0.2)
58
- dry-validation (1.7.0)
59
- concurrent-ruby (~> 1.0)
60
- dry-container (~> 0.7, >= 0.7.1)
61
- dry-core (~> 0.5, >= 0.5)
62
- dry-initializer (~> 3.0)
63
- dry-schema (~> 1.8, >= 1.8.0)
64
- factory_bot (6.2.0)
20
+ factory_bot (6.3.0)
65
21
  activesupport (>= 5.0.0)
66
- ffi (1.15.4)
67
- i18n (1.8.11)
22
+ ffi (1.15.5)
23
+ i18n (1.14.1)
68
24
  concurrent-ruby (~> 1.0)
69
- mini_portile2 (2.7.1)
70
- minitest (5.14.4)
71
- rake (13.0.6)
72
- rdkafka (0.11.0)
25
+ karafka-core (2.2.3)
26
+ concurrent-ruby (>= 1.1)
27
+ karafka-rdkafka (>= 0.13.6, < 0.14.0)
28
+ karafka-rdkafka (0.13.6)
73
29
  ffi (~> 1.15)
74
- mini_portile2 (~> 2.7)
30
+ mini_portile2 (~> 2.6)
75
31
  rake (> 12)
76
- rspec (3.10.0)
77
- rspec-core (~> 3.10.0)
78
- rspec-expectations (~> 3.10.0)
79
- rspec-mocks (~> 3.10.0)
80
- rspec-core (3.10.1)
81
- rspec-support (~> 3.10.0)
82
- rspec-expectations (3.10.1)
32
+ mini_portile2 (2.8.2)
33
+ minitest (5.19.0)
34
+ rake (13.0.6)
35
+ rspec (3.12.0)
36
+ rspec-core (~> 3.12.0)
37
+ rspec-expectations (~> 3.12.0)
38
+ rspec-mocks (~> 3.12.0)
39
+ rspec-core (3.12.2)
40
+ rspec-support (~> 3.12.0)
41
+ rspec-expectations (3.12.3)
83
42
  diff-lcs (>= 1.2.0, < 2.0)
84
- rspec-support (~> 3.10.0)
85
- rspec-mocks (3.10.2)
43
+ rspec-support (~> 3.12.0)
44
+ rspec-mocks (3.12.5)
86
45
  diff-lcs (>= 1.2.0, < 2.0)
87
- rspec-support (~> 3.10.0)
88
- rspec-support (3.10.3)
89
- simplecov (0.21.2)
46
+ rspec-support (~> 3.12.0)
47
+ rspec-support (3.12.0)
48
+ simplecov (0.22.0)
90
49
  docile (~> 1.1)
91
50
  simplecov-html (~> 0.11)
92
51
  simplecov_json_formatter (~> 0.1)
93
52
  simplecov-html (0.12.3)
94
- simplecov_json_formatter (0.1.3)
95
- tzinfo (2.0.4)
53
+ simplecov_json_formatter (0.1.4)
54
+ tzinfo (2.0.6)
96
55
  concurrent-ruby (~> 1.0)
97
- zeitwerk (2.5.1)
56
+ zeitwerk (2.6.8)
98
57
 
99
58
  PLATFORMS
100
- x86_64-darwin
101
59
  x86_64-linux
102
60
 
103
61
  DEPENDENCIES
104
62
  byebug
105
63
  factory_bot
106
- rdkafka
107
64
  rspec
108
65
  simplecov
109
66
  waterdrop!
110
67
 
111
68
  BUNDLED WITH
112
- 2.2.31
69
+ 2.4.12