rdkafka 0.27.0-x86_64-linux-gnu → 0.29.0-x86_64-linux-gnu

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 (55) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +38 -0
  3. data/README.md +2 -0
  4. data/docker-compose-ssl.yml +1 -1
  5. data/docker-compose.yml +1 -1
  6. data/ext/librdkafka.so +0 -0
  7. data/lib/rdkafka/abstract_handle.rb +31 -2
  8. data/lib/rdkafka/admin/config_binding_result.rb +2 -2
  9. data/lib/rdkafka/admin/create_acl_handle.rb +6 -5
  10. data/lib/rdkafka/admin/create_partitions_handle.rb +4 -6
  11. data/lib/rdkafka/admin/create_topic_handle.rb +4 -6
  12. data/lib/rdkafka/admin/delete_acl_handle.rb +5 -7
  13. data/lib/rdkafka/admin/delete_groups_handle.rb +4 -6
  14. data/lib/rdkafka/admin/delete_topic_handle.rb +4 -6
  15. data/lib/rdkafka/admin/describe_acl_handle.rb +5 -7
  16. data/lib/rdkafka/admin/describe_configs_handle.rb +4 -10
  17. data/lib/rdkafka/admin/describe_configs_report.rb +1 -5
  18. data/lib/rdkafka/admin/incremental_alter_configs_handle.rb +4 -10
  19. data/lib/rdkafka/admin/incremental_alter_configs_report.rb +1 -5
  20. data/lib/rdkafka/admin/list_offsets_handle.rb +5 -10
  21. data/lib/rdkafka/admin.rb +75 -43
  22. data/lib/rdkafka/bindings.rb +9 -4
  23. data/lib/rdkafka/callbacks/base_handler.rb +62 -0
  24. data/lib/rdkafka/callbacks/create_acl_handler.rb +37 -0
  25. data/lib/rdkafka/callbacks/create_partitions_handler.rb +37 -0
  26. data/lib/rdkafka/callbacks/create_topic_handler.rb +37 -0
  27. data/lib/rdkafka/callbacks/delete_acl_handler.rb +42 -0
  28. data/lib/rdkafka/callbacks/delete_groups_handler.rb +37 -0
  29. data/lib/rdkafka/callbacks/delete_topic_handler.rb +37 -0
  30. data/lib/rdkafka/callbacks/describe_acl_handler.rb +35 -0
  31. data/lib/rdkafka/callbacks/describe_configs_handler.rb +42 -0
  32. data/lib/rdkafka/callbacks/incremental_alter_configs_handler.rb +42 -0
  33. data/lib/rdkafka/callbacks/list_offsets_handler.rb +42 -0
  34. data/lib/rdkafka/callbacks.rb +50 -244
  35. data/lib/rdkafka/config.rb +45 -33
  36. data/lib/rdkafka/consumer/headers.rb +19 -5
  37. data/lib/rdkafka/consumer/partition.rb +8 -1
  38. data/lib/rdkafka/consumer/topic_partition_list.rb +44 -22
  39. data/lib/rdkafka/consumer.rb +135 -33
  40. data/lib/rdkafka/defaults.rb +19 -0
  41. data/lib/rdkafka/helpers/metadata.rb +29 -0
  42. data/lib/rdkafka/metadata.rb +86 -19
  43. data/lib/rdkafka/native_kafka.rb +2 -4
  44. data/lib/rdkafka/producer/delivery_handle.rb +3 -3
  45. data/lib/rdkafka/producer/partitions_count_cache.rb +24 -38
  46. data/lib/rdkafka/producer.rb +56 -44
  47. data/lib/rdkafka/version.rb +3 -3
  48. data/lib/rdkafka.rb +12 -0
  49. data/package-lock.json +6 -6
  50. data/rdkafka.gemspec +1 -0
  51. data/renovate.json +13 -2
  52. metadata +14 -5
  53. data/Gemfile +0 -13
  54. data/Gemfile.lint +0 -14
  55. data/Gemfile.lint.lock +0 -123
@@ -37,12 +37,11 @@ module Rdkafka
37
37
  # contention in multi-threaded environments while ensuring data consistency.
38
38
  #
39
39
  # 6. Topic recreation handling
40
- # If a topic is deleted and recreated with fewer partitions, the cache will continue to
41
- # report the higher count until either the TTL expires or the process is restarted. This
42
- # design choice simplifies the implementation while relying on librdkafka's error handling
43
- # for edge cases. In production environments, topic recreation with different partition
44
- # counts is typically accompanied by application restarts to handle structural changes.
45
- # This also aligns with the previous cache implementation.
40
+ # If a topic is deleted and recreated with fewer partitions, the cache keeps reporting the
41
+ # higher count only until the entry's TTL expires. The first refresh after expiry performs
42
+ # an authoritative metadata read and adopts the lower count. Within the TTL window a lower
43
+ # value is still ignored, so a transient or racy lower read cannot clobber a correct higher
44
+ # count.
46
45
  class PartitionsCountCache
47
46
  include Helpers::Time
48
47
 
@@ -91,28 +90,14 @@ module Rdkafka
91
90
  current_info = @counts[topic]
92
91
 
93
92
  if current_info.nil? || expired?(current_info[0])
93
+ # The cached entry is missing or expired, so the block performs an authoritative metadata
94
+ # read. We hand it to `set`, which adopts a higher count always and a lower count once the
95
+ # entry has expired (e.g. the topic was recreated with fewer partitions). We then return
96
+ # whatever `set` settled on so a concurrent refresh that wrote a higher value still wins.
94
97
  new_count = yield
98
+ set(topic, new_count)
95
99
 
96
- if current_info.nil?
97
- # No existing data, create a new entry with mutex
98
- set(topic, new_count)
99
-
100
- return new_count
101
- else
102
- current_count = current_info[1]
103
-
104
- if new_count > current_count
105
- # Higher value needs mutex to update both timestamp and count
106
- set(topic, new_count)
107
-
108
- return new_count
109
- else
110
- # Same or lower value, just update timestamp without mutex
111
- refresh_timestamp(topic)
112
-
113
- return current_count
114
- end
115
- end
100
+ return @counts[topic][1]
116
101
  end
117
102
 
118
103
  current_info[1]
@@ -133,8 +118,11 @@ module Rdkafka
133
118
  # First check outside mutex to avoid unnecessary locking
134
119
  current_info = @counts[topic]
135
120
 
136
- # For lower values, we don't update count but might need to refresh timestamp
137
- if current_info && new_count < current_info[1]
121
+ # Within the TTL window a lower value is treated as a stale/racy read and ignored, since
122
+ # partition counts only grow during normal operation. Once the entry has expired a lower
123
+ # value is an authoritative refresh (e.g. the topic was recreated with fewer partitions),
124
+ # so we fall through and adopt it below.
125
+ if current_info && new_count < current_info[1] && !expired?(current_info[0])
138
126
  refresh_timestamp(topic)
139
127
 
140
128
  return
@@ -148,17 +136,15 @@ module Rdkafka
148
136
  if current_info.nil?
149
137
  # Create new entry
150
138
  @counts[topic] = [monotonic_now_ms, new_count]
139
+ elsif new_count > current_info[1] || expired?(current_info[0])
140
+ # A higher count always wins; a lower count is accepted only when the existing entry
141
+ # has expired, so a concurrent fresh higher value (which reset the timestamp) is never
142
+ # clobbered by a stale lower one.
143
+ current_info[0] = monotonic_now_ms
144
+ current_info[1] = new_count
151
145
  else
152
- current_count = current_info[1]
153
-
154
- if new_count > current_count
155
- # Update to higher count value
156
- current_info[0] = monotonic_now_ms
157
- current_info[1] = new_count
158
- else
159
- # Same or lower count, update timestamp only
160
- current_info[0] = monotonic_now_ms
161
- end
146
+ # Same or lower count within the TTL window: refresh the timestamp only
147
+ current_info[0] = monotonic_now_ms
162
148
  end
163
149
  end
164
150
  end
@@ -5,6 +5,7 @@ module Rdkafka
5
5
  class Producer
6
6
  include Helpers::Time
7
7
  include Helpers::OAuth
8
+ include Helpers::Metadata
8
9
 
9
10
  # @private
10
11
  @@partitions_count_cache = PartitionsCountCache.new
@@ -94,6 +95,12 @@ module Rdkafka
94
95
  )
95
96
 
96
97
  unless result == :config_ok
98
+ # rd_kafka_topic_new has not been called yet, so librdkafka has not taken
99
+ # ownership of the config. Destroy it ourselves before raising, otherwise the
100
+ # partially built rd_kafka_topic_conf_t leaks. (On the rd_kafka_topic_new path
101
+ # librdkafka frees the conf on both success and failure, so we never destroy it
102
+ # there.)
103
+ Rdkafka::Bindings.rd_kafka_topic_conf_destroy(topic_config)
97
104
  raise Config::ConfigError.new(error_buffer.read_string)
98
105
  end
99
106
  end
@@ -322,14 +329,15 @@ module Rdkafka
322
329
  end
323
330
 
324
331
  topic_metadata ? topic_metadata[:partition_count] : Rdkafka::Bindings::RD_KAFKA_PARTITION_UA
332
+ rescue Rdkafka::RdkafkaError => e
333
+ # A missing topic is an expected, cacheable outcome (the topic may be auto-created on
334
+ # produce, or simply not exist yet). Returning RD_KAFKA_PARTITION_UA from inside the block
335
+ # caches it, so we don't re-run a blocking metadata query on every produce(partition_key:)
336
+ # to that topic. Anything else is a real error and is re-raised.
337
+ raise(e) unless e.code == :unknown_topic_or_part
338
+
339
+ Rdkafka::Bindings::RD_KAFKA_PARTITION_UA
325
340
  end
326
- rescue Rdkafka::RdkafkaError => e
327
- # If the topic does not exist, it will be created or if not allowed another error will be
328
- # raised. We here return RD_KAFKA_PARTITION_UA so this can happen without early error
329
- # happening on metadata discovery.
330
- return Rdkafka::Bindings::RD_KAFKA_PARTITION_UA if e.code == :unknown_topic_or_part
331
-
332
- raise(e)
333
341
  end
334
342
 
335
343
  # Produces a message to a Kafka topic. The message is added to rdkafka's queue, call {DeliveryHandle#wait wait} on the returned delivery handle to make sure it is delivered.
@@ -410,8 +418,7 @@ module Rdkafka
410
418
  # based on the key when present.
411
419
  partition ||= Rdkafka::Bindings::RD_KAFKA_PARTITION_UA
412
420
 
413
- # If timestamp is nil use 0 and let Kafka set one. If an integer or time
414
- # use it.
421
+ # If timestamp is nil use 0 and let Kafka set one. If an integer or time use it.
415
422
  raw_timestamp = if timestamp.nil?
416
423
  0
417
424
  elsif timestamp.is_a?(Integer)
@@ -431,51 +438,55 @@ module Rdkafka
431
438
  delivery_handle[:offset] = Rdkafka::Bindings::RD_KAFKA_PARTITION_UA
432
439
  DeliveryHandle.register(delivery_handle)
433
440
 
434
- args = [
435
- :int, Rdkafka::Bindings::RD_KAFKA_VTYPE_RKT, :pointer, topic_ref,
436
- :int, Rdkafka::Bindings::RD_KAFKA_VTYPE_MSGFLAGS, :int, Rdkafka::Bindings::RD_KAFKA_MSG_F_COPY,
437
- :int, Rdkafka::Bindings::RD_KAFKA_VTYPE_VALUE, :buffer_in, payload, :size_t, payload_size,
438
- :int, Rdkafka::Bindings::RD_KAFKA_VTYPE_KEY, :buffer_in, key, :size_t, key_size,
439
- :int, Rdkafka::Bindings::RD_KAFKA_VTYPE_PARTITION, :int32, partition,
440
- :int, Rdkafka::Bindings::RD_KAFKA_VTYPE_TIMESTAMP, :int64, raw_timestamp,
441
- :int, Rdkafka::Bindings::RD_KAFKA_VTYPE_OPAQUE, :pointer, delivery_handle
442
- ]
443
-
444
- headers&.each do |key0, value0|
445
- key = key0.to_s
446
- if value0.is_a?(Array)
447
- # Handle array of values per KIP-82
448
- value0.each do |value|
449
- value = value.to_s
441
+ begin
442
+ args = [
443
+ :int, Rdkafka::Bindings::RD_KAFKA_VTYPE_RKT, :pointer, topic_ref,
444
+ :int, Rdkafka::Bindings::RD_KAFKA_VTYPE_MSGFLAGS, :int, Rdkafka::Bindings::RD_KAFKA_MSG_F_COPY,
445
+ :int, Rdkafka::Bindings::RD_KAFKA_VTYPE_VALUE, :buffer_in, payload, :size_t, payload_size,
446
+ :int, Rdkafka::Bindings::RD_KAFKA_VTYPE_KEY, :buffer_in, key, :size_t, key_size,
447
+ :int, Rdkafka::Bindings::RD_KAFKA_VTYPE_PARTITION, :int32, partition,
448
+ :int, Rdkafka::Bindings::RD_KAFKA_VTYPE_TIMESTAMP, :int64, raw_timestamp,
449
+ :int, Rdkafka::Bindings::RD_KAFKA_VTYPE_OPAQUE, :pointer, delivery_handle
450
+ ]
451
+
452
+ headers&.each do |key0, value0|
453
+ key = key0.to_s
454
+ if value0.is_a?(Array)
455
+ # Handle array of values per KIP-82
456
+ value0.each do |value|
457
+ value = value.to_s
458
+ args << :int << Rdkafka::Bindings::RD_KAFKA_VTYPE_HEADER
459
+ args << :string << key
460
+ args << :pointer << value
461
+ args << :size_t << value.bytesize
462
+ end
463
+ else
464
+ # Handle single value
465
+ value = value0.to_s
450
466
  args << :int << Rdkafka::Bindings::RD_KAFKA_VTYPE_HEADER
451
467
  args << :string << key
452
468
  args << :pointer << value
453
469
  args << :size_t << value.bytesize
454
470
  end
455
- else
456
- # Handle single value
457
- value = value0.to_s
458
- args << :int << Rdkafka::Bindings::RD_KAFKA_VTYPE_HEADER
459
- args << :string << key
460
- args << :pointer << value
461
- args << :size_t << value.bytesize
462
471
  end
463
- end
464
472
 
465
- args << :int << Rdkafka::Bindings::RD_KAFKA_VTYPE_END
473
+ args << :int << Rdkafka::Bindings::RD_KAFKA_VTYPE_END
466
474
 
467
- # Produce the message
468
- response = @native_kafka.with_inner do |inner|
469
- Rdkafka::Bindings.rd_kafka_producev(
470
- inner,
471
- *args
472
- )
473
- end
475
+ # Produce the message
476
+ response = @native_kafka.with_inner do |inner|
477
+ Rdkafka::Bindings.rd_kafka_producev(
478
+ inner,
479
+ *args
480
+ )
481
+ end
474
482
 
475
- # Raise error if the produce call was not successful
476
- if response != Rdkafka::Bindings::RD_KAFKA_RESP_ERR_NO_ERROR
483
+ # Raise error if the produce call was not successful
484
+ if response != Rdkafka::Bindings::RD_KAFKA_RESP_ERR_NO_ERROR
485
+ raise RdkafkaError.new(response)
486
+ end
487
+ rescue Exception
477
488
  DeliveryHandle.remove(delivery_handle.to_ptr.address)
478
- raise RdkafkaError.new(response)
489
+ raise
479
490
  end
480
491
 
481
492
  delivery_handle
@@ -517,5 +528,6 @@ module Rdkafka
517
528
  def closed_producer_check(method)
518
529
  raise Rdkafka::ClosedProducerError.new(method) if closed?
519
530
  end
531
+ alias_method :closed_check, :closed_producer_check
520
532
  end
521
533
  end
@@ -2,9 +2,9 @@
2
2
 
3
3
  module Rdkafka
