sbmt-kafka_producer 2.2.3 → 3.1.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 +4 -4
 - data/Appraisals +2 -2
 - data/CHANGELOG.md +24 -0
 - data/Gemfile +0 -3
 - data/LICENSE +1 -1
 - data/README.md +10 -10
 - data/dip.yml +3 -3
 - data/lib/generators/kafka_producer/install/templates/kafka_producer.yml +5 -5
 - data/lib/sbmt/kafka_producer/base_producer.rb +44 -6
 - data/lib/sbmt/kafka_producer/config/kafka.rb +20 -11
 - data/lib/sbmt/kafka_producer/config/producer.rb +2 -2
 - data/lib/sbmt/kafka_producer/kafka_client_factory.rb +10 -16
 - data/lib/sbmt/kafka_producer/logger.rb +4 -0
 - data/lib/sbmt/kafka_producer/testing/configure_producer_client.rb +3 -1
 - data/lib/sbmt/kafka_producer/version.rb +1 -1
 - data/sbmt-kafka_producer.gemspec +8 -8
 - metadata +25 -25
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: b9d0ac5904cd82c25700683f5b2955dd4b115328c6f854af93a4532407af48a2
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: af80b9874b6161f01b78e219a694850ab44b5cf234388d6a66ea0350af31e3a8
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 309463f869927645071f9cfa27ac92c0d10bb044f1ff9441ef3de54115fc05f2ea7286678acd98838278c0011fc047ec43a49408530c86ef18e626b54119ef84
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: f823b0dfba4f627953e25802d18bfe342646912a7e5c19285e8901b7c7d15512b37e114b0ee87bfb1c2de481abeab604b753d309ec96f8572c2dcdc1749f02d1
         
     | 
    
        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, 
     | 
