sbmt-kafka_producer 2.2.3 → 3.0.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 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