4
4
  # Current rdkafka-ruby gem version
5
- VERSION = "0.27.0"
5
+ VERSION = "0.29.0"
6
6
  # Target librdkafka version to be used
7
- LIBRDKAFKA_VERSION = "2.14.0"
7
+ LIBRDKAFKA_VERSION = "2.14.2"
8
8
  # SHA256 hash of the librdkafka source tarball for verification
9
- LIBRDKAFKA_SOURCE_SHA256 = "c05c03ef00a13a8463fac3e8918c04843c416f11ced58c889d806a88ca92cf99"
9
+ LIBRDKAFKA_SOURCE_SHA256 = "d7eec9c31c817fa44402f679c252dfbf97e4c338a849a25c3579a31fd127beb8"
10
10
  end
data/lib/rdkafka.rb CHANGED
@@ -8,6 +8,7 @@ require "json"
8
8
  require "rdkafka/version"
9
9
  require "rdkafka/helpers/time"
10
10
  require "rdkafka/helpers/oauth"
11
+ require "rdkafka/helpers/metadata"
11
12
  require "rdkafka/defaults"
12
13
  require "rdkafka/abstract_handle"
13
14
  require "rdkafka/admin"
@@ -36,6 +37,17 @@ require "rdkafka/admin/config_binding_result"
36
37
  require "rdkafka/admin/config_resource_binding_result"
37
38
  require "rdkafka/bindings"
38
39
  require "rdkafka/callbacks"
40
+ require "rdkafka/callbacks/base_handler"
41
+ require "rdkafka/callbacks/create_topic_handler"
42
+ require "rdkafka/callbacks/delete_topic_handler"
43
+ require "rdkafka/callbacks/create_partitions_handler"
44
+ require "rdkafka/callbacks/delete_groups_handler"
45
+ require "rdkafka/callbacks/create_acl_handler"
46
+ require "rdkafka/callbacks/delete_acl_handler"
47
+ require "rdkafka/callbacks/describe_acl_handler"
48
+ require "rdkafka/callbacks/describe_configs_handler"
49
+ require "rdkafka/callbacks/incremental_alter_configs_handler"
50
+ require "rdkafka/callbacks/list_offsets_handler"
39
51
  require "rdkafka/config"
40
52
  require "rdkafka/consumer"
41
53
  require "rdkafka/consumer/headers"
data/package-lock.json CHANGED
@@ -286,9 +286,9 @@
286
286
  }
287
287
  },
288
288
  "node_modules/smol-toml": {
289
- "version": "1.6.0",
290
- "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.6.0.tgz",
291
- "integrity": "sha512-4zemZi0HvTnYwLfrpk/CF9LOd9Lt87kAt50GnqhMpyF9U3poDAP2+iukq2bZsO/ufegbYehBkqINbsWxj4l4cw==",
289
+ "version": "1.7.0",
290
+ "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.7.0.tgz",
291
+ "integrity": "sha512-aqVvWoyO21L23mb+drl4RmMXbf6N7FdHjAhTRA9ZBL7apWBgfWC16KjrASI+1p9GAroljyMHj6fK67i0UiTNvQ==",
292
292
  "dev": true,
293
293
  "license": "BSD-3-Clause",
294
294
  "engines": {
@@ -312,9 +312,9 @@
312
312
  }
313
313
  },
314
314
  "node_modules/yaml": {
315
- "version": "2.8.2",
316
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz",
317
- "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==",
315
+ "version": "2.9.0",
316
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz",
317
+ "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==",
318
318
  "dev": true,
319
319
  "license": "ISC",
320
320
  "bin": {
data/rdkafka.gemspec CHANGED
@@ -19,6 +19,7 @@ Gem::Specification.new do |gem|
19
19
  next true if file.start_with?(".")
20
20
  next true if file.start_with?("spec/")
21
21
  next true if file.start_with?("ext/README.md")
22
+ next true if file.start_with?("Gemfile")
22
23
 
23
24
  false
24
25
  end
data/renovate.json CHANGED
@@ -85,13 +85,24 @@
85
85
  "ruby/setup-ruby",
86
86
  "ruby"
87
87
  ],
88
- "groupName": "ruby setup"
88
+ "groupName": "ruby setup",
89
+ "internalChecksFilter": "strict"
90
+ },
91
+ {
92
+ "description": "Let setup-ruby pass age gate before ruby so it is ready when the group PR is created",
93
+ "matchPackageNames": [
94
+ "ruby/setup-ruby"
95
+ ],
96
+ "minimumReleaseAge": "5 days"
89
97
  }
