diff --git a/Matrixfile b/Matrixfile
index 9d2e8529dab..a7f355eedf3 100644
--- a/Matrixfile
+++ b/Matrixfile
@@ -168,7 +168,9 @@
'contrib' => '✅ 2.5 / ✅ 2.6 / ✅ 2.7 / ✅ 3.0 / ✅ 3.1 / ✅ 3.2 / ✅ 3.3 / ✅ 3.4 / ✅ jruby'
},
'sneakers' => {
- 'contrib' => '✅ 2.5 / ✅ 2.6 / ✅ 2.7 / ✅ 3.0 / ✅ 3.1 / ✅ 3.2 / ✅ 3.3 / ✅ 3.4 / ✅ jruby'
+ 'kicks-latest' => '✅ 2.5 / ✅ 2.6 / ✅ 2.7 / ✅ 3.0 / ✅ 3.1 / ✅ 3.2 / ✅ 3.3 / ✅ 3.4 / ✅ jruby',
+ 'kicks-min' => '✅ 2.5 / ✅ 2.6 / ✅ 2.7 / ✅ 3.0 / ✅ 3.1 / ✅ 3.2 / ✅ 3.3 / ✅ 3.4 / ✅ jruby',
+ 'sneakers-min' => '✅ 2.5 / ✅ 2.6 / ✅ 2.7 / ✅ 3.0 / ✅ 3.1 / ✅ 3.2 / ✅ 3.3 / ✅ 3.4 / ✅ jruby',
},
'stripe' => {
'stripe-latest' => '✅ 2.5 / ✅ 2.6 / ✅ 2.7 / ✅ 3.0 / ✅ 3.1 / ✅ 3.2 / ✅ 3.3 / ✅ 3.4 / ✅ jruby',
diff --git a/appraisal/generate.rb b/appraisal/generate.rb
index 934a408f01a..1fa61d5ba88 100644
--- a/appraisal/generate.rb
+++ b/appraisal/generate.rb
@@ -49,12 +49,15 @@
# Builds a matrix of versions to test for a given integration
-# `range`: the range of versions to test
-# `gem` : optional, gem name to test (gem name can be different from the integration name)
-# `min` : optional, minimum version to test
-# `meta` : optional, additional metadata (development dependencies, etc.) for the group
-def build_coverage_matrix(integration, range, gem: nil, min: nil, meta: {})
- gem ||= integration
+# @param [String] integration the name of the integration to test
+# @param [Range, Integer] range the range of major versions to test, or a single major version to test
+# @param [String] gem optional, gem name to test (gem name can be different from the integration name)
+# @param [String] min optional, minimum version to test
+# @param [Boolean] latest optional, whether to test the latest version
+# @param [Hash] meta optional, additional metadata (development dependencies, etc.) for the group
+def build_coverage_matrix(integration, range, gem: integration, min: nil, latest: true, meta: {})
+ # Allow single version to be passed easily
+ range = range..range if range.is_a?(Integer)
if min
appraise "#{integration}-min" do
@@ -70,12 +73,14 @@ def build_coverage_matrix(integration, range, gem: nil, min: nil, meta: {})
end
end
- appraise "#{integration}-latest" do
- # The latest group declares dependencies without version constraints,
- # still requires being updated to pick up the next major version and
- # committing the changes to lockfiles.
- gem gem
- meta.each { |k, v| v ? gem(k, v) : gem(k) }
+ if latest
+ appraise "#{integration}-latest" do
+ # The latest group declares dependencies without version constraints,
+ # still requires being updated to pick up the next major version and
+ # committing the changes to lockfiles.
+ gem gem
+ meta.each { |k, v| v ? gem(k, v) : gem(k) }
+ end
end
end
diff --git a/appraisal/jruby-9.2.rb b/appraisal/jruby-9.2.rb
index 5e4073d035f..6ec8ab53a0e 100644
--- a/appraisal/jruby-9.2.rb
+++ b/appraisal/jruby-9.2.rb
@@ -202,6 +202,8 @@
build_coverage_matrix('stripe', 7..12, min: '5.15.0')
build_coverage_matrix('opensearch', 2..3, gem: 'opensearch-ruby')
build_coverage_matrix('elasticsearch', 7..8)
+build_coverage_matrix('kicks', [], min: '3.0.0')
+build_coverage_matrix('sneakers', [], min: '2.12.0', latest: false) # Sneakers is not receiving updates anymore and 2.12.0 is the last version
appraise 'relational_db' do
gem 'activerecord', '~> 5'
diff --git a/appraisal/jruby-9.3.rb b/appraisal/jruby-9.3.rb
index f51344a8562..35d6eb24b15 100644
--- a/appraisal/jruby-9.3.rb
+++ b/appraisal/jruby-9.3.rb
@@ -175,6 +175,8 @@
build_coverage_matrix('stripe', 7..12, min: '5.15.0')
build_coverage_matrix('opensearch', 2..3, gem: 'opensearch-ruby')
build_coverage_matrix('elasticsearch', 7..8)
+build_coverage_matrix('kicks', [], min: '3.0.0')
+build_coverage_matrix('sneakers', [], min: '2.12.0', latest: false) # Sneakers is not receiving updates anymore and 2.12.0 is the last version
appraise 'relational_db' do
gem 'activerecord', '~> 6.0.0'
diff --git a/appraisal/jruby-9.4.rb b/appraisal/jruby-9.4.rb
index 947d54885cb..15e75ea1420 100644
--- a/appraisal/jruby-9.4.rb
+++ b/appraisal/jruby-9.4.rb
@@ -79,6 +79,8 @@
build_coverage_matrix('stripe', 7..12, min: '5.15.0')
build_coverage_matrix('opensearch', 2..3, gem: 'opensearch-ruby')
build_coverage_matrix('elasticsearch', 7..8)
+build_coverage_matrix('kicks', [], min: '3.0.0')
+build_coverage_matrix('sneakers', [], min: '2.12.0', latest: false) # Sneakers is not receiving updates anymore and 2.12.0 is the last version
appraise 'relational_db' do
gem 'activerecord', '~> 6.1.0'
diff --git a/appraisal/ruby-2.5.rb b/appraisal/ruby-2.5.rb
index 502c998055d..c570a275d14 100644
--- a/appraisal/ruby-2.5.rb
+++ b/appraisal/ruby-2.5.rb
@@ -221,6 +221,8 @@
build_coverage_matrix('stripe', 7..12, min: '5.15.0')
build_coverage_matrix('opensearch', 2..3, gem: 'opensearch-ruby')
build_coverage_matrix('elasticsearch', 7..8)
+build_coverage_matrix('kicks', [], min: '3.0.0')
+build_coverage_matrix('sneakers', [], min: '2.12.0', latest: false) # Sneakers is not receiving updates anymore and 2.12.0 is the last version
appraise 'relational_db' do
gem 'activerecord', '~> 5'
diff --git a/appraisal/ruby-2.6.rb b/appraisal/ruby-2.6.rb
index c89e19893c9..163fa904e03 100644
--- a/appraisal/ruby-2.6.rb
+++ b/appraisal/ruby-2.6.rb
@@ -174,6 +174,8 @@
build_coverage_matrix('stripe', 7..12, min: '5.15.0')
build_coverage_matrix('opensearch', 2..3, gem: 'opensearch-ruby')
build_coverage_matrix('elasticsearch', 7..8)
+build_coverage_matrix('kicks', [], min: '3.0.0')
+build_coverage_matrix('sneakers', [], min: '2.12.0', latest: false) # Sneakers is not receiving updates anymore and 2.12.0 is the last version
appraise 'relational_db' do
gem 'activerecord', '~> 6.0.0'
diff --git a/appraisal/ruby-2.7.rb b/appraisal/ruby-2.7.rb
index 88b3b0f1e98..56535fac17d 100644
--- a/appraisal/ruby-2.7.rb
+++ b/appraisal/ruby-2.7.rb
@@ -174,6 +174,8 @@
build_coverage_matrix('stripe', 7..12, min: '5.15.0')
build_coverage_matrix('opensearch', 2..3, gem: 'opensearch-ruby')
build_coverage_matrix('elasticsearch', 7..8)
+build_coverage_matrix('kicks', [], min: '3.0.0')
+build_coverage_matrix('sneakers', [], min: '2.12.0', latest: false) # Sneakers is not receiving updates anymore and 2.12.0 is the last version
appraise 'relational_db' do
gem 'activerecord', '~> 6.1.0'
diff --git a/appraisal/ruby-3.0.rb b/appraisal/ruby-3.0.rb
index ac024429e2f..20aea0ba53e 100644
--- a/appraisal/ruby-3.0.rb
+++ b/appraisal/ruby-3.0.rb
@@ -95,6 +95,8 @@
build_coverage_matrix('stripe', 7..12, min: '5.15.0')
build_coverage_matrix('opensearch', 2..3, gem: 'opensearch-ruby')
build_coverage_matrix('elasticsearch', 7..8)
+build_coverage_matrix('kicks', [], min: '3.0.0')
+build_coverage_matrix('sneakers', [], min: '2.12.0', latest: false) # Sneakers is not receiving updates anymore and 2.12.0 is the last version
appraise 'relational_db' do
gem 'activerecord', '~> 7'
diff --git a/appraisal/ruby-3.1.rb b/appraisal/ruby-3.1.rb
index ac024429e2f..20aea0ba53e 100644
--- a/appraisal/ruby-3.1.rb
+++ b/appraisal/ruby-3.1.rb
@@ -95,6 +95,8 @@
build_coverage_matrix('stripe', 7..12, min: '5.15.0')
build_coverage_matrix('opensearch', 2..3, gem: 'opensearch-ruby')
build_coverage_matrix('elasticsearch', 7..8)
+build_coverage_matrix('kicks', [], min: '3.0.0')
+build_coverage_matrix('sneakers', [], min: '2.12.0', latest: false) # Sneakers is not receiving updates anymore and 2.12.0 is the last version
appraise 'relational_db' do
gem 'activerecord', '~> 7'
diff --git a/appraisal/ruby-3.2.rb b/appraisal/ruby-3.2.rb
index ac024429e2f..20aea0ba53e 100644
--- a/appraisal/ruby-3.2.rb
+++ b/appraisal/ruby-3.2.rb
@@ -95,6 +95,8 @@
build_coverage_matrix('stripe', 7..12, min: '5.15.0')
build_coverage_matrix('opensearch', 2..3, gem: 'opensearch-ruby')
build_coverage_matrix('elasticsearch', 7..8)
+build_coverage_matrix('kicks', [], min: '3.0.0')
+build_coverage_matrix('sneakers', [], min: '2.12.0', latest: false) # Sneakers is not receiving updates anymore and 2.12.0 is the last version
appraise 'relational_db' do
gem 'activerecord', '~> 7'
diff --git a/appraisal/ruby-3.3.rb b/appraisal/ruby-3.3.rb
index c7fffc3b558..0353dfc8134 100644
--- a/appraisal/ruby-3.3.rb
+++ b/appraisal/ruby-3.3.rb
@@ -95,6 +95,8 @@
build_coverage_matrix('stripe', 7..12, min: '5.15.0')
build_coverage_matrix('opensearch', 2..3, gem: 'opensearch-ruby')
build_coverage_matrix('elasticsearch', 7..8)
+build_coverage_matrix('kicks', [], min: '3.0.0')
+build_coverage_matrix('sneakers', [], min: '2.12.0', latest: false) # Sneakers is not receiving updates anymore and 2.12.0 is the last version
appraise 'relational_db' do
gem 'activerecord', '~> 7'
@@ -131,7 +133,6 @@
gem 'roda', '>= 2.0.0'
gem 'semantic_logger', '~> 4.0'
gem 'sidekiq', '~> 7'
- gem 'sneakers', '>= 2.12.0'
gem 'sucker_punch'
gem 'que', '>= 1.0.0'
end
diff --git a/appraisal/ruby-3.4.rb b/appraisal/ruby-3.4.rb
index 17a81807b66..bfd050c76ae 100644
--- a/appraisal/ruby-3.4.rb
+++ b/appraisal/ruby-3.4.rb
@@ -95,6 +95,8 @@
build_coverage_matrix('stripe', 7..12, min: '5.15.0')
build_coverage_matrix('opensearch', 2..3, gem: 'opensearch-ruby')
build_coverage_matrix('elasticsearch', 7..8)
+build_coverage_matrix('kicks', [], min: '3.0.0')
+build_coverage_matrix('sneakers', [], min: '2.12.0', latest: false) # Sneakers is not receiving updates anymore and 2.12.0 is the last version
appraise 'relational_db' do
# ActiveRecord locked because tests are failing with 7.1, which was attempted as a part of Ruby 3.4 testing in CI.
diff --git a/docs/Compatibility.md b/docs/Compatibility.md
index 6dbcf8e5e12..3fb4ed272b1 100644
--- a/docs/Compatibility.md
+++ b/docs/Compatibility.md
@@ -91,6 +91,7 @@ For a list of available integrations, and their configuration options, refer to
| httpclient | `httpclient` | `>= 2.2` | `>= 2.2` | [Link][23] | [Link](https://github.com/nahi/httpclient) |
| httpx | `httpx` | `>= 0.11` | `>= 0.11` | [Link][24] | [Link](https://gitlab.com/honeyryderchuck/httpx) |
| Kafka | `ruby-kafka` | `>= 0.7.10` | `>= 0.7.10` | [Link][25] | [Link](https://github.com/zendesk/ruby-kafka) |
+| Kicks | `kicks` | `>= 3.0.0` | `>= 3.0.0` | [Link][55] | [Link](https://github.com/ruby-amqp/kicks) |
| Makara (via Active Record) | `makara` | `>= 0.3.5` | `>= 0.3.5` | [Link][8] | [Link](https://github.com/instacart/makara) |
| MongoDB | `mongo` | `>= 2.1` | `>= 2.1` | [Link][26] | [Link](https://github.com/mongodb/mongo-ruby-driver) |
| MySQL2 | `mysql2` | `>= 0.3.21` | *gem not available* | [Link][27] | [Link](https://github.com/brianmario/mysql2) |
@@ -269,3 +270,5 @@ new release of 1.21.0 (or 1.20.1). Those bugfixes will not be backported as patc
[53]: https://docs.datadoghq.com/agent/basic_agent_usage/?tab=agentv6v7
[54]: https://docs.datadoghq.com/agent/basic_agent_usage/?tab=agentv5
+
+[55]: https://docs.datadoghq.com/tracing/trace_collection/dd_libraries/ruby#kicks
diff --git a/docs/GettingStarted.md b/docs/GettingStarted.md
index 9262b29bcb4..f8e4336b76e 100644
--- a/docs/GettingStarted.md
+++ b/docs/GettingStarted.md
@@ -1112,6 +1112,32 @@ end
| --------- | ------------------------------- | ------ | -------------------------------------------- | ------- |
| `enabled` | `DD_TRACE_KAFKA_ENABLED` | `Bool` | Whether the integration should create spans. | `true` |
+### Kicks
+
+The Kicks integration is a server-side middleware which will trace job executions.
+
+
+Kicks is a continuation of Sneakers and both cannot be active at the same time, as they share their Ruby class namespace. Configurations to the Sneakers integration will be safely merged with any Kicks configuration.
+
+
+You can enable it through `Datadog.configure`:
+
+```ruby
+require 'datadog'
+
+Datadog.configure do |c|
+ c.tracing.instrument :kicks, **options
+end
+```
+
+`options` are the following keyword arguments:
+
+| Key | Env Var | Type | Description | Default |
+| ---------- | - | ----- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- |
+| `enabled` | `DD_TRACE_SNEAKERS_ENABLED` | `Bool` | Whether the integration should create spans. | `true` |
+| `tag_body` | | `Bool` | Enable tagging of job message. `true` for on, `false` for off. | `false` |
+| `on_error` | | `Proc` | Custom error handler invoked when a job raises an error. Provided `span` and `error` as arguments. Sets error on the span by default. Useful for ignoring transient errors. | `proc { \|span, error\| span.set_error(error) unless span.nil? }` |
+
### MongoDB
The integration traces any `Command` that is sent from the [MongoDB Ruby Driver](https://github.com/mongodb/mongo-ruby-driver) to a MongoDB cluster. By extension, Object Document Mappers (ODM) such as Mongoid are automatically instrumented if they use the official Ruby driver. To activate the integration, simply:
@@ -1935,6 +1961,10 @@ end
The Sneakers integration is a server-side middleware which will trace job executions.
+
+Kicks is a continuation of Sneakers and both cannot be active at the same time, as they share their Ruby class namespace. Configurations to the Sneakers integration will be safely merged with any Kicks configuration.
+
+
You can enable it through `Datadog.configure`:
```ruby
diff --git a/gemfiles/jruby_9.2_kicks_latest.gemfile b/gemfiles/jruby_9.2_kicks_latest.gemfile
new file mode 100644
index 00000000000..236759cabfd
--- /dev/null
+++ b/gemfiles/jruby_9.2_kicks_latest.gemfile
@@ -0,0 +1,36 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "benchmark-ips", "~> 2.8"
+gem "benchmark-memory", "< 0.2"
+gem "climate_control", "~> 0.2.0"
+gem "concurrent-ruby"
+gem "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0"
+gem "json-schema", "< 3"
+gem "memory_profiler", "~> 0.9"
+gem "os", "~> 1.1"
+gem "pimpmychangelog", ">= 0.1.2"
+gem "pry"
+gem "pry-debugger-jruby"
+gem "rake", ">= 10.5"
+gem "rake-compiler", "~> 1.1", ">= 1.1.1"
+gem "rspec", "~> 3.13"
+gem "rspec-collection_matchers", "~> 1.1"
+gem "rspec-wait", "~> 0"
+gem "rspec_junit_formatter", ">= 0.5.1"
+gem "simplecov"
+gem "simplecov-cobertura", "~> 2.1.0"
+gem "warning", "~> 1"
+gem "webmock", ">= 3.10.0"
+gem "kicks"
+
+group :check do
+
+end
+
+group :dev do
+
+end
+
+gemspec path: "../"
diff --git a/gemfiles/jruby_9.2_kicks_min.gemfile b/gemfiles/jruby_9.2_kicks_min.gemfile
new file mode 100644
index 00000000000..9ab510707e6
--- /dev/null
+++ b/gemfiles/jruby_9.2_kicks_min.gemfile
@@ -0,0 +1,36 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "benchmark-ips", "~> 2.8"
+gem "benchmark-memory", "< 0.2"
+gem "climate_control", "~> 0.2.0"
+gem "concurrent-ruby"
+gem "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0"
+gem "json-schema", "< 3"
+gem "memory_profiler", "~> 0.9"
+gem "os", "~> 1.1"
+gem "pimpmychangelog", ">= 0.1.2"
+gem "pry"
+gem "pry-debugger-jruby"
+gem "rake", ">= 10.5"
+gem "rake-compiler", "~> 1.1", ">= 1.1.1"
+gem "rspec", "~> 3.13"
+gem "rspec-collection_matchers", "~> 1.1"
+gem "rspec-wait", "~> 0"
+gem "rspec_junit_formatter", ">= 0.5.1"
+gem "simplecov"
+gem "simplecov-cobertura", "~> 2.1.0"
+gem "warning", "~> 1"
+gem "webmock", ">= 3.10.0"
+gem "kicks", "= 3.0.0"
+
+group :check do
+
+end
+
+group :dev do
+
+end
+
+gemspec path: "../"
diff --git a/gemfiles/jruby_9.2_sneakers_min.gemfile b/gemfiles/jruby_9.2_sneakers_min.gemfile
new file mode 100644
index 00000000000..c19a29bfa14
--- /dev/null
+++ b/gemfiles/jruby_9.2_sneakers_min.gemfile
@@ -0,0 +1,36 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "benchmark-ips", "~> 2.8"
+gem "benchmark-memory", "< 0.2"
+gem "climate_control", "~> 0.2.0"
+gem "concurrent-ruby"
+gem "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0"
+gem "json-schema", "< 3"
+gem "memory_profiler", "~> 0.9"
+gem "os", "~> 1.1"
+gem "pimpmychangelog", ">= 0.1.2"
+gem "pry"
+gem "pry-debugger-jruby"
+gem "rake", ">= 10.5"
+gem "rake-compiler", "~> 1.1", ">= 1.1.1"
+gem "rspec", "~> 3.13"
+gem "rspec-collection_matchers", "~> 1.1"
+gem "rspec-wait", "~> 0"
+gem "rspec_junit_formatter", ">= 0.5.1"
+gem "simplecov"
+gem "simplecov-cobertura", "~> 2.1.0"
+gem "warning", "~> 1"
+gem "webmock", ">= 3.10.0"
+gem "sneakers", "= 2.12.0"
+
+group :check do
+
+end
+
+group :dev do
+
+end
+
+gemspec path: "../"
diff --git a/gemfiles/jruby_9.3_kicks_latest.gemfile b/gemfiles/jruby_9.3_kicks_latest.gemfile
new file mode 100644
index 00000000000..4cb81370126
--- /dev/null
+++ b/gemfiles/jruby_9.3_kicks_latest.gemfile
@@ -0,0 +1,40 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "benchmark-ips", "~> 2.8"
+gem "benchmark-memory", "< 0.2"
+gem "climate_control", "~> 0.2.0"
+gem "concurrent-ruby"
+gem "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0"
+gem "json-schema", "< 3"
+gem "memory_profiler", "~> 0.9"
+gem "os", "~> 1.1"
+gem "pimpmychangelog", ">= 0.1.2"
+gem "pry"
+gem "pry-debugger-jruby"
+gem "rake", ">= 10.5"
+gem "rake-compiler", "~> 1.1", ">= 1.1.1"
+gem "rspec", "~> 3.13"
+gem "rspec-collection_matchers", "~> 1.1"
+gem "rspec-wait", "~> 0"
+gem "rspec_junit_formatter", ">= 0.5.1"
+gem "rubocop", "~> 1.50.0", require: false
+gem "rubocop-packaging", "~> 0.5.2", require: false
+gem "rubocop-performance", "~> 1.9", require: false
+gem "rubocop-rspec", ["~> 2.20", "< 2.21"], require: false
+gem "simplecov"
+gem "simplecov-cobertura", "~> 2.1.0"
+gem "warning", "~> 1"
+gem "webmock", ">= 3.10.0"
+gem "kicks"
+
+group :check do
+
+end
+
+group :dev do
+
+end
+
+gemspec path: "../"
diff --git a/gemfiles/jruby_9.3_kicks_min.gemfile b/gemfiles/jruby_9.3_kicks_min.gemfile
new file mode 100644
index 00000000000..796c33759c7
--- /dev/null
+++ b/gemfiles/jruby_9.3_kicks_min.gemfile
@@ -0,0 +1,40 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "benchmark-ips", "~> 2.8"
+gem "benchmark-memory", "< 0.2"
+gem "climate_control", "~> 0.2.0"
+gem "concurrent-ruby"
+gem "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0"
+gem "json-schema", "< 3"
+gem "memory_profiler", "~> 0.9"
+gem "os", "~> 1.1"
+gem "pimpmychangelog", ">= 0.1.2"
+gem "pry"
+gem "pry-debugger-jruby"
+gem "rake", ">= 10.5"
+gem "rake-compiler", "~> 1.1", ">= 1.1.1"
+gem "rspec", "~> 3.13"
+gem "rspec-collection_matchers", "~> 1.1"
+gem "rspec-wait", "~> 0"
+gem "rspec_junit_formatter", ">= 0.5.1"
+gem "rubocop", "~> 1.50.0", require: false
+gem "rubocop-packaging", "~> 0.5.2", require: false
+gem "rubocop-performance", "~> 1.9", require: false
+gem "rubocop-rspec", ["~> 2.20", "< 2.21"], require: false
+gem "simplecov"
+gem "simplecov-cobertura", "~> 2.1.0"
+gem "warning", "~> 1"
+gem "webmock", ">= 3.10.0"
+gem "kicks", "= 3.0.0"
+
+group :check do
+
+end
+
+group :dev do
+
+end
+
+gemspec path: "../"
diff --git a/gemfiles/jruby_9.3_sneakers_min.gemfile b/gemfiles/jruby_9.3_sneakers_min.gemfile
new file mode 100644
index 00000000000..b275c33b6ae
--- /dev/null
+++ b/gemfiles/jruby_9.3_sneakers_min.gemfile
@@ -0,0 +1,40 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "benchmark-ips", "~> 2.8"
+gem "benchmark-memory", "< 0.2"
+gem "climate_control", "~> 0.2.0"
+gem "concurrent-ruby"
+gem "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0"
+gem "json-schema", "< 3"
+gem "memory_profiler", "~> 0.9"
+gem "os", "~> 1.1"
+gem "pimpmychangelog", ">= 0.1.2"
+gem "pry"
+gem "pry-debugger-jruby"
+gem "rake", ">= 10.5"
+gem "rake-compiler", "~> 1.1", ">= 1.1.1"
+gem "rspec", "~> 3.13"
+gem "rspec-collection_matchers", "~> 1.1"
+gem "rspec-wait", "~> 0"
+gem "rspec_junit_formatter", ">= 0.5.1"
+gem "rubocop", "~> 1.50.0", require: false
+gem "rubocop-packaging", "~> 0.5.2", require: false
+gem "rubocop-performance", "~> 1.9", require: false
+gem "rubocop-rspec", ["~> 2.20", "< 2.21"], require: false
+gem "simplecov"
+gem "simplecov-cobertura", "~> 2.1.0"
+gem "warning", "~> 1"
+gem "webmock", ">= 3.10.0"
+gem "sneakers", "= 2.12.0"
+
+group :check do
+
+end
+
+group :dev do
+
+end
+
+gemspec path: "../"
diff --git a/gemfiles/jruby_9.4_kicks_latest.gemfile b/gemfiles/jruby_9.4_kicks_latest.gemfile
new file mode 100644
index 00000000000..325cde4397d
--- /dev/null
+++ b/gemfiles/jruby_9.4_kicks_latest.gemfile
@@ -0,0 +1,41 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "benchmark-ips", "~> 2.8"
+gem "benchmark-memory", "< 0.2"
+gem "climate_control", "~> 0.2.0"
+gem "concurrent-ruby"
+gem "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0"
+gem "json-schema", "< 3"
+gem "memory_profiler", "~> 0.9"
+gem "os", "~> 1.1"
+gem "pimpmychangelog", ">= 0.1.2"
+gem "pry"
+gem "pry-debugger-jruby"
+gem "rake", ">= 10.5"
+gem "rake-compiler", "~> 1.1", ">= 1.1.1"
+gem "rspec", "~> 3.13"
+gem "rspec-collection_matchers", "~> 1.1"
+gem "rspec-wait", "~> 0"
+gem "rspec_junit_formatter", ">= 0.5.1"
+gem "rubocop", "~> 1.50.0", require: false
+gem "rubocop-packaging", "~> 0.5.2", require: false
+gem "rubocop-performance", "~> 1.9", require: false
+gem "rubocop-rspec", ["~> 2.20", "< 2.21"], require: false
+gem "simplecov"
+gem "simplecov-cobertura", "~> 2.1.0"
+gem "warning", "~> 1"
+gem "webmock", ">= 3.10.0"
+gem "webrick", ">= 1.7.0"
+gem "kicks"
+
+group :check do
+
+end
+
+group :dev do
+
+end
+
+gemspec path: "../"
diff --git a/gemfiles/jruby_9.4_kicks_min.gemfile b/gemfiles/jruby_9.4_kicks_min.gemfile
new file mode 100644
index 00000000000..df73805228f
--- /dev/null
+++ b/gemfiles/jruby_9.4_kicks_min.gemfile
@@ -0,0 +1,41 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "benchmark-ips", "~> 2.8"
+gem "benchmark-memory", "< 0.2"
+gem "climate_control", "~> 0.2.0"
+gem "concurrent-ruby"
+gem "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0"
+gem "json-schema", "< 3"
+gem "memory_profiler", "~> 0.9"
+gem "os", "~> 1.1"
+gem "pimpmychangelog", ">= 0.1.2"
+gem "pry"
+gem "pry-debugger-jruby"
+gem "rake", ">= 10.5"
+gem "rake-compiler", "~> 1.1", ">= 1.1.1"
+gem "rspec", "~> 3.13"
+gem "rspec-collection_matchers", "~> 1.1"
+gem "rspec-wait", "~> 0"
+gem "rspec_junit_formatter", ">= 0.5.1"
+gem "rubocop", "~> 1.50.0", require: false
+gem "rubocop-packaging", "~> 0.5.2", require: false
+gem "rubocop-performance", "~> 1.9", require: false
+gem "rubocop-rspec", ["~> 2.20", "< 2.21"], require: false
+gem "simplecov"
+gem "simplecov-cobertura", "~> 2.1.0"
+gem "warning", "~> 1"
+gem "webmock", ">= 3.10.0"
+gem "webrick", ">= 1.7.0"
+gem "kicks", "= 3.0.0"
+
+group :check do
+
+end
+
+group :dev do
+
+end
+
+gemspec path: "../"
diff --git a/gemfiles/jruby_9.4_sneakers_min.gemfile b/gemfiles/jruby_9.4_sneakers_min.gemfile
new file mode 100644
index 00000000000..9f1e3d472a1
--- /dev/null
+++ b/gemfiles/jruby_9.4_sneakers_min.gemfile
@@ -0,0 +1,41 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "benchmark-ips", "~> 2.8"
+gem "benchmark-memory", "< 0.2"
+gem "climate_control", "~> 0.2.0"
+gem "concurrent-ruby"
+gem "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0"
+gem "json-schema", "< 3"
+gem "memory_profiler", "~> 0.9"
+gem "os", "~> 1.1"
+gem "pimpmychangelog", ">= 0.1.2"
+gem "pry"
+gem "pry-debugger-jruby"
+gem "rake", ">= 10.5"
+gem "rake-compiler", "~> 1.1", ">= 1.1.1"
+gem "rspec", "~> 3.13"
+gem "rspec-collection_matchers", "~> 1.1"
+gem "rspec-wait", "~> 0"
+gem "rspec_junit_formatter", ">= 0.5.1"
+gem "rubocop", "~> 1.50.0", require: false
+gem "rubocop-packaging", "~> 0.5.2", require: false
+gem "rubocop-performance", "~> 1.9", require: false
+gem "rubocop-rspec", ["~> 2.20", "< 2.21"], require: false
+gem "simplecov"
+gem "simplecov-cobertura", "~> 2.1.0"
+gem "warning", "~> 1"
+gem "webmock", ">= 3.10.0"
+gem "webrick", ">= 1.7.0"
+gem "sneakers", "= 2.12.0"
+
+group :check do
+
+end
+
+group :dev do
+
+end
+
+gemspec path: "../"
diff --git a/gemfiles/ruby_2.5_kicks_latest.gemfile b/gemfiles/ruby_2.5_kicks_latest.gemfile
new file mode 100644
index 00000000000..6dd3fb25a72
--- /dev/null
+++ b/gemfiles/ruby_2.5_kicks_latest.gemfile
@@ -0,0 +1,39 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "benchmark-ips", "~> 2.8"
+gem "benchmark-memory", "< 0.2"
+gem "climate_control", "~> 0.2.0"
+gem "concurrent-ruby"
+gem "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0"
+gem "extlz4", "~> 0.3", ">= 0.3.3"
+gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1", "< 3.19.2"]
+gem "json-schema", "< 3"
+gem "memory_profiler", "~> 0.9"
+gem "os", "~> 1.1"
+gem "pimpmychangelog", ">= 0.1.2"
+gem "pry"
+gem "pry-nav"
+gem "pry-stack_explorer"
+gem "rake", ">= 10.5"
+gem "rake-compiler", "~> 1.1", ">= 1.1.1"
+gem "rspec", "~> 3.13"
+gem "rspec-collection_matchers", "~> 1.1"
+gem "rspec-wait", "~> 0"
+gem "rspec_junit_formatter", ">= 0.5.1"
+gem "simplecov"
+gem "simplecov-cobertura", "~> 2.1.0"
+gem "warning", "~> 1"
+gem "webmock", ">= 3.10.0"
+gem "kicks"
+
+group :check do
+
+end
+
+group :dev do
+
+end
+
+gemspec path: "../"
diff --git a/gemfiles/ruby_2.5_kicks_min.gemfile b/gemfiles/ruby_2.5_kicks_min.gemfile
new file mode 100644
index 00000000000..4118282afc2
--- /dev/null
+++ b/gemfiles/ruby_2.5_kicks_min.gemfile
@@ -0,0 +1,39 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "benchmark-ips", "~> 2.8"
+gem "benchmark-memory", "< 0.2"
+gem "climate_control", "~> 0.2.0"
+gem "concurrent-ruby"
+gem "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0"
+gem "extlz4", "~> 0.3", ">= 0.3.3"
+gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1", "< 3.19.2"]
+gem "json-schema", "< 3"
+gem "memory_profiler", "~> 0.9"
+gem "os", "~> 1.1"
+gem "pimpmychangelog", ">= 0.1.2"
+gem "pry"
+gem "pry-nav"
+gem "pry-stack_explorer"
+gem "rake", ">= 10.5"
+gem "rake-compiler", "~> 1.1", ">= 1.1.1"
+gem "rspec", "~> 3.13"
+gem "rspec-collection_matchers", "~> 1.1"
+gem "rspec-wait", "~> 0"
+gem "rspec_junit_formatter", ">= 0.5.1"
+gem "simplecov"
+gem "simplecov-cobertura", "~> 2.1.0"
+gem "warning", "~> 1"
+gem "webmock", ">= 3.10.0"
+gem "kicks", "= 3.0.0"
+
+group :check do
+
+end
+
+group :dev do
+
+end
+
+gemspec path: "../"
diff --git a/gemfiles/ruby_2.5_sneakers_min.gemfile b/gemfiles/ruby_2.5_sneakers_min.gemfile
new file mode 100644
index 00000000000..e0425d4ec93
--- /dev/null
+++ b/gemfiles/ruby_2.5_sneakers_min.gemfile
@@ -0,0 +1,39 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "benchmark-ips", "~> 2.8"
+gem "benchmark-memory", "< 0.2"
+gem "climate_control", "~> 0.2.0"
+gem "concurrent-ruby"
+gem "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0"
+gem "extlz4", "~> 0.3", ">= 0.3.3"
+gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1", "< 3.19.2"]
+gem "json-schema", "< 3"
+gem "memory_profiler", "~> 0.9"
+gem "os", "~> 1.1"
+gem "pimpmychangelog", ">= 0.1.2"
+gem "pry"
+gem "pry-nav"
+gem "pry-stack_explorer"
+gem "rake", ">= 10.5"
+gem "rake-compiler", "~> 1.1", ">= 1.1.1"
+gem "rspec", "~> 3.13"
+gem "rspec-collection_matchers", "~> 1.1"
+gem "rspec-wait", "~> 0"
+gem "rspec_junit_formatter", ">= 0.5.1"
+gem "simplecov"
+gem "simplecov-cobertura", "~> 2.1.0"
+gem "warning", "~> 1"
+gem "webmock", ">= 3.10.0"
+gem "sneakers", "= 2.12.0"
+
+group :check do
+
+end
+
+group :dev do
+
+end
+
+gemspec path: "../"
diff --git a/gemfiles/ruby_2.6_kicks_latest.gemfile b/gemfiles/ruby_2.6_kicks_latest.gemfile
new file mode 100644
index 00000000000..a2fbc89e2ec
--- /dev/null
+++ b/gemfiles/ruby_2.6_kicks_latest.gemfile
@@ -0,0 +1,43 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "benchmark-ips", "~> 2.8"
+gem "benchmark-memory", "< 0.2"
+gem "climate_control", "~> 0.2.0"
+gem "concurrent-ruby"
+gem "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0"
+gem "extlz4", "~> 0.3", ">= 0.3.3"
+gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1", "< 3.19.2"]
+gem "json-schema", "< 3"
+gem "memory_profiler", "~> 0.9"
+gem "os", "~> 1.1"
+gem "pimpmychangelog", ">= 0.1.2"
+gem "pry"
+gem "pry-byebug"
+gem "pry-stack_explorer"
+gem "rake", ">= 10.5"
+gem "rake-compiler", "~> 1.1", ">= 1.1.1"
+gem "rspec", "~> 3.13"
+gem "rspec-collection_matchers", "~> 1.1"
+gem "rspec-wait", "~> 0"
+gem "rspec_junit_formatter", ">= 0.5.1"
+gem "rubocop", "~> 1.50.0", require: false
+gem "rubocop-packaging", "~> 0.5.2", require: false
+gem "rubocop-performance", "~> 1.9", require: false
+gem "rubocop-rspec", ["~> 2.20", "< 2.21"], require: false
+gem "simplecov"
+gem "simplecov-cobertura", "~> 2.1.0"
+gem "warning", "~> 1"
+gem "webmock", ">= 3.10.0"
+gem "kicks"
+
+group :check do
+
+end
+
+group :dev do
+
+end
+
+gemspec path: "../"
diff --git a/gemfiles/ruby_2.6_kicks_min.gemfile b/gemfiles/ruby_2.6_kicks_min.gemfile
new file mode 100644
index 00000000000..9b9d050951a
--- /dev/null
+++ b/gemfiles/ruby_2.6_kicks_min.gemfile
@@ -0,0 +1,43 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "benchmark-ips", "~> 2.8"
+gem "benchmark-memory", "< 0.2"
+gem "climate_control", "~> 0.2.0"
+gem "concurrent-ruby"
+gem "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0"
+gem "extlz4", "~> 0.3", ">= 0.3.3"
+gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1", "< 3.19.2"]
+gem "json-schema", "< 3"
+gem "memory_profiler", "~> 0.9"
+gem "os", "~> 1.1"
+gem "pimpmychangelog", ">= 0.1.2"
+gem "pry"
+gem "pry-byebug"
+gem "pry-stack_explorer"
+gem "rake", ">= 10.5"
+gem "rake-compiler", "~> 1.1", ">= 1.1.1"
+gem "rspec", "~> 3.13"
+gem "rspec-collection_matchers", "~> 1.1"
+gem "rspec-wait", "~> 0"
+gem "rspec_junit_formatter", ">= 0.5.1"
+gem "rubocop", "~> 1.50.0", require: false
+gem "rubocop-packaging", "~> 0.5.2", require: false
+gem "rubocop-performance", "~> 1.9", require: false
+gem "rubocop-rspec", ["~> 2.20", "< 2.21"], require: false
+gem "simplecov"
+gem "simplecov-cobertura", "~> 2.1.0"
+gem "warning", "~> 1"
+gem "webmock", ">= 3.10.0"
+gem "kicks", "= 3.0.0"
+
+group :check do
+
+end
+
+group :dev do
+
+end
+
+gemspec path: "../"
diff --git a/gemfiles/ruby_2.6_sneakers_min.gemfile b/gemfiles/ruby_2.6_sneakers_min.gemfile
new file mode 100644
index 00000000000..11a85b445e3
--- /dev/null
+++ b/gemfiles/ruby_2.6_sneakers_min.gemfile
@@ -0,0 +1,43 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "benchmark-ips", "~> 2.8"
+gem "benchmark-memory", "< 0.2"
+gem "climate_control", "~> 0.2.0"
+gem "concurrent-ruby"
+gem "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0"
+gem "extlz4", "~> 0.3", ">= 0.3.3"
+gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1", "< 3.19.2"]
+gem "json-schema", "< 3"
+gem "memory_profiler", "~> 0.9"
+gem "os", "~> 1.1"
+gem "pimpmychangelog", ">= 0.1.2"
+gem "pry"
+gem "pry-byebug"
+gem "pry-stack_explorer"
+gem "rake", ">= 10.5"
+gem "rake-compiler", "~> 1.1", ">= 1.1.1"
+gem "rspec", "~> 3.13"
+gem "rspec-collection_matchers", "~> 1.1"
+gem "rspec-wait", "~> 0"
+gem "rspec_junit_formatter", ">= 0.5.1"
+gem "rubocop", "~> 1.50.0", require: false
+gem "rubocop-packaging", "~> 0.5.2", require: false
+gem "rubocop-performance", "~> 1.9", require: false
+gem "rubocop-rspec", ["~> 2.20", "< 2.21"], require: false
+gem "simplecov"
+gem "simplecov-cobertura", "~> 2.1.0"
+gem "warning", "~> 1"
+gem "webmock", ">= 3.10.0"
+gem "sneakers", "= 2.12.0"
+
+group :check do
+
+end
+
+group :dev do
+
+end
+
+gemspec path: "../"
diff --git a/gemfiles/ruby_2.7_kicks_latest.gemfile b/gemfiles/ruby_2.7_kicks_latest.gemfile
new file mode 100644
index 00000000000..72276856425
--- /dev/null
+++ b/gemfiles/ruby_2.7_kicks_latest.gemfile
@@ -0,0 +1,43 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "benchmark-ips", "~> 2.8"
+gem "benchmark-memory", "< 0.2"
+gem "climate_control", "~> 0.2.0"
+gem "concurrent-ruby"
+gem "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0"
+gem "extlz4", "~> 0.3", ">= 0.3.3"
+gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1"]
+gem "json-schema", "< 3"
+gem "memory_profiler", "~> 0.9"
+gem "os", "~> 1.1"
+gem "pimpmychangelog", ">= 0.1.2"
+gem "pry"
+gem "pry-byebug"
+gem "pry-stack_explorer"
+gem "rake", ">= 10.5"
+gem "rake-compiler", "~> 1.1", ">= 1.1.1"
+gem "rspec", "~> 3.13"
+gem "rspec-collection_matchers", "~> 1.1"
+gem "rspec-wait", "~> 0"
+gem "rspec_junit_formatter", ">= 0.5.1"
+gem "rubocop", "~> 1.50.0", require: false
+gem "rubocop-packaging", "~> 0.5.2", require: false
+gem "rubocop-performance", "~> 1.9", require: false
+gem "rubocop-rspec", ["~> 2.20", "< 2.21"], require: false
+gem "simplecov"
+gem "simplecov-cobertura", "~> 2.1.0"
+gem "warning", "~> 1"
+gem "webmock", ">= 3.10.0"
+gem "kicks"
+
+group :check do
+
+end
+
+group :dev do
+
+end
+
+gemspec path: "../"
diff --git a/gemfiles/ruby_2.7_kicks_min.gemfile b/gemfiles/ruby_2.7_kicks_min.gemfile
new file mode 100644
index 00000000000..39906e77ff2
--- /dev/null
+++ b/gemfiles/ruby_2.7_kicks_min.gemfile
@@ -0,0 +1,43 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "benchmark-ips", "~> 2.8"
+gem "benchmark-memory", "< 0.2"
+gem "climate_control", "~> 0.2.0"
+gem "concurrent-ruby"
+gem "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0"
+gem "extlz4", "~> 0.3", ">= 0.3.3"
+gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1"]
+gem "json-schema", "< 3"
+gem "memory_profiler", "~> 0.9"
+gem "os", "~> 1.1"
+gem "pimpmychangelog", ">= 0.1.2"
+gem "pry"
+gem "pry-byebug"
+gem "pry-stack_explorer"
+gem "rake", ">= 10.5"
+gem "rake-compiler", "~> 1.1", ">= 1.1.1"
+gem "rspec", "~> 3.13"
+gem "rspec-collection_matchers", "~> 1.1"
+gem "rspec-wait", "~> 0"
+gem "rspec_junit_formatter", ">= 0.5.1"
+gem "rubocop", "~> 1.50.0", require: false
+gem "rubocop-packaging", "~> 0.5.2", require: false
+gem "rubocop-performance", "~> 1.9", require: false
+gem "rubocop-rspec", ["~> 2.20", "< 2.21"], require: false
+gem "simplecov"
+gem "simplecov-cobertura", "~> 2.1.0"
+gem "warning", "~> 1"
+gem "webmock", ">= 3.10.0"
+gem "kicks", "= 3.0.0"
+
+group :check do
+
+end
+
+group :dev do
+
+end
+
+gemspec path: "../"
diff --git a/gemfiles/ruby_2.7_sneakers_min.gemfile b/gemfiles/ruby_2.7_sneakers_min.gemfile
new file mode 100644
index 00000000000..f0188c0e339
--- /dev/null
+++ b/gemfiles/ruby_2.7_sneakers_min.gemfile
@@ -0,0 +1,43 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "benchmark-ips", "~> 2.8"
+gem "benchmark-memory", "< 0.2"
+gem "climate_control", "~> 0.2.0"
+gem "concurrent-ruby"
+gem "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0"
+gem "extlz4", "~> 0.3", ">= 0.3.3"
+gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1"]
+gem "json-schema", "< 3"
+gem "memory_profiler", "~> 0.9"
+gem "os", "~> 1.1"
+gem "pimpmychangelog", ">= 0.1.2"
+gem "pry"
+gem "pry-byebug"
+gem "pry-stack_explorer"
+gem "rake", ">= 10.5"
+gem "rake-compiler", "~> 1.1", ">= 1.1.1"
+gem "rspec", "~> 3.13"
+gem "rspec-collection_matchers", "~> 1.1"
+gem "rspec-wait", "~> 0"
+gem "rspec_junit_formatter", ">= 0.5.1"
+gem "rubocop", "~> 1.50.0", require: false
+gem "rubocop-packaging", "~> 0.5.2", require: false
+gem "rubocop-performance", "~> 1.9", require: false
+gem "rubocop-rspec", ["~> 2.20", "< 2.21"], require: false
+gem "simplecov"
+gem "simplecov-cobertura", "~> 2.1.0"
+gem "warning", "~> 1"
+gem "webmock", ">= 3.10.0"
+gem "sneakers", "= 2.12.0"
+
+group :check do
+
+end
+
+group :dev do
+
+end
+
+gemspec path: "../"
diff --git a/gemfiles/ruby_3.0_kicks_latest.gemfile b/gemfiles/ruby_3.0_kicks_latest.gemfile
new file mode 100644
index 00000000000..5f7a1be6801
--- /dev/null
+++ b/gemfiles/ruby_3.0_kicks_latest.gemfile
@@ -0,0 +1,44 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "benchmark-ips", "~> 2.8"
+gem "benchmark-memory", "< 0.2"
+gem "climate_control", "~> 0.2.0"
+gem "concurrent-ruby"
+gem "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0"
+gem "extlz4", "~> 0.3", ">= 0.3.3"
+gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1"]
+gem "json-schema", "< 3"
+gem "memory_profiler", "~> 0.9"
+gem "os", "~> 1.1"
+gem "pimpmychangelog", ">= 0.1.2"
+gem "pry"
+gem "pry-byebug"
+gem "pry-stack_explorer"
+gem "rake", ">= 10.5"
+gem "rake-compiler", "~> 1.1", ">= 1.1.1"
+gem "rspec", "~> 3.13"
+gem "rspec-collection_matchers", "~> 1.1"
+gem "rspec-wait", "~> 0"
+gem "rspec_junit_formatter", ">= 0.5.1"
+gem "rubocop", "~> 1.50.0", require: false
+gem "rubocop-packaging", "~> 0.5.2", require: false
+gem "rubocop-performance", "~> 1.9", require: false
+gem "rubocop-rspec", ["~> 2.20", "< 2.21"], require: false
+gem "simplecov"
+gem "simplecov-cobertura", "~> 2.1.0"
+gem "warning", "~> 1"
+gem "webmock", ">= 3.10.0"
+gem "webrick", ">= 1.7.0"
+gem "kicks"
+
+group :check do
+
+end
+
+group :dev do
+
+end
+
+gemspec path: "../"
diff --git a/gemfiles/ruby_3.0_kicks_min.gemfile b/gemfiles/ruby_3.0_kicks_min.gemfile
new file mode 100644
index 00000000000..70867647a62
--- /dev/null
+++ b/gemfiles/ruby_3.0_kicks_min.gemfile
@@ -0,0 +1,44 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "benchmark-ips", "~> 2.8"
+gem "benchmark-memory", "< 0.2"
+gem "climate_control", "~> 0.2.0"
+gem "concurrent-ruby"
+gem "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0"
+gem "extlz4", "~> 0.3", ">= 0.3.3"
+gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1"]
+gem "json-schema", "< 3"
+gem "memory_profiler", "~> 0.9"
+gem "os", "~> 1.1"
+gem "pimpmychangelog", ">= 0.1.2"
+gem "pry"
+gem "pry-byebug"
+gem "pry-stack_explorer"
+gem "rake", ">= 10.5"
+gem "rake-compiler", "~> 1.1", ">= 1.1.1"
+gem "rspec", "~> 3.13"
+gem "rspec-collection_matchers", "~> 1.1"
+gem "rspec-wait", "~> 0"
+gem "rspec_junit_formatter", ">= 0.5.1"
+gem "rubocop", "~> 1.50.0", require: false
+gem "rubocop-packaging", "~> 0.5.2", require: false
+gem "rubocop-performance", "~> 1.9", require: false
+gem "rubocop-rspec", ["~> 2.20", "< 2.21"], require: false
+gem "simplecov"
+gem "simplecov-cobertura", "~> 2.1.0"
+gem "warning", "~> 1"
+gem "webmock", ">= 3.10.0"
+gem "webrick", ">= 1.7.0"
+gem "kicks", "= 3.0.0"
+
+group :check do
+
+end
+
+group :dev do
+
+end
+
+gemspec path: "../"
diff --git a/gemfiles/ruby_3.0_sneakers_min.gemfile b/gemfiles/ruby_3.0_sneakers_min.gemfile
new file mode 100644
index 00000000000..49d75fa9144
--- /dev/null
+++ b/gemfiles/ruby_3.0_sneakers_min.gemfile
@@ -0,0 +1,44 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "benchmark-ips", "~> 2.8"
+gem "benchmark-memory", "< 0.2"
+gem "climate_control", "~> 0.2.0"
+gem "concurrent-ruby"
+gem "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0"
+gem "extlz4", "~> 0.3", ">= 0.3.3"
+gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1"]
+gem "json-schema", "< 3"
+gem "memory_profiler", "~> 0.9"
+gem "os", "~> 1.1"
+gem "pimpmychangelog", ">= 0.1.2"
+gem "pry"
+gem "pry-byebug"
+gem "pry-stack_explorer"
+gem "rake", ">= 10.5"
+gem "rake-compiler", "~> 1.1", ">= 1.1.1"
+gem "rspec", "~> 3.13"
+gem "rspec-collection_matchers", "~> 1.1"
+gem "rspec-wait", "~> 0"
+gem "rspec_junit_formatter", ">= 0.5.1"
+gem "rubocop", "~> 1.50.0", require: false
+gem "rubocop-packaging", "~> 0.5.2", require: false
+gem "rubocop-performance", "~> 1.9", require: false
+gem "rubocop-rspec", ["~> 2.20", "< 2.21"], require: false
+gem "simplecov"
+gem "simplecov-cobertura", "~> 2.1.0"
+gem "warning", "~> 1"
+gem "webmock", ">= 3.10.0"
+gem "webrick", ">= 1.7.0"
+gem "sneakers", "= 2.12.0"
+
+group :check do
+
+end
+
+group :dev do
+
+end
+
+gemspec path: "../"
diff --git a/gemfiles/ruby_3.1_kicks_latest.gemfile b/gemfiles/ruby_3.1_kicks_latest.gemfile
new file mode 100644
index 00000000000..5f7a1be6801
--- /dev/null
+++ b/gemfiles/ruby_3.1_kicks_latest.gemfile
@@ -0,0 +1,44 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "benchmark-ips", "~> 2.8"
+gem "benchmark-memory", "< 0.2"
+gem "climate_control", "~> 0.2.0"
+gem "concurrent-ruby"
+gem "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0"
+gem "extlz4", "~> 0.3", ">= 0.3.3"
+gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1"]
+gem "json-schema", "< 3"
+gem "memory_profiler", "~> 0.9"
+gem "os", "~> 1.1"
+gem "pimpmychangelog", ">= 0.1.2"
+gem "pry"
+gem "pry-byebug"
+gem "pry-stack_explorer"
+gem "rake", ">= 10.5"
+gem "rake-compiler", "~> 1.1", ">= 1.1.1"
+gem "rspec", "~> 3.13"
+gem "rspec-collection_matchers", "~> 1.1"
+gem "rspec-wait", "~> 0"
+gem "rspec_junit_formatter", ">= 0.5.1"
+gem "rubocop", "~> 1.50.0", require: false
+gem "rubocop-packaging", "~> 0.5.2", require: false
+gem "rubocop-performance", "~> 1.9", require: false
+gem "rubocop-rspec", ["~> 2.20", "< 2.21"], require: false
+gem "simplecov"
+gem "simplecov-cobertura", "~> 2.1.0"
+gem "warning", "~> 1"
+gem "webmock", ">= 3.10.0"
+gem "webrick", ">= 1.7.0"
+gem "kicks"
+
+group :check do
+
+end
+
+group :dev do
+
+end
+
+gemspec path: "../"
diff --git a/gemfiles/ruby_3.1_kicks_min.gemfile b/gemfiles/ruby_3.1_kicks_min.gemfile
new file mode 100644
index 00000000000..70867647a62
--- /dev/null
+++ b/gemfiles/ruby_3.1_kicks_min.gemfile
@@ -0,0 +1,44 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "benchmark-ips", "~> 2.8"
+gem "benchmark-memory", "< 0.2"
+gem "climate_control", "~> 0.2.0"
+gem "concurrent-ruby"
+gem "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0"
+gem "extlz4", "~> 0.3", ">= 0.3.3"
+gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1"]
+gem "json-schema", "< 3"
+gem "memory_profiler", "~> 0.9"
+gem "os", "~> 1.1"
+gem "pimpmychangelog", ">= 0.1.2"
+gem "pry"
+gem "pry-byebug"
+gem "pry-stack_explorer"
+gem "rake", ">= 10.5"
+gem "rake-compiler", "~> 1.1", ">= 1.1.1"
+gem "rspec", "~> 3.13"
+gem "rspec-collection_matchers", "~> 1.1"
+gem "rspec-wait", "~> 0"
+gem "rspec_junit_formatter", ">= 0.5.1"
+gem "rubocop", "~> 1.50.0", require: false
+gem "rubocop-packaging", "~> 0.5.2", require: false
+gem "rubocop-performance", "~> 1.9", require: false
+gem "rubocop-rspec", ["~> 2.20", "< 2.21"], require: false
+gem "simplecov"
+gem "simplecov-cobertura", "~> 2.1.0"
+gem "warning", "~> 1"
+gem "webmock", ">= 3.10.0"
+gem "webrick", ">= 1.7.0"
+gem "kicks", "= 3.0.0"
+
+group :check do
+
+end
+
+group :dev do
+
+end
+
+gemspec path: "../"
diff --git a/gemfiles/ruby_3.1_sneakers_min.gemfile b/gemfiles/ruby_3.1_sneakers_min.gemfile
new file mode 100644
index 00000000000..49d75fa9144
--- /dev/null
+++ b/gemfiles/ruby_3.1_sneakers_min.gemfile
@@ -0,0 +1,44 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "benchmark-ips", "~> 2.8"
+gem "benchmark-memory", "< 0.2"
+gem "climate_control", "~> 0.2.0"
+gem "concurrent-ruby"
+gem "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0"
+gem "extlz4", "~> 0.3", ">= 0.3.3"
+gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1"]
+gem "json-schema", "< 3"
+gem "memory_profiler", "~> 0.9"
+gem "os", "~> 1.1"
+gem "pimpmychangelog", ">= 0.1.2"
+gem "pry"
+gem "pry-byebug"
+gem "pry-stack_explorer"
+gem "rake", ">= 10.5"
+gem "rake-compiler", "~> 1.1", ">= 1.1.1"
+gem "rspec", "~> 3.13"
+gem "rspec-collection_matchers", "~> 1.1"
+gem "rspec-wait", "~> 0"
+gem "rspec_junit_formatter", ">= 0.5.1"
+gem "rubocop", "~> 1.50.0", require: false
+gem "rubocop-packaging", "~> 0.5.2", require: false
+gem "rubocop-performance", "~> 1.9", require: false
+gem "rubocop-rspec", ["~> 2.20", "< 2.21"], require: false
+gem "simplecov"
+gem "simplecov-cobertura", "~> 2.1.0"
+gem "warning", "~> 1"
+gem "webmock", ">= 3.10.0"
+gem "webrick", ">= 1.7.0"
+gem "sneakers", "= 2.12.0"
+
+group :check do
+
+end
+
+group :dev do
+
+end
+
+gemspec path: "../"
diff --git a/gemfiles/ruby_3.2_kicks_latest.gemfile b/gemfiles/ruby_3.2_kicks_latest.gemfile
new file mode 100644
index 00000000000..64f56dfc13a
--- /dev/null
+++ b/gemfiles/ruby_3.2_kicks_latest.gemfile
@@ -0,0 +1,43 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "benchmark-ips", "~> 2.8"
+gem "benchmark-memory", "< 0.2"
+gem "climate_control", "~> 0.2.0"
+gem "concurrent-ruby"
+gem "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0"
+gem "extlz4", "~> 0.3", ">= 0.3.3"
+gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1"]
+gem "json-schema", "< 3"
+gem "memory_profiler", "~> 0.9"
+gem "os", "~> 1.1"
+gem "pimpmychangelog", ">= 0.1.2"
+gem "pry"
+gem "pry-stack_explorer"
+gem "rake", ">= 10.5"
+gem "rake-compiler", "~> 1.1", ">= 1.1.1"
+gem "rspec", "~> 3.13"
+gem "rspec-collection_matchers", "~> 1.1"
+gem "rspec-wait", "~> 0"
+gem "rspec_junit_formatter", ">= 0.5.1"
+gem "rubocop", "~> 1.50.0", require: false
+gem "rubocop-packaging", "~> 0.5.2", require: false
+gem "rubocop-performance", "~> 1.9", require: false
+gem "rubocop-rspec", ["~> 2.20", "< 2.21"], require: false
+gem "simplecov"
+gem "simplecov-cobertura", "~> 2.1.0"
+gem "warning", "~> 1"
+gem "webmock", ">= 3.10.0"
+gem "webrick", ">= 1.7.0"
+gem "kicks"
+
+group :check do
+
+end
+
+group :dev do
+
+end
+
+gemspec path: "../"
diff --git a/gemfiles/ruby_3.2_kicks_min.gemfile b/gemfiles/ruby_3.2_kicks_min.gemfile
new file mode 100644
index 00000000000..ab3b79ba24a
--- /dev/null
+++ b/gemfiles/ruby_3.2_kicks_min.gemfile
@@ -0,0 +1,43 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "benchmark-ips", "~> 2.8"
+gem "benchmark-memory", "< 0.2"
+gem "climate_control", "~> 0.2.0"
+gem "concurrent-ruby"
+gem "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0"
+gem "extlz4", "~> 0.3", ">= 0.3.3"
+gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1"]
+gem "json-schema", "< 3"
+gem "memory_profiler", "~> 0.9"
+gem "os", "~> 1.1"
+gem "pimpmychangelog", ">= 0.1.2"
+gem "pry"
+gem "pry-stack_explorer"
+gem "rake", ">= 10.5"
+gem "rake-compiler", "~> 1.1", ">= 1.1.1"
+gem "rspec", "~> 3.13"
+gem "rspec-collection_matchers", "~> 1.1"
+gem "rspec-wait", "~> 0"
+gem "rspec_junit_formatter", ">= 0.5.1"
+gem "rubocop", "~> 1.50.0", require: false
+gem "rubocop-packaging", "~> 0.5.2", require: false
+gem "rubocop-performance", "~> 1.9", require: false
+gem "rubocop-rspec", ["~> 2.20", "< 2.21"], require: false
+gem "simplecov"
+gem "simplecov-cobertura", "~> 2.1.0"
+gem "warning", "~> 1"
+gem "webmock", ">= 3.10.0"
+gem "webrick", ">= 1.7.0"
+gem "kicks", "= 3.0.0"
+
+group :check do
+
+end
+
+group :dev do
+
+end
+
+gemspec path: "../"
diff --git a/gemfiles/ruby_3.2_sneakers_min.gemfile b/gemfiles/ruby_3.2_sneakers_min.gemfile
new file mode 100644
index 00000000000..06398c48e74
--- /dev/null
+++ b/gemfiles/ruby_3.2_sneakers_min.gemfile
@@ -0,0 +1,43 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "benchmark-ips", "~> 2.8"
+gem "benchmark-memory", "< 0.2"
+gem "climate_control", "~> 0.2.0"
+gem "concurrent-ruby"
+gem "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0"
+gem "extlz4", "~> 0.3", ">= 0.3.3"
+gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1"]
+gem "json-schema", "< 3"
+gem "memory_profiler", "~> 0.9"
+gem "os", "~> 1.1"
+gem "pimpmychangelog", ">= 0.1.2"
+gem "pry"
+gem "pry-stack_explorer"
+gem "rake", ">= 10.5"
+gem "rake-compiler", "~> 1.1", ">= 1.1.1"
+gem "rspec", "~> 3.13"
+gem "rspec-collection_matchers", "~> 1.1"
+gem "rspec-wait", "~> 0"
+gem "rspec_junit_formatter", ">= 0.5.1"
+gem "rubocop", "~> 1.50.0", require: false
+gem "rubocop-packaging", "~> 0.5.2", require: false
+gem "rubocop-performance", "~> 1.9", require: false
+gem "rubocop-rspec", ["~> 2.20", "< 2.21"], require: false
+gem "simplecov"
+gem "simplecov-cobertura", "~> 2.1.0"
+gem "warning", "~> 1"
+gem "webmock", ">= 3.10.0"
+gem "webrick", ">= 1.7.0"
+gem "sneakers", "= 2.12.0"
+
+group :check do
+
+end
+
+group :dev do
+
+end
+
+gemspec path: "../"
diff --git a/gemfiles/ruby_3.3_contrib.gemfile b/gemfiles/ruby_3.3_contrib.gemfile
index 6dab61251d9..099bf566d4d 100644
--- a/gemfiles/ruby_3.3_contrib.gemfile
+++ b/gemfiles/ruby_3.3_contrib.gemfile
@@ -38,7 +38,6 @@ gem "resque"
gem "roda", ">= 2.0.0"
gem "semantic_logger", "~> 4.0"
gem "sidekiq", "~> 7"
-gem "sneakers", ">= 2.12.0"
gem "sucker_punch"
gem "que", ">= 1.0.0"
diff --git a/gemfiles/ruby_3.3_contrib.gemfile.lock b/gemfiles/ruby_3.3_contrib.gemfile.lock
index 9ef671f2146..4468d20166a 100644
--- a/gemfiles/ruby_3.3_contrib.gemfile.lock
+++ b/gemfiles/ruby_3.3_contrib.gemfile.lock
@@ -11,7 +11,6 @@ GEM
remote: https://rubygems.org/
specs:
addressable (2.4.0)
- amq-protocol (2.3.2)
ast (2.4.2)
benchmark-ips (2.12.0)
benchmark-memory (0.1.2)
@@ -19,9 +18,6 @@ GEM
binding_of_caller (1.0.0)
debug_inspector (>= 0.0.1)
bson (4.15.0)
- bunny (2.20.3)
- amq-protocol (~> 2.3, >= 2.3.1)
- sorted_set (~> 1, >= 1.0.2)
climate_control (0.2.0)
coderay (1.1.3)
concurrent-ruby (1.2.2)
@@ -32,7 +28,7 @@ GEM
datadog-ruby_core_source (3.3.7)
debug_inspector (1.1.0)
diff-lcs (1.5.0)
- docile (1.4.0)
+ docile (1.4.1)
dogstatsd-ruby (5.5.0)
extlz4 (0.3.3)
ffi (1.17.1-aarch64-linux-gnu)
@@ -87,7 +83,6 @@ GEM
rake (12.3.3)
rake-compiler (1.2.1)
rake
- rbtree (0.4.6)
redis (5.0.6)
redis-client (>= 0.9.0)
redis-client (0.14.1)
@@ -149,42 +144,28 @@ GEM
ruby2_keywords (0.0.5)
semantic_logger (4.13.0)
concurrent-ruby (~> 1.0)
- serverengine (2.1.1)
- sigdump (~> 0.2.2)
- set (1.0.3)
sidekiq (7.1.0)
concurrent-ruby (< 2)
connection_pool (>= 2.3.0)
rack (>= 2.2.4)
redis-client (>= 0.14.0)
- sigdump (0.2.4)
- simplecov (0.21.2)
+ simplecov (0.22.0)
docile (~> 1.1)
simplecov-html (~> 0.11)
simplecov_json_formatter (~> 0.1)
simplecov-cobertura (2.1.0)
rexml
simplecov (~> 0.19)
- simplecov-html (0.12.3)
+ simplecov-html (0.13.1)
simplecov_json_formatter (0.1.4)
sinatra (3.0.6)
mustermann (~> 3.0)
rack (~> 2.2, >= 2.2.4)
rack-protection (= 3.0.6)
tilt (~> 2.0)
- sneakers (2.12.0)
- bunny (~> 2.14)
- concurrent-ruby (~> 1.0)
- rake (~> 12.3)
- serverengine (~> 2.1.0)
- thor
- sorted_set (1.0.3)
- rbtree
- set (~> 1.0)
strscan (3.1.0)
sucker_punch (3.1.0)
concurrent-ruby (~> 1.0)
- thor (1.2.2)
tilt (2.1.0)
unicode-display_width (2.4.2)
warning (1.3.0)
@@ -234,7 +215,6 @@ DEPENDENCIES
sidekiq (~> 7)
simplecov
simplecov-cobertura (~> 2.1.0)
- sneakers (>= 2.12.0)
sucker_punch
warning (~> 1)
webmock (>= 3.10.0)
diff --git a/gemfiles/ruby_3.3_kicks_latest.gemfile b/gemfiles/ruby_3.3_kicks_latest.gemfile
new file mode 100644
index 00000000000..64f56dfc13a
--- /dev/null
+++ b/gemfiles/ruby_3.3_kicks_latest.gemfile
@@ -0,0 +1,43 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "benchmark-ips", "~> 2.8"
+gem "benchmark-memory", "< 0.2"
+gem "climate_control", "~> 0.2.0"
+gem "concurrent-ruby"
+gem "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0"
+gem "extlz4", "~> 0.3", ">= 0.3.3"
+gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1"]
+gem "json-schema", "< 3"
+gem "memory_profiler", "~> 0.9"
+gem "os", "~> 1.1"
+gem "pimpmychangelog", ">= 0.1.2"
+gem "pry"
+gem "pry-stack_explorer"
+gem "rake", ">= 10.5"
+gem "rake-compiler", "~> 1.1", ">= 1.1.1"
+gem "rspec", "~> 3.13"
+gem "rspec-collection_matchers", "~> 1.1"
+gem "rspec-wait", "~> 0"
+gem "rspec_junit_formatter", ">= 0.5.1"
+gem "rubocop", "~> 1.50.0", require: false
+gem "rubocop-packaging", "~> 0.5.2", require: false
+gem "rubocop-performance", "~> 1.9", require: false
+gem "rubocop-rspec", ["~> 2.20", "< 2.21"], require: false
+gem "simplecov"
+gem "simplecov-cobertura", "~> 2.1.0"
+gem "warning", "~> 1"
+gem "webmock", ">= 3.10.0"
+gem "webrick", ">= 1.7.0"
+gem "kicks"
+
+group :check do
+
+end
+
+group :dev do
+
+end
+
+gemspec path: "../"
diff --git a/gemfiles/ruby_3.3_kicks_min.gemfile b/gemfiles/ruby_3.3_kicks_min.gemfile
new file mode 100644
index 00000000000..ab3b79ba24a
--- /dev/null
+++ b/gemfiles/ruby_3.3_kicks_min.gemfile
@@ -0,0 +1,43 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "benchmark-ips", "~> 2.8"
+gem "benchmark-memory", "< 0.2"
+gem "climate_control", "~> 0.2.0"
+gem "concurrent-ruby"
+gem "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0"
+gem "extlz4", "~> 0.3", ">= 0.3.3"
+gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1"]
+gem "json-schema", "< 3"
+gem "memory_profiler", "~> 0.9"
+gem "os", "~> 1.1"
+gem "pimpmychangelog", ">= 0.1.2"
+gem "pry"
+gem "pry-stack_explorer"
+gem "rake", ">= 10.5"
+gem "rake-compiler", "~> 1.1", ">= 1.1.1"
+gem "rspec", "~> 3.13"
+gem "rspec-collection_matchers", "~> 1.1"
+gem "rspec-wait", "~> 0"
+gem "rspec_junit_formatter", ">= 0.5.1"
+gem "rubocop", "~> 1.50.0", require: false
+gem "rubocop-packaging", "~> 0.5.2", require: false
+gem "rubocop-performance", "~> 1.9", require: false
+gem "rubocop-rspec", ["~> 2.20", "< 2.21"], require: false
+gem "simplecov"
+gem "simplecov-cobertura", "~> 2.1.0"
+gem "warning", "~> 1"
+gem "webmock", ">= 3.10.0"
+gem "webrick", ">= 1.7.0"
+gem "kicks", "= 3.0.0"
+
+group :check do
+
+end
+
+group :dev do
+
+end
+
+gemspec path: "../"
diff --git a/gemfiles/ruby_3.3_sneakers_min.gemfile b/gemfiles/ruby_3.3_sneakers_min.gemfile
new file mode 100644
index 00000000000..06398c48e74
--- /dev/null
+++ b/gemfiles/ruby_3.3_sneakers_min.gemfile
@@ -0,0 +1,43 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "benchmark-ips", "~> 2.8"
+gem "benchmark-memory", "< 0.2"
+gem "climate_control", "~> 0.2.0"
+gem "concurrent-ruby"
+gem "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0"
+gem "extlz4", "~> 0.3", ">= 0.3.3"
+gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1"]
+gem "json-schema", "< 3"
+gem "memory_profiler", "~> 0.9"
+gem "os", "~> 1.1"
+gem "pimpmychangelog", ">= 0.1.2"
+gem "pry"
+gem "pry-stack_explorer"
+gem "rake", ">= 10.5"
+gem "rake-compiler", "~> 1.1", ">= 1.1.1"
+gem "rspec", "~> 3.13"
+gem "rspec-collection_matchers", "~> 1.1"
+gem "rspec-wait", "~> 0"
+gem "rspec_junit_formatter", ">= 0.5.1"
+gem "rubocop", "~> 1.50.0", require: false
+gem "rubocop-packaging", "~> 0.5.2", require: false
+gem "rubocop-performance", "~> 1.9", require: false
+gem "rubocop-rspec", ["~> 2.20", "< 2.21"], require: false
+gem "simplecov"
+gem "simplecov-cobertura", "~> 2.1.0"
+gem "warning", "~> 1"
+gem "webmock", ">= 3.10.0"
+gem "webrick", ">= 1.7.0"
+gem "sneakers", "= 2.12.0"
+
+group :check do
+
+end
+
+group :dev do
+
+end
+
+gemspec path: "../"
diff --git a/gemfiles/ruby_3.4_kicks_latest.gemfile b/gemfiles/ruby_3.4_kicks_latest.gemfile
new file mode 100644
index 00000000000..cd40a1ded0b
--- /dev/null
+++ b/gemfiles/ruby_3.4_kicks_latest.gemfile
@@ -0,0 +1,46 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "base64"
+gem "benchmark-ips", "~> 2.8"
+gem "benchmark-memory", "< 0.2"
+gem "bigdecimal"
+gem "climate_control", "~> 0.2.0"
+gem "concurrent-ruby"
+gem "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0"
+gem "extlz4", "~> 0.3", ">= 0.3.3"
+gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1"]
+gem "json-schema", "< 3"
+gem "memory_profiler", "~> 0.9"
+gem "mutex_m"
+gem "os", "~> 1.1"
+gem "pimpmychangelog", ">= 0.1.2"
+gem "pry"
+gem "pry-stack_explorer"
+gem "rake", ">= 10.5"
+gem "rake-compiler", "~> 1.1", ">= 1.1.1"
+gem "rspec", "~> 3.13"
+gem "rspec-collection_matchers", "~> 1.1"
+gem "rspec-wait", "~> 0"
+gem "rspec_junit_formatter", ">= 0.5.1"
+gem "rubocop", "~> 1.50.0", require: false
+gem "rubocop-packaging", "~> 0.5.2", require: false
+gem "rubocop-performance", "~> 1.9", require: false
+gem "rubocop-rspec", ["~> 2.20", "< 2.21"], require: false
+gem "simplecov"
+gem "simplecov-cobertura", "~> 2.1.0"
+gem "warning", "~> 1"
+gem "webmock", ">= 3.10.0"
+gem "webrick", ">= 1.8.2"
+gem "kicks"
+
+group :check do
+
+end
+
+group :dev do
+
+end
+
+gemspec path: "../"
diff --git a/gemfiles/ruby_3.4_kicks_min.gemfile b/gemfiles/ruby_3.4_kicks_min.gemfile
new file mode 100644
index 00000000000..dd50233cbd7
--- /dev/null
+++ b/gemfiles/ruby_3.4_kicks_min.gemfile
@@ -0,0 +1,46 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "base64"
+gem "benchmark-ips", "~> 2.8"
+gem "benchmark-memory", "< 0.2"
+gem "bigdecimal"
+gem "climate_control", "~> 0.2.0"
+gem "concurrent-ruby"
+gem "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0"
+gem "extlz4", "~> 0.3", ">= 0.3.3"
+gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1"]
+gem "json-schema", "< 3"
+gem "memory_profiler", "~> 0.9"
+gem "mutex_m"
+gem "os", "~> 1.1"
+gem "pimpmychangelog", ">= 0.1.2"
+gem "pry"
+gem "pry-stack_explorer"
+gem "rake", ">= 10.5"
+gem "rake-compiler", "~> 1.1", ">= 1.1.1"
+gem "rspec", "~> 3.13"
+gem "rspec-collection_matchers", "~> 1.1"
+gem "rspec-wait", "~> 0"
+gem "rspec_junit_formatter", ">= 0.5.1"
+gem "rubocop", "~> 1.50.0", require: false
+gem "rubocop-packaging", "~> 0.5.2", require: false
+gem "rubocop-performance", "~> 1.9", require: false
+gem "rubocop-rspec", ["~> 2.20", "< 2.21"], require: false
+gem "simplecov"
+gem "simplecov-cobertura", "~> 2.1.0"
+gem "warning", "~> 1"
+gem "webmock", ">= 3.10.0"
+gem "webrick", ">= 1.8.2"
+gem "kicks", "= 3.0.0"
+
+group :check do
+
+end
+
+group :dev do
+
+end
+
+gemspec path: "../"
diff --git a/gemfiles/ruby_3.4_sneakers_min.gemfile b/gemfiles/ruby_3.4_sneakers_min.gemfile
new file mode 100644
index 00000000000..ec948b0bd41
--- /dev/null
+++ b/gemfiles/ruby_3.4_sneakers_min.gemfile
@@ -0,0 +1,46 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "base64"
+gem "benchmark-ips", "~> 2.8"
+gem "benchmark-memory", "< 0.2"
+gem "bigdecimal"
+gem "climate_control", "~> 0.2.0"
+gem "concurrent-ruby"
+gem "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0"
+gem "extlz4", "~> 0.3", ">= 0.3.3"
+gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1"]
+gem "json-schema", "< 3"
+gem "memory_profiler", "~> 0.9"
+gem "mutex_m"
+gem "os", "~> 1.1"
+gem "pimpmychangelog", ">= 0.1.2"
+gem "pry"
+gem "pry-stack_explorer"
+gem "rake", ">= 10.5"
+gem "rake-compiler", "~> 1.1", ">= 1.1.1"
+gem "rspec", "~> 3.13"
+gem "rspec-collection_matchers", "~> 1.1"
+gem "rspec-wait", "~> 0"
+gem "rspec_junit_formatter", ">= 0.5.1"
+gem "rubocop", "~> 1.50.0", require: false
+gem "rubocop-packaging", "~> 0.5.2", require: false
+gem "rubocop-performance", "~> 1.9", require: false
+gem "rubocop-rspec", ["~> 2.20", "< 2.21"], require: false
+gem "simplecov"
+gem "simplecov-cobertura", "~> 2.1.0"
+gem "warning", "~> 1"
+gem "webmock", ">= 3.10.0"
+gem "webrick", ">= 1.8.2"
+gem "sneakers", "= 2.12.0"
+
+group :check do
+
+end
+
+group :dev do
+
+end
+
+gemspec path: "../"
diff --git a/lib/datadog/tracing/contrib/registerable.rb b/lib/datadog/tracing/contrib/registerable.rb
index b9f4f936d66..997b1923a88 100644
--- a/lib/datadog/tracing/contrib/registerable.rb
+++ b/lib/datadog/tracing/contrib/registerable.rb
@@ -33,6 +33,17 @@ module ClassMethods
def register_as(name, registry: Contrib::REGISTRY, auto_patch: false, **options)
registry.add(name, new(name, **options), auto_patch)
end
+
+ # Registers this `alias_name` in the global tracer registry as an alias of `original_name`.
+ # Using `alias_name` or `original_name` become interchangeable.
+ # The configuration object is shared between the two names.
+ # The patcher will only run once if both are activated.
+ def register_as_alias(original_name, alias_name, registry: Contrib::REGISTRY)
+ original = registry[original_name]
+ raise ArgumentError, "integration '#{original_name}' not registered" unless original
+
+ registry.add(alias_name, original, false)
+ end
end
# Instance methods for registerable behavior
diff --git a/lib/datadog/tracing/contrib/sneakers/integration.rb b/lib/datadog/tracing/contrib/sneakers/integration.rb
index 1b3b8f71a5e..fd12abda1e1 100644
--- a/lib/datadog/tracing/contrib/sneakers/integration.rb
+++ b/lib/datadog/tracing/contrib/sneakers/integration.rb
@@ -13,13 +13,25 @@ module Sneakers
class Integration
include Contrib::Integration
- MINIMUM_VERSION = Gem::Version.new('2.12.0')
+ MINIMUM_SNEAKERS_VERSION = Gem::Version.new('2.12.0')
+ # All versions are supported. Kicks first version is 3.0.0.
+ MINIMUM_KICKS_VERSION = Gem::Version.new('3.0.0')
# @public_api Changing the integration name or integration options can cause breaking changes
register_as :sneakers, auto_patch: true
-
+ register_as_alias :sneakers, :kicks
+
+ # Sneakers development continues in the Kicks gem.
+ # The **only** thing that has changed is the gem name,
+ # even the file naming and module namespacing are the same (require 'sneakers', `::Sneakers`).
+ #
+ # The last version of Sneakers is 2.12.0.
+ # The first version of Kicks is 3.0.0. We currently support all versions of Kicks.
+ #
+ # @see https://github.com/jondot/sneakers/commit/9780692624c666b6db8266d2d5710f709cb0f2e2
def self.version
- Gem.loaded_specs['sneakers'] && Gem.loaded_specs['sneakers'].version
+ Gem.loaded_specs['sneakers'] && Gem.loaded_specs['sneakers'].version || \
+ Gem.loaded_specs['kicks'] && Gem.loaded_specs['kicks'].version
end
def self.loaded?
@@ -27,7 +39,7 @@ def self.loaded?
end
def self.compatible?
- super && version >= MINIMUM_VERSION
+ super && version >= MINIMUM_SNEAKERS_VERSION
end
def new_configuration
diff --git a/sig/datadog/tracing/contrib/registerable.rbs b/sig/datadog/tracing/contrib/registerable.rbs
index f08abbfd1e5..78201994c6d 100644
--- a/sig/datadog/tracing/contrib/registerable.rbs
+++ b/sig/datadog/tracing/contrib/registerable.rbs
@@ -5,6 +5,8 @@ module Datadog
def self.included: (untyped base) -> untyped
module ClassMethods
def register_as: (untyped name, ?registry: untyped, ?auto_patch: bool, **untyped options) -> untyped
+
+ def register_as_alias: (Symbol original_name, Symbol alias_name, registry: Registry) -> void
end
module InstanceMethods
attr_reader name: untyped
diff --git a/spec/datadog/tracing/contrib/registerable_spec.rb b/spec/datadog/tracing/contrib/registerable_spec.rb
index a3d5ef7a1ae..5a0cf6ff057 100644
--- a/spec/datadog/tracing/contrib/registerable_spec.rb
+++ b/spec/datadog/tracing/contrib/registerable_spec.rb
@@ -58,6 +58,44 @@
end
end
end
+
+ describe '#register_as_alias' do
+ subject(:register_as_alias) { registerable_class.register_as_alias(:original, :alias, **options) }
+
+ context 'when a registry' do
+ context 'is provided' do
+ let(:options) { { registry: registry } }
+ let(:registry) { Datadog::Tracing::Contrib::Registry.new }
+
+ context 'with the original integration not registered' do
+ it { expect { register_as_alias }.to raise_error(ArgumentError) }
+ end
+
+ context 'with the original integration registered' do
+ before { registerable_class.register_as(:original, registry: registry) }
+
+ it 'creates an alias to the original integration object' do
+ register_as_alias
+ expect(registry[:alias]).to be(registry[:original])
+ end
+ end
+ end
+
+ context 'is not provided' do
+ let(:options) { {} }
+ let(:registry) { Datadog::Tracing::Contrib::Registry.new }
+
+ before { registerable_class.register_as(:original, registry: registry) }
+
+ it 'invokes the global Datadog.registry' do
+ stub_const('Datadog::Tracing::Contrib::REGISTRY', registry)
+
+ register_as_alias
+ expect(registry[:alias]).to be(registry[:original])
+ end
+ end
+ end
+ end
end
describe 'instance behavior' do
diff --git a/spec/datadog/tracing/contrib/sneakers/integration_spec.rb b/spec/datadog/tracing/contrib/sneakers/integration_spec.rb
index 3a553a48c42..169dbbdcc8c 100644
--- a/spec/datadog/tracing/contrib/sneakers/integration_spec.rb
+++ b/spec/datadog/tracing/contrib/sneakers/integration_spec.rb
@@ -9,12 +9,17 @@
subject(:version) { described_class.version }
context 'when the "sneakers" gem is loaded' do
- include_context 'loaded gems', sneakers: described_class::MINIMUM_VERSION
+ include_context 'loaded gems', sneakers: described_class::MINIMUM_SNEAKERS_VERSION
it { is_expected.to be_a_kind_of(Gem::Version) }
end
- context 'when "sneakers" gem is not loaded' do
- include_context 'loaded gems', sneakers: nil
+ context 'when the "kicks" gem is loaded' do
+ include_context 'loaded gems', kicks: described_class::MINIMUM_KICKS_VERSION
+ it { is_expected.to be_a_kind_of(Gem::Version) }
+ end
+
+ context 'when neither gem is not loaded' do
+ include_context 'loaded gems', sneakers: nil, kicks: nil
it { is_expected.to be nil }
end
end
@@ -40,18 +45,32 @@
context 'when "sneakers" gem is loaded with a version' do
context 'that is less than the minimum' do
- include_context 'loaded gems', sneakers: decrement_gem_version(described_class::MINIMUM_VERSION)
+ include_context 'loaded gems',
+ sneakers: decrement_gem_version(described_class::MINIMUM_SNEAKERS_VERSION),
+ kicks: nil
+ it { is_expected.to be false }
+ end
+
+ context 'that meets the minimum version' do
+ include_context 'loaded gems', sneakers: described_class::MINIMUM_SNEAKERS_VERSION, kicks: nil
+ it { is_expected.to be true }
+ end
+ end
+
+ context 'when "kicks" gem is loaded with a version' do
+ context 'that is less than the minimum' do
+ include_context 'loaded gems', sneakers: nil, kicks: decrement_gem_version(described_class::MINIMUM_KICKS_VERSION)
it { is_expected.to be false }
end
context 'that meets the minimum version' do
- include_context 'loaded gems', sneakers: described_class::MINIMUM_VERSION
+ include_context 'loaded gems', sneakers: nil, kicks: described_class::MINIMUM_KICKS_VERSION
it { is_expected.to be true }
end
end
- context 'when gem is not loaded' do
- include_context 'loaded gems', sneakers: nil
+ context 'when neither gem is not loaded' do
+ include_context 'loaded gems', sneakers: nil, kicks: nil
it { is_expected.to be false }
end
end
diff --git a/spec/datadog/tracing/contrib/sneakers/tracer_spec.rb b/spec/datadog/tracing/contrib/sneakers/tracer_spec.rb
index 8798eb6a36b..0e04f022365 100644
--- a/spec/datadog/tracing/contrib/sneakers/tracer_spec.rb
+++ b/spec/datadog/tracing/contrib/sneakers/tracer_spec.rb
@@ -62,7 +62,7 @@ def work_with_params(_msg, _delivery_info, _metadata)
let(:delivery_info) { double }
let(:message) { Sneakers::ContentType.deserialize('{"foo":"bar"}', 'application/json') }
let(:handler) { Object.new }
- let(:metadata) { double }
+ let(:metadata) { { content_type: 'application/json' } }
let(:routing_key) { 'something' }
let(:consumer) { double('Consumer') }
@@ -72,7 +72,6 @@ def work_with_params(_msg, _delivery_info, _metadata)
allow(delivery_info).to receive(:routing_key).and_return(routing_key)
allow(delivery_info).to receive(:consumer).and_return(consumer)
allow(consumer).to receive(:queue).and_return(queue)
- allow(metadata).to receive(:[]).with(:content_type).and_return('application/json')
end
it do