sbmt-kafka_producer 2.2.3 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1d5ca361cbc4f800037931ef6cc82dcc8d2ffa9bf67d6963d4747a6a140ad273
4
- data.tar.gz: 6bfdeb2245fe9b02c76f63e684f438afb3842f2ff7e0655301d668af98d0013c
3
+ metadata.gz: '01390ee8af51126fefcebfc7a1cdebc8c61cff6660d064568b01e1508f1bc616'
4
+ data.tar.gz: 1402bc1e9e5b51ff2998411b6154711b9af3f583c539cab01deae04c9d8e29fc
5
5
  SHA512:
6
- metadata.gz: 1366c9c4c2f334a91ec43aaa56027e5bfd6e36d225642d4d51fb5874194baea56c14b259df054fa70a5e7cbc739c3333e49079c09b7249e2498e10fcff74e712
7
- data.tar.gz: ba5693175d5d7187e32875ab7c08f504a4ebe274c054aee2f152ef6a5fb5086bba47350c1b12f37e520a11f72d93f869851dc704765eac7e3fcb135dcfe6e516
6
+ metadata.gz: db848372986b9b6107b3911dad1f36c62f6532cc25d22d573bd2c1ab4afb37e4e3c27616a2ad70611c8f5006e00bf0dd6e36821cdc91acf96d010f3f22a741fe
7
+ data.tar.gz: 55082c9462c97377276ebc9c1b3406a409993b737828a0a13e72bd1c7eb09263ad68f61678b59b21178c6ada97665116b27d6fd09094b5e570f3546ac8ed9855
data/Appraisals CHANGED
@@ -3,10 +3,10 @@
3
3
  # See compatibility table at https://www.fastruby.io/blog/ruby/rails/versions/compatibility-table.html
4
4
 
5
5
  versions_map = {
6
- "6.0" => %w[2.7],
7
6
  "6.1" => %w[2.7 3.0],
8
7
  "7.0" => %w[3.1],
9
- "7.1" => %w[3.2, 3.3]
8
+ "7.1" => %w[3.2],
9
+ "7.2" => %w[3.3]
10
10
  }
11
11
 
12
12
  current_ruby_version = RUBY_VERSION.split(".").first(2).join(".")
data/CHANGELOG.md CHANGED
@@ -13,6 +13,20 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
13
13
 
14
14
  ### Fixed
15
15
 
16
+ ## [3.0.0] - 2024-08-27
17
+
18
+ ## BREAKING
19
+
20
+ - Drop support for Ruby 2.7
21
+ - Drop support for Rails 6.0
22
+ - Add support for Waterdrop 2.7
23
+ - `wait_timeout` configuration no longer deeded
24
+ - All time-related values are now configured in milliseconds: `connect_timeout`, `ack_timeout`, `retry_backoff`, `max_wait_timeout`, `wait_on_queue_full_timeout`
25
+
26
+ ## Added
27
+
28
+ - Add `message_timeout` configuration
29
+
16
30
  ## [2.2.3] - 2024-06-20
17
31
 
18
32
  ### Fixed