90
98
  ],
91
99
  "labels": [
92
100
  "dependencies"
93
101
  ],
94
102
  "lockFileMaintenance": {
95
- "enabled": true
103
+ "enabled": true,
104
+ "schedule": [
105
+ "before 4am on the first day of the month"
106
+ ]
96
107
  }
97
108
  }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rdkafka
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.27.0
4
+ version: 0.29.0
5
5
  platform: x86_64-linux-gnu
6
6
  authors:
7
7
  - Thijs Cadier
@@ -88,9 +88,6 @@ extensions: []
88
88
  extra_rdoc_files: []
89
89
  files:
90
90
  - CHANGELOG.md
91
- - Gemfile
92
- - Gemfile.lint
93
- - Gemfile.lint.lock
94
91
  - MIT-LICENSE
95
92
  - README.md
96
93
  - Rakefile
@@ -126,6 +123,17 @@ files:
126
123
  - lib/rdkafka/admin/list_offsets_report.rb
127
124
  - lib/rdkafka/bindings.rb
128
125
  - lib/rdkafka/callbacks.rb
126
+ - lib/rdkafka/callbacks/base_handler.rb
127
+ - lib/rdkafka/callbacks/create_acl_handler.rb
128
+ - lib/rdkafka/callbacks/create_partitions_handler.rb
129
+ - lib/rdkafka/callbacks/create_topic_handler.rb
130
+ - lib/rdkafka/callbacks/delete_acl_handler.rb
131
+ - lib/rdkafka/callbacks/delete_groups_handler.rb
132
+ - lib/rdkafka/callbacks/delete_topic_handler.rb
133
+ - lib/rdkafka/callbacks/describe_acl_handler.rb
134
+ - lib/rdkafka/callbacks/describe_configs_handler.rb
135
+ - lib/rdkafka/callbacks/incremental_alter_configs_handler.rb
136
+ - lib/rdkafka/callbacks/list_offsets_handler.rb
129
137
  - lib/rdkafka/config.rb
130
138
  - lib/rdkafka/consumer.rb
131
139
  - lib/rdkafka/consumer/headers.rb
@@ -134,6 +142,7 @@ files:
134
142
  - lib/rdkafka/consumer/topic_partition_list.rb
135
143
  - lib/rdkafka/defaults.rb
136
144
  - lib/rdkafka/error.rb
145
+ - lib/rdkafka/helpers/metadata.rb
137
146
  - lib/rdkafka/helpers/oauth.rb
138
147
  - lib/rdkafka/helpers/time.rb
139
148
  - lib/rdkafka/metadata.rb
@@ -171,7 +180,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
171
180
  - !ruby/object:Gem::Version
172
181
  version: '0'
173
182
  requirements: []
174
- rubygems_version: 4.0.6
183
+ rubygems_version: 4.0.10
175
184
  specification_version: 4
176
185
  summary: The rdkafka gem is a modern Kafka client library for Ruby based on librdkafka.
177
186
  It wraps the production-ready C client using the ffi gem and targets Kafka 1.0+