| 
      
 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,30 @@ and this project adheres to [Semantic Versioning](http://semver.org/). 
     | 
|
| 
       13 
13 
     | 
    
         | 
| 
       14 
14 
     | 
    
         
             
            ### Fixed
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
      
 16 
     | 
    
         
            +
            ## [3.1.0] - 2024-09-13
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            ### Added
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
            - For synchronous messages and errors, we place logs in tags
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
            ### Fixed
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            - Fixed mock for tests
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            ## [3.0.0] - 2024-08-27
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
            ## BREAKING
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
            - Drop support for Ruby 2.7
         
     | 
| 
      
 31 
     | 
    
         
            +
            - Drop support for Rails 6.0
         
     | 
| 
      
 32 
     | 
    
         
            +
            - Add support for Waterdrop 2.7
         
     | 
| 
      
 33 
     | 
    
         
            +
            - `wait_timeout` configuration no longer deeded
         
     | 
| 
      
 34 
     | 
    
         
            +
            - All time-related values are now configured in milliseconds: `connect_timeout`, `ack_timeout`, `retry_backoff`, `max_wait_timeout`, `wait_on_queue_full_timeout`
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
            ## Added
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
            - Add `message_timeout` configuration
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
       16 
40 
     | 
    
         
             
            ## [2.2.3] - 2024-06-20
         
     | 
| 
       17 
41 
     | 
    
         | 
| 
       18 
42 
     | 
    
         
             
            ### Fixed
         
     | 
    
        data/Gemfile
    CHANGED
    
    
    
        data/LICENSE
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | 
         @@ -1,9 +1,9 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            [](https://badge.fury.io/rb/sbmt-kafka_producer)
         
     | 
| 
       2 
     | 
    
         
            -
            [](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/ 
     | 
| 
      
 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/ 
     | 
| 
      
 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/ 
     | 
| 
      
 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 
     | 
    
         
            -
               
     | 
| 
       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:  
     | 
| 
       78 
     | 
    
         
            -
                retry_backoff:  
     | 
| 
       79 
     | 
    
         
            -
                connect_timeout:  
     | 
| 
      
 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:  
     | 
| 
      
 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. 
     | 
| 
      
 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:  
     | 
| 
       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
         
     | 
| 
         @@ -5,14 +5,18 @@ module Sbmt 
     | 
|
| 
       5 
5 
     | 
    
         
             
                class BaseProducer
         
     | 
| 
       6 
6 
     | 
    
         
             
                  extend Dry::Initializer
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
      
 8 
     | 
    
         
            +
                  MSG_SUCCESS = "Message has been successfully sent to Kafka"
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
       8 
10 
     | 
    
         
             
                  option :client, default: -> { KafkaClientFactory.default_client }
         
     | 
| 
       9 
11 
     | 
    
         
             
                  option :topic
         
     | 
| 
       10 
12 
     | 
    
         | 
| 
       11 
13 
     | 
    
         
             
                  def sync_publish!(payload, options = {})
         
     | 
| 
       12 
     | 
    
         
            -
                    report = around_publish do
         
     | 
| 
       13 
     | 
    
         
            -
                       
     | 
| 
      
 14 
     | 
    
         
            +
                    report, produce_duration = around_publish do
         
     | 
| 
      
 15 
     | 
    
         
            +
                      measure_time do
         
     | 
| 
      
 16 
     | 
    
         
            +
                        client.produce_sync(payload: payload, **options.merge(topic: topic))
         
     | 
| 
      
 17 
     | 
    
         
            +
                      end
         
     | 
| 
       14 
18 
     | 
    
         
             
                    end
         
     | 
| 
       15 
     | 
    
         
            -
                    log_success(report)
         
     | 
| 
      
 19 
     | 
    
         
            +
                    log_success(report, produce_duration)
         
     | 
| 
       16 
20 
     | 
    
         
             
                    true
         
     | 
| 
       17 
21 
     | 
    
         
             
                  end
         
     | 
| 
       18 
22 
     | 
    
         | 
| 
         @@ -78,12 +82,19 @@ module Sbmt 
     | 
|
| 
       78 
82 
     | 
    
         
             
                  def log_error(error)
         
     | 
| 
       79 
83 
     | 
    
         
             
                    return true if ignore_kafka_errors?
         
     | 
| 
       80 
84 
     | 
    
         | 
| 
       81 
     | 
    
         
            -
                     
     | 
| 
      
 85 
     | 
    
         
            +
                    log_tags = {stacktrace: error.backtrace.join("\n")}
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
                    logger.tagged(log_tags) do
         
     | 
| 
      
 88 
     | 
    
         
            +
                      logger.send(:error, "KAFKA ERROR: #{format_exception_error(error)}")
         
     | 
| 
      
 89 
     | 
    
         
            +
                    end
         
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
       82 
91 
     | 
    
         
             
                    ErrorTracker.error(error)
         
     | 
| 
       83 
92 
     | 
    
         
             
                  end
         
     | 
| 
       84 
93 
     | 
    
         | 
| 
       85 
     | 
    
         
            -
                  def log_success(report)
         
     | 
| 
       86 
     | 
    
         
            -
                     
     | 
| 
      
 94 
     | 
    
         
            +
                  def log_success(report, produce_duration)
         
     | 
| 
      
 95 
     | 
    
         
            +
                    log_tags = {kafka: log_tags(report, produce_duration)}
         
     | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
      
 97 
     | 
    
         
            +
                    log_with_tags(log_tags)
         
     | 
| 
       87 
98 
     | 
    
         
             
                  end
         
     | 
| 
       88 
99 
     | 
    
         | 
| 
       89 
100 
     | 
    
         
             
                  def format_exception_error(error)
         
     | 
| 
         @@ -100,6 +111,33 @@ module Sbmt 
     | 
|
| 
       100 
111 
     | 
    
         
             
                    error.respond_to?(:cause) && error.cause.present?
         
     | 
| 
       101 
112 
     | 
    
         
             
                  end
         
     | 
| 
       102 
113 
     | 
    
         | 
| 
      
 114 
     | 
    
         
            +
                  def log_tags(report, produce_duration)
         
     | 
| 
      
 115 
     | 
    
         
            +
                    {
         
     | 
| 
      
 116 
     | 
    
         
            +
                      topic: report.topic_name,
         
     | 
| 
      
 117 
     | 
    
         
            +
                      partition: report.partition,
         
     | 
| 
      
 118 
     | 
    
         
            +
                      offset: report.offset,
         
     | 
| 
      
 119 
     | 
    
         
            +
                      produce_duration_ms: produce_duration
         
     | 
| 
      
 120 
     | 
    
         
            +
                    }
         
     | 
| 
      
 121 
     | 
    
         
            +
                  end
         
     | 
| 
      
 122 
     | 
    
         
            +
             
     | 
| 
      
 123 
     | 
    
         
            +
                  def log_with_tags(log_tags)
         
     | 
| 
      
 124 
     | 
    
         
            +
                    return unless logger.respond_to?(:tagged)
         
     | 
| 
      
 125 
     | 
    
         
            +
             
     | 
| 
      
 126 
     | 
    
         
            +
                    logger.tagged(log_tags) do
         
     | 
| 
      
 127 
     | 
    
         
            +
                      logger.send(:info, MSG_SUCCESS)
         
     | 
| 
      
 128 
     | 
    
         
            +
                    end
         
     | 
| 
      
 129 
     | 
    
         
            +
                  end
         
     | 
| 
      
 130 
     | 
    
         
            +
             
     | 
| 
      
 131 
     | 
    
         
            +
                  def measure_time
         
     | 
| 
      
 132 
     | 
    
         
            +
                    start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC)
         
     | 
| 
      
 133 
     | 
    
         
            +
                    result = yield
         
     | 
| 
      
 134 
     | 
    
         
            +
                    end_time = Process.clock_gettime(Process::CLOCK_MONOTONIC)
         
     | 
| 
      
 135 
     | 
    
         
            +
             
     | 
| 
      
 136 
     | 
    
         
            +
                    elapsed_time = end_time - start_time
         
     | 
| 
      
 137 
     | 
    
         
            +
             
     | 
| 
      
 138 
     | 
    
         
            +
                    [result, elapsed_time]
         
     | 
| 
      
 139 
     | 
    
         
            +
                  end
         
     | 
| 
      
 140 
     | 
    
         
            +
             
     | 
| 
       103 
141 
     | 
    
         
             
                  def config
         
     | 
| 
       104 
142 
     | 
    
         
             
                    Config::Producer
         
     | 
| 
       105 
143 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -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( 
     | 
| 
       17 
     | 
    
         
            -
                    attribute :ack_timeout, Sbmt::KafkaProducer::Types::Coercible::Integer.optional.default( 
     | 
| 
      
 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 
     | 
    
         
            -
                       
     | 
| 
       26 
     | 
    
         
            -
                         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       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, 
     | 
| 
      
 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 
     | 
    
         
            -
                       
     | 
| 
      
 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( 
     | 
| 
       19 
     | 
    
         
            -
                      return default_client if  
     | 
| 
      
 18 
     | 
    
         
            +
                    def build(kafka_options = {})
         
     | 
| 
      
 19 
     | 
    
         
            +
                      return default_client if kafka_options.empty?
         
     | 
| 
       20 
20 
     | 
    
         | 
| 
       21 
     | 
    
         
            -
                      fetch_client( 
     | 
| 
      
 21 
     | 
    
         
            +
                      fetch_client(kafka_options) do
         
     | 
| 
       22 
22 
     | 
    
         
             
                        ConnectionPool::Wrapper.new do
         
     | 
| 
       23 
23 
     | 
    
         
             
                          WaterDrop::Producer.new do |config|
         
     | 
| 
       24 
     | 
    
         
            -
                            configure_client(config,  
     | 
| 
      
 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( 
     | 
| 
       33 
     | 
    
         
            -
                      key = Digest::SHA1.hexdigest(Marshal.dump( 
     | 
| 
      
 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 
     | 
    
         
            -
                       
     | 
| 
       60 
     | 
    
         
            -
             
     | 
| 
       61 
     | 
    
         
            -
                       
     | 
| 
       62 
     | 
    
         
            -
                       
     | 
| 
       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
         
     | 
    
        data/sbmt-kafka_producer.gemspec
    CHANGED
    
    | 
         @@ -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 = [" 
     | 
| 
      
 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/ 
     | 
| 
       14 
     | 
    
         
            -
              spec.required_ruby_version = ">=  
     | 
| 
      
 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. 
     | 
| 
      
 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", " 
     | 
| 
      
 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. 
     | 
| 
      
 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:  
     | 
| 
      
 4 
     | 
    
         
            +
              version: 3.1.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
     | 
    
         
            -
            -  
     | 
| 
      
 7 
     | 
    
         
            +
            - Kuper Ruby-Platform Team
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire:
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: exe
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2024- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2024-09-18 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: ' 
     | 
| 
      
 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: ' 
     | 
| 
      
 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. 
     | 
| 
      
 75 
     | 
    
         
            +
                    version: '2.7'
         
     | 
| 
       76 
76 
     | 
    
         
             
                - - "<"
         
     | 
| 
       77 
77 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       78 
     | 
    
         
            -
                    version: '2. 
     | 
| 
      
 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. 
     | 
| 
      
 85 
     | 
    
         
            +
                    version: '2.7'
         
     | 
| 
       86 
86 
     | 
    
         
             
                - - "<"
         
     | 
| 
       87 
87 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       88 
     | 
    
         
            -
                    version: '2. 
     | 
| 
      
 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. 
     | 
| 
      
 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. 
     | 
| 
      
 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/ 
     | 
| 
      
 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/ 
     | 
| 
       411 
     | 
    
         
            -
              source_code_uri: https://github.com/ 
     | 
| 
       412 
     | 
    
         
            -
              changelog_uri: https://github.com/ 
     | 
| 
      
 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:  
     | 
| 
      
 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. 
     | 
| 
      
 429 
     | 
    
         
            +
            rubygems_version: 3.1.6
         
     | 
| 
       430 
430 
     | 
    
         
             
            signing_key:
         
     | 
| 
       431 
431 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       432 
432 
     | 
    
         
             
            summary: Ruby gem for producing Kafka messages
         
     |