data/Gemfile CHANGED
@@ -3,6 +3,3 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gemspec
6
-
7
- # FIXME: remove this after drop support for Ruby 2.7
8
- gem "ffi", "< 1.17"
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2024 SberMarket Tech
3
+ Copyright (c) 2024 Kuper Tech
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -1,9 +1,9 @@
1
1
  [![Gem Version](https://badge.fury.io/rb/sbmt-kafka_producer.svg)](https://badge.fury.io/rb/sbmt-kafka_producer)
2
- [![Build Status](https://github.com/SberMarket-Tech/sbmt-kafka_producer/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/SberMarket-Tech/sbmt-kafka_producer/actions?query=branch%3Amaster)
2
+ [![Build Status](https://github.com/Kuper-Tech/sbmt-kafka_producer/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/Kuper-Tech/sbmt-kafka_producer/actions?query=branch%3Amaster)
3
3
 
4
4
  # Sbmt-KafkaProducer
5
5
 
6
- This gem is used to produce Kafka messages. It is a wrapper over the [waterdrop](https://github.com/karafka/waterdrop) gem, and it is recommended for use as a transport with the [sbmt-outbox](https://github.com/SberMarket-Tech/sbmt-outbox) gem.
6
+ This gem is used to produce Kafka messages. It is a wrapper over the [waterdrop](https://github.com/karafka/waterdrop) gem, and it is recommended for use as a transport with the [sbmt-outbox](https://github.com/Kuper-Tech/sbmt-outbox) gem.
7
7
 
8
8
  ## Installation
9
9
 
@@ -21,7 +21,7 @@ bundle install
21
21
 
22
22
  ## Demo
23
23
 
24
- Learn how to use this gem and how it works with Ruby on Rails at here https://github.com/SberMarket-Tech/outbox-example-apps
24
+ Learn how to use this gem and how it works with Ruby on Rails at here https://github.com/Kuper-Tech/outbox-example-apps
25
25
 
26
26
  ## Auto configuration
27
27
 
@@ -49,7 +49,7 @@ As the result, a sync producer will be created.
49
49
 
50
50
  ### Outbox producer
51
51
 
52
- To generate an Outbox producer for use with Gem [sbmt-Outbox](https://github.com/SberMarket-Tech/sbmt-outbox), run the following command:
52
+ To generate an Outbox producer for use with Gem [sbmt-Outbox](https://github.com/Kuper-Tech/sbmt-outbox), run the following command:
53
53
 
54
54
  ```shell
55
55
  rails g kafka_producer:outbox_producer SomeOutboxItem
@@ -66,20 +66,20 @@ default: &default
66
66
  # see more options at https://github.com/karafka/waterdrop/blob/master/lib/waterdrop/config.rb
67
67
  wait_on_queue_full: true
68
68
  max_payload_size: 1000012
69
- max_wait_timeout: 5
70
- wait_timeout: 0.005
69
+ max_wait_timeout_ms: 60000
71
70
  auth:
72
71
  kind: plaintext
73
72
  kafka:
74
73
  servers: "kafka:9092" # required
75
74
  max_retries: 2 # optional, default: 2
76
75
  required_acks: -1 # optional, default: -1
77
- ack_timeout: 1 # in seconds, optional, default: 1
78
- retry_backoff: 1 # in seconds, optional, default: 1
79
- connect_timeout: 1 # in seconds, optional, default: 1
76
+ ack_timeout: 1000 # in milliseconds, optional, default: 1000
77
+ retry_backoff: 1000 # in milliseconds, optional, default: 1000
78
+ connect_timeout: 2000 # in milliseconds, optional, default: 2000
79
+ message_timeout: 55000 # in milliseconds, optional, default: 55000
80
80
  kafka_config: # low-level custom Kafka options
81
81
  queue.buffering.max.messages: 1
82
- queue.buffering.max.ms: 10_000
82
+ queue.buffering.max.ms: 10000
83
83
 
84
84
  development:
85
85
  <<: *default
data/dip.yml CHANGED
@@ -1,7 +1,7 @@
1
1
  version: '7'
2
2
 
3
3
  environment:
4
- RUBY_VERSION: '3.2'
4
+ RUBY_VERSION: '3.3'
5
5
 
6
6
  compose:
7
7
  files:
@@ -35,14 +35,14 @@ interaction:
35
35
  subcommands:
36
36
  all:
37
37
  command: bundle exec appraisal rspec
38
- rails-6.0:
39
- command: bundle exec appraisal rails-6.0 rspec
40
38
  rails-6.1:
41
39
  command: bundle exec appraisal rails-6.1 rspec
42
40
  rails-7.0:
43
41
  command: bundle exec appraisal rails-7.0 rspec
44
42
  rails-7.1:
45
43
  command: bundle exec appraisal rails-7.1 rspec
44
+ rails-7.2:
45
+ command: bundle exec appraisal rails-7.2 rspec
46
46
 
47
47
  rubocop:
48
48
  description: Run Ruby linter
@@ -2,8 +2,7 @@ default: &default
2
2
  deliver: true
3
3
  wait_on_queue_full: true
4
4
  max_payload_size: 1000012
5
- max_wait_timeout: 5
6
- wait_timeout: 0.005
5
+ max_wait_timeout: 60000
7
6
  ignore_kafka_error: true
8
7
 
9
8
  auth:
@@ -14,11 +13,12 @@ default: &default
14
13
 
15
14
  kafka:
16
15
  servers: "kafka:9092"
16
+ connect_timeout: 2000
17
+ message_timeout: 55000
18
+ ack_timeout: 10000
19
+ retry_backoff: 10000
17
20
  max_retries: 2
18
21
  required_acks: -1
19
- ack_timeout: 1
20
- retry_backoff: 1
21
- connect_timeout: 1
22
22
 
23
23
  development:
24
24
  <<: *default
@@ -9,27 +9,36 @@ module Sbmt
9
9
  # srv1:port1,srv2:port2,...
10
10
  SERVERS_REGEXP = /^[a-z\d.\-:]+(,[a-z\d.\-:]+)*$/.freeze
11
11
 
12
+ # https://github.com/karafka/waterdrop/blob/master/lib/waterdrop/config.rb
13
+ KAFKA_CONFIG_KEYS_REMAP = {
14
+ servers: :"bootstrap.servers",
15
+ connect_timeout: :"socket.connection.setup.timeout.ms",
16
+ message_timeout: :"message.timeout.ms",
17
+ ack_timeout: :"request.timeout.ms",
18
+ retry_backoff: :"retry.backoff.ms",
19
+ max_retries: :"message.send.max.retries",
20
+ required_acks: :"request.required.acks"
21
+ }
22
+
12
23
  attribute :servers, Sbmt::KafkaProducer::Types::String.constrained(format: SERVERS_REGEXP)
13
24
 
14
25
  # defaults are rdkafka's
15
26
  # see https://github.com/confluentinc/librdkafka/blob/master/CONFIGURATION.md
16
- attribute :connect_timeout, Sbmt::KafkaProducer::Types::Coercible::Integer.optional.default(1)
17
- attribute :ack_timeout, Sbmt::KafkaProducer::Types::Coercible::Integer.optional.default(1)
27
+ attribute :connect_timeout, Sbmt::KafkaProducer::Types::Coercible::Integer.optional.default(2000)
28
+ attribute :ack_timeout, Sbmt::KafkaProducer::Types::Coercible::Integer.optional.default(1000)
29
+ attribute :retry_backoff, Sbmt::KafkaProducer::Types::Coercible::Integer.optional.default(1000)
30
+ attribute :message_timeout, Sbmt::KafkaProducer::Types::Coercible::Integer.optional.default(55000)
18
31
  attribute :required_acks, Sbmt::KafkaProducer::Types::Coercible::Integer.optional.default(-1)
19
32
  attribute :max_retries, Sbmt::KafkaProducer::Types::Coercible::Integer.optional.default(2)
20
- attribute :retry_backoff, Sbmt::KafkaProducer::Types::Coercible::Integer.optional.default(1)
21
33
 
22
34
  attribute :kafka_config, Sbmt::KafkaProducer::Types::ConfigAttrs.optional.default({}.freeze)
23
35
 
24
36
  def to_kafka_options
25
- kafka_config.merge(
26
- "bootstrap.servers": servers,
27
- "socket.connection.setup.timeout.ms": connect_timeout.to_f * 1000,
28
- "request.timeout.ms": ack_timeout.to_f * 1000,
29
- "request.required.acks": required_acks,
30
- "message.send.max.retries": max_retries,
31
- "retry.backoff.ms": retry_backoff.to_f * 1000
32
- ).symbolize_keys
37
+ cfg = KAFKA_CONFIG_KEYS_REMAP.each_with_object({}) do |(key, kafka_key), hash|
38
+ hash[kafka_key] = self[key]
39
+ end
40
+
41
+ kafka_config.symbolize_keys.merge(cfg)
33
42
  end
34
43
  end
35
44
  end
@@ -28,7 +28,7 @@ module Sbmt
28
28
  config_name :kafka_producer
29
29
 
30
30
  attr_config :ignore_kafka_error, :deliver, :wait_on_queue_full,
31
- :max_payload_size, :max_wait_timeout, :wait_timeout,
31
+ :max_payload_size, :max_wait_timeout,
32
32
  :wait_on_queue_full_timeout,
33
33
  auth: {}, kafka: {},
34
34
  logger_class: "::Sbmt::KafkaProducer::Logger",
@@ -37,7 +37,7 @@ module Sbmt
37
37
  coerce_types ignore_kafka_error: :boolean,
38
38
  deliver: :boolean, wait_on_queue_full: :boolean,
39
39
  max_payload_size: :integer, max_wait_timeout: :integer,
40
- wait_timeout: :float, wait_on_queue_full_timeout: :float
40
+ wait_on_queue_full_timeout: :integer
41
41
  coerce_types kafka: coerce_to(Kafka)
42
42
  coerce_types auth: coerce_to(Auth)
43
43
 
@@ -15,13 +15,13 @@ module Sbmt
15
15
  end
16
16
  end
17
17
 
18
- def build(kafka = {})
19
- return default_client if kafka.empty?
18
+ def build(kafka_options = {})
19
+ return default_client if kafka_options.empty?
20
20
 
21
- fetch_client(kafka) do
21
+ fetch_client(kafka_options) do
22
22
  ConnectionPool::Wrapper.new do
23
23
  WaterDrop::Producer.new do |config|
24
- configure_client(config, kafka)
24
+ configure_client(config, kafka_options)
25
25
  end
26
26
  end
27
27
  end
@@ -29,8 +29,8 @@ module Sbmt
29
29
 
30
30
  private
31
31
 
32
- def fetch_client(kafka)
33
- key = Digest::SHA1.hexdigest(Marshal.dump(kafka))
32
+ def fetch_client(kafka_options)
33
+ key = Digest::SHA1.hexdigest(Marshal.dump(kafka_options))
34
34
  return CLIENTS_REGISTRY[key] if CLIENTS_REGISTRY.key?(key)
35
35
 
36
36
  CLIENTS_REGISTRY_MUTEX.synchronize do
@@ -49,22 +49,16 @@ module Sbmt
49
49
  kafka_config.wait_on_queue_full = config.wait_on_queue_full if config.wait_on_queue_full.present?
50
50
  kafka_config.max_payload_size = config.max_payload_size if config.max_payload_size.present?
51
51
  kafka_config.max_wait_timeout = config.max_wait_timeout if config.max_wait_timeout.present?
52
- kafka_config.wait_timeout = config.wait_timeout if config.wait_timeout.present?
53
52
  kafka_config.wait_on_queue_full_timeout = config.wait_on_queue_full_timeout if config.wait_on_queue_full_timeout.present?
54
53
 
55
54
  kafka_config.monitor.subscribe(config.metrics_listener_class.classify.constantize.new)
56
55
  end
57
56
 
58
57
  def custom_kafka_config(kafka_options)
59
- result = {}
60
-
61
- result["socket.connection.setup.timeout.ms"] = kafka_options["connect_timeout"].to_f * 1000 if kafka_options.key?("connect_timeout")
62
- result["request.timeout.ms"] = kafka_options["ack_timeout"].to_f * 1000 if kafka_options.key?("ack_timeout")
63
- result["request.required.acks"] = kafka_options["required_acks"] if kafka_options.key?("required_acks")
64
- result["message.send.max.retries"] = kafka_options["max_retries"] if kafka_options.key?("max_retries")
65
- result["retry.backoff.ms"] = kafka_options["retry_backoff"].to_f * 1000 if kafka_options.key?("retry_backoff")
66
-
67
- result
58
+ kafka_options = kafka_options.symbolize_keys
59
+ short_options = kafka_options.extract!(*Config::Kafka::KAFKA_CONFIG_KEYS_REMAP.keys)
60
+ cfg = short_options.transform_keys(Config::Kafka::KAFKA_CONFIG_KEYS_REMAP)
61
+ kafka_options.merge!(cfg)
68
62
  end
69
63
 
70
64
  def config
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Sbmt
4
4
  module KafkaProducer
5
- VERSION = "2.2.3"
5
+ VERSION = "3.0.0"
6
6
  end
7
7
  end
@@ -6,12 +6,12 @@ Gem::Specification.new do |spec|
6
6
  spec.name = "sbmt-kafka_producer"
7
7
  spec.license = "MIT"
8
8
  spec.version = Sbmt::KafkaProducer::VERSION
9
- spec.authors = ["Sbermarket Ruby-Platform Team"]
9
+ spec.authors = ["Kuper Ruby-Platform Team"]
10
10
 
11
11
  spec.summary = "Ruby gem for producing Kafka messages"
12
12
  spec.description = "This gem is used for producing Kafka messages. It represents a wrapper over Waterdrop gem and is recommended for using as a transport with sbmt-outbox"
13
- spec.homepage = "https://github.com/SberMarket-Tech/sbmt-kafka_producer"
14
- spec.required_ruby_version = ">= 2.7.0"
13
+ spec.homepage = "https://github.com/Kuper-Tech/sbmt-kafka_producer"
14
+ spec.required_ruby_version = ">= 3.0.0"
15
15
 
16
16
  spec.metadata["allowed_push_host"] = "https://rubygems.org"
17
17
 
@@ -32,12 +32,12 @@ Gem::Specification.new do |spec|
32
32
  spec.require_paths = ["lib"]
33
33
 
34
34
  spec.add_dependency "anyway_config", "~> 2.4"
35
- spec.add_dependency "connection_pool"
35
+ spec.add_dependency "connection_pool", "~> 2.0"
36
36
  spec.add_dependency "dry-initializer", "~> 3.0"
37
- spec.add_dependency "dry-struct"
38
- spec.add_dependency "waterdrop", "~> 2.5", "< 2.7" # BREAKING: undefined method `wait_timeout='' for #<Karafka::Core::Configurable::Node`
37
+ spec.add_dependency "dry-struct", "~> 1.5"
38
+ spec.add_dependency "waterdrop", "~> 2.7", "< 2.8"
39
39
  spec.add_dependency "zeitwerk", "~> 2.6"
40
- spec.add_dependency "yabeda", ">= 0.11"
40
+ spec.add_dependency "yabeda", "~> 0.11"
41
41
 
42
42
  spec.add_development_dependency "appraisal", ">= 2.4"
43
43
  spec.add_development_dependency "bundler", ">= 2.1"
@@ -47,7 +47,7 @@ Gem::Specification.new do |spec|
47
47
  spec.add_development_dependency "opentelemetry-common", ">= 0.17.0"
48
48
  spec.add_development_dependency "opentelemetry-instrumentation-base", ">= 0.17.0"
49
49
  spec.add_development_dependency "rake", ">= 13.0"
50
- spec.add_development_dependency "rails", ">= 6.0"
50
+ spec.add_development_dependency "rails", ">= 6.1"
51
51
  spec.add_development_dependency "rspec", ">= 3.0"
52
52
  spec.add_development_dependency "rspec_junit_formatter", ">= 0.6"
53
53
  spec.add_development_dependency "rspec-rails", ">= 4.0"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sbmt-kafka_producer
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.3
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
- - Sbermarket Ruby-Platform Team
7
+ - Kuper Ruby-Platform Team
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-06-20 00:00:00.000000000 Z
11
+ date: 2024-08-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: anyway_config
@@ -28,16 +28,16 @@ dependencies:
28
28
  name: connection_pool
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: '2.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: '2.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: dry-initializer
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -56,36 +56,36 @@ dependencies:
56
56
  name: dry-struct
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: '1.5'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: '1.5'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: waterdrop
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '2.5'
75
+ version: '2.7'
76
76
  - - "<"
77
77
  - !ruby/object:Gem::Version
78
- version: '2.7'
78
+ version: '2.8'
79
79
  type: :runtime
80
80
  prerelease: false
81
81
  version_requirements: !ruby/object:Gem::Requirement
82
82
  requirements:
83
83
  - - "~>"
84
84
  - !ruby/object:Gem::Version
85
- version: '2.5'
85
+ version: '2.7'
86
86
  - - "<"
87
87
  - !ruby/object:Gem::Version
88
- version: '2.7'
88
+ version: '2.8'
89
89
  - !ruby/object:Gem::Dependency
90
90
  name: zeitwerk
91
91
  requirement: !ruby/object:Gem::Requirement
@@ -104,14 +104,14 @@ dependencies:
104
104
  name: yabeda
105
105
  requirement: !ruby/object:Gem::Requirement
106
106
  requirements:
107
- - - ">="
107
+ - - "~>"
108
108
  - !ruby/object:Gem::Version
109
109
  version: '0.11'
110
110
  type: :runtime
111
111
  prerelease: false
112
112
  version_requirements: !ruby/object:Gem::Requirement
113
113
  requirements:
114
- - - ">="
114
+ - - "~>"
115
115
  - !ruby/object:Gem::Version
116
116
  version: '0.11'
117
117
  - !ruby/object:Gem::Dependency
@@ -232,14 +232,14 @@ dependencies:
232
232
  requirements:
233
233
  - - ">="
234
234
  - !ruby/object:Gem::Version
235
- version: '6.0'
235
+ version: '6.1'
236
236
  type: :development
237
237
  prerelease: false
238
238
  version_requirements: !ruby/object:Gem::Requirement
239
239
  requirements:
240
240
  - - ">="
241
241
  - !ruby/object:Gem::Version
242
- version: '6.0'
242
+ version: '6.1'
243
243
  - !ruby/object:Gem::Dependency
244
244
  name: rspec
245
245
  requirement: !ruby/object:Gem::Requirement
@@ -402,14 +402,14 @@ files:
402
402
  - lib/sbmt/kafka_producer/yabeda_configurer.rb
403
403
  - rubocop/rspec.yml
404
404
  - sbmt-kafka_producer.gemspec
405
- homepage: https://github.com/SberMarket-Tech/sbmt-kafka_producer
405
+ homepage: https://github.com/Kuper-Tech/sbmt-kafka_producer
406
406
  licenses:
407
407
  - MIT
408
408
  metadata:
409
409
  allowed_push_host: https://rubygems.org
410
- homepage_uri: https://github.com/SberMarket-Tech/sbmt-kafka_producer
411
- source_code_uri: https://github.com/SberMarket-Tech/sbmt-kafka_producer
412
- changelog_uri: https://github.com/SberMarket-Tech/sbmt-kafka_producer/blob/master/CHANGELOG.md
410
+ homepage_uri: https://github.com/Kuper-Tech/sbmt-kafka_producer
411
+ source_code_uri: https://github.com/Kuper-Tech/sbmt-kafka_producer
412
+ changelog_uri: https://github.com/Kuper-Tech/sbmt-kafka_producer/blob/master/CHANGELOG.md
413
413
  rubygems_mfa_required: 'false'
414
414
  post_install_message:
415
415
  rdoc_options: []
@@ -419,14 +419,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
419
419
  requirements:
420
420
  - - ">="
421
421
  - !ruby/object:Gem::Version
422
- version: 2.7.0
422
+ version: 3.0.0
423
423
  required_rubygems_version: !ruby/object:Gem::Requirement
424
424
  requirements:
425
425
  - - ">="
426
426
  - !ruby/object:Gem::Version
427
427
  version: '0'
428
428
  requirements: []
429
- rubygems_version: 3.5.3
429
+ rubygems_version: 3.5.11
430
430
  signing_key:
431
431
  specification_version: 4
432
432
  summary: Ruby gem for producing Kafka messages