data/Gemfile DELETED
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source "https://rubygems.org"
4
-
5
- gemspec
6
-
7
- group :development do
8
- gem "ostruct"
9
- gem "pry"
10
- gem "rspec"
11
- gem "simplecov"
12
- gem "warning"
13
- end
data/Gemfile.lint DELETED
@@ -1,14 +0,0 @@
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-rspec"
13
- gem "standard-rspec"
14
- gem "rubocop-thread_safety"
data/Gemfile.lint.lock DELETED
@@ -1,123 +0,0 @@
1
- GEM
2
- remote: https://rubygems.org/
3
- specs:
4
- ast (2.4.3)
5
- json (2.18.0)
6
- language_server-protocol (3.17.0.5)
7
- lint_roller (1.1.0)
8
- parallel (1.27.0)
9
- parser (3.3.10.1)
10
- ast (~> 2.4.1)
11
- racc
12
- prism (1.8.0)
13
- racc (1.8.1)
14
- rainbow (3.1.1)
15
- regexp_parser (2.11.3)
16
- rubocop (1.82.1)
17
- json (~> 2.3)
18
- language_server-protocol (~> 3.17.0.2)
19
- lint_roller (~> 1.1.0)
20
- parallel (~> 1.10)
21
- parser (>= 3.3.0.2)
22
- rainbow (>= 2.2.2, < 4.0)
23
- regexp_parser (>= 2.9.3, < 3.0)
24
- rubocop-ast (>= 1.48.0, < 2.0)
25
- ruby-progressbar (~> 1.7)
26
- unicode-display_width (>= 2.4.0, < 4.0)
27
- rubocop-ast (1.49.0)
28
- parser (>= 3.3.7.2)
29
- prism (~> 1.7)
30
- rubocop-capybara (2.22.1)
31
- lint_roller (~> 1.1)
32
- rubocop (~> 1.72, >= 1.72.1)
33
- rubocop-factory_bot (2.28.0)
34
- lint_roller (~> 1.1)
35
- rubocop (~> 1.72, >= 1.72.1)
36
- rubocop-performance (1.26.1)
37
- lint_roller (~> 1.1)
38
- rubocop (>= 1.75.0, < 2.0)
39
- rubocop-ast (>= 1.47.1, < 2.0)
40
- rubocop-rspec (3.9.0)
41
- lint_roller (~> 1.1)
42
- rubocop (~> 1.81)
43
- rubocop-rspec_rails (2.32.0)
44
- lint_roller (~> 1.1)
45
- rubocop (~> 1.72, >= 1.72.1)
46
- rubocop-rspec (~> 3.5)
47
- rubocop-thread_safety (0.7.3)
48
- lint_roller (~> 1.1)
49
- rubocop (~> 1.72, >= 1.72.1)
50
- rubocop-ast (>= 1.44.0, < 2.0)
51
- ruby-progressbar (1.13.0)
52
- standard (1.53.0)
53
- language_server-protocol (~> 3.17.0.2)
54
- lint_roller (~> 1.0)
55
- rubocop (~> 1.82.0)
56
- standard-custom (~> 1.0.0)
57
- standard-performance (~> 1.8)
58
- standard-custom (1.0.2)
59
- lint_roller (~> 1.0)
60
- rubocop (~> 1.50)
61
- standard-performance (1.9.0)
62
- lint_roller (~> 1.1)
63
- rubocop-performance (~> 1.26.0)
64
- standard-rspec (0.3.1)
65
- lint_roller (>= 1.0)
66
- rubocop-capybara (~> 2.22)
67
- rubocop-factory_bot (~> 2.27)
68
- rubocop-rspec (~> 3.5)
69
- rubocop-rspec_rails (~> 2.31)
70
- unicode-display_width (3.2.0)
71
- unicode-emoji (~> 4.1)
72
- unicode-emoji (4.2.0)
73
- yard (0.9.38)
74
- yard-lint (1.4.0)
75
- yard (~> 0.9)
76
- zeitwerk (~> 2.6)
77
- zeitwerk (2.7.4)
78
-
79
- PLATFORMS
80
- ruby
81
- x86_64-linux
82
-
83
- DEPENDENCIES
84
- rubocop-performance
85
- rubocop-rspec
86
- rubocop-thread_safety
87
- standard
88
- standard-performance
89
- standard-rspec
90
- yard-lint
91
-
92
- CHECKSUMS
93
- ast (2.4.3) sha256=954615157c1d6a382bc27d690d973195e79db7f55e9765ac7c481c60bdb4d383
94
- json (2.18.0) sha256=b10506aee4183f5cf49e0efc48073d7b75843ce3782c68dbeb763351c08fd505
95
- language_server-protocol (3.17.0.5) sha256=fd1e39a51a28bf3eec959379985a72e296e9f9acfce46f6a79d31ca8760803cc
96
- lint_roller (1.1.0) sha256=2c0c845b632a7d172cb849cc90c1bce937a28c5c8ccccb50dfd46a485003cc87
97
- parallel (1.27.0) sha256=4ac151e1806b755fb4e2dc2332cbf0e54f2e24ba821ff2d3dcf86bf6dc4ae130
98
- parser (3.3.10.1) sha256=06f6a725d2cd91e5e7f2b7c32ba143631e1f7c8ae2fb918fc4cebec187e6a688
99
- prism (1.8.0) sha256=84453a16ef5530ea62c5f03ec16b52a459575ad4e7b9c2b360fd8ce2c39c1254
100
- racc (1.8.1) sha256=4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f
101
- rainbow (3.1.1) sha256=039491aa3a89f42efa1d6dec2fc4e62ede96eb6acd95e52f1ad581182b79bc6a
102
- regexp_parser (2.11.3) sha256=ca13f381a173b7a93450e53459075c9b76a10433caadcb2f1180f2c741fc55a4
103
- rubocop (1.82.1) sha256=09f1a6a654a960eda767aebea33e47603080f8e9c9a3f019bf9b94c9cab5e273
104
- rubocop-ast (1.49.0) sha256=49c3676d3123a0923d333e20c6c2dbaaae2d2287b475273fddee0c61da9f71fd
105
- rubocop-capybara (2.22.1) sha256=ced88caef23efea53f46e098ff352f8fc1068c649606ca75cb74650970f51c0c
106
- rubocop-factory_bot (2.28.0) sha256=4b17fc02124444173317e131759d195b0d762844a71a29fe8139c1105d92f0cb
107
- rubocop-performance (1.26.1) sha256=cd19b936ff196df85829d264b522fd4f98b6c89ad271fa52744a8c11b8f71834
108
- rubocop-rspec (3.9.0) sha256=8fa70a3619408237d789aeecfb9beef40576acc855173e60939d63332fdb55e2
109
- rubocop-rspec_rails (2.32.0) sha256=4a0d641c72f6ebb957534f539d9d0a62c47abd8ce0d0aeee1ef4701e892a9100
110
- rubocop-thread_safety (0.7.3) sha256=067cdd52fbf5deffc18995437e45b5194236eaff4f71de3375a1f6052e48f431
111
- ruby-progressbar (1.13.0) sha256=80fc9c47a9b640d6834e0dc7b3c94c9df37f08cb072b7761e4a71e22cff29b33
112
- standard (1.53.0) sha256=f3c9493385db7079d0abce6f7582f553122156997b81258cd361d3480eeacf9c
113
- standard-custom (1.0.2) sha256=424adc84179a074f1a2a309bb9cf7cd6bfdb2b6541f20c6bf9436c0ba22a652b
114
- standard-performance (1.9.0) sha256=49483d31be448292951d80e5e67cdcb576c2502103c7b40aec6f1b6e9c88e3f2
115
- standard-rspec (0.3.1) sha256=67bc957281cacf24f0d88235ca1bf28a8995265b1a60eb519cd0451858b56a22
116
- unicode-display_width (3.2.0) sha256=0cdd96b5681a5949cdbc2c55e7b420facae74c4aaf9a9815eee1087cb1853c42
117
- unicode-emoji (4.2.0) sha256=519e69150f75652e40bf736106cfbc8f0f73aa3fb6a65afe62fefa7f80b0f80f
118
- yard (0.9.38) sha256=721fb82afb10532aa49860655f6cc2eaa7130889df291b052e1e6b268283010f
119
- yard-lint (1.4.0) sha256=7dd88fbb08fd77cb840bea899d58812817b36d92291b5693dd0eeb3af9f91f0f
120
- zeitwerk (2.7.4) sha256=2bef90f356bdafe9a6c2bd32bcd804f83a4f9b8bc27f3600fff051eb3edcec8b
121
-
122
- BUNDLED WITH
123
- 4.0.3