diff --git a/Matrixfile b/Matrixfile index 2fa275e5f14..9d2e8529dab 100644 --- a/Matrixfile +++ b/Matrixfile @@ -229,6 +229,9 @@ 'rails6-semantic-logger' => '✅ 2.5 / ✅ 2.6 / ✅ 2.7 / ❌ 3.0 / ❌ 3.1 / ❌ 3.2 / ❌ 3.3 / ❌ 3.4 / ✅ jruby', 'rails61-semantic-logger' => '✅ 2.5 / ✅ 2.6 / ✅ 2.7 / ✅ 3.0 / ✅ 3.1 / ✅ 3.2 / ✅ 3.3 / ✅ 3.4 / ✅ jruby' }, + 'rails_old_redis' => { + 'rails-old-redis' => '✅ 2.5 / ✅ 2.6 / ✅ 2.7 / ✅ 3.0 / ✅ 3.1 / ✅ 3.2 / ✅ 3.3 / ✅ 3.4 / ✅ jruby', + }, 'action_cable' => { # FIXME: Enable the test for JRuby after fixing `log writing failed. closed stream` in CircleCI. 'rails5-mysql2' => '✅ 2.5 / ✅ 2.6 / ❌ 2.7 / ❌ 3.0 / ❌ 3.1 / ❌ 3.2 / ❌ 3.3 / ❌ 3.4 / ❌ jruby', diff --git a/Rakefile b/Rakefile index 5ddc8e14b16..0f5a522a447 100644 --- a/Rakefile +++ b/Rakefile @@ -153,6 +153,15 @@ namespace :spec do t.rspec_opts = args.to_a.join(' ') end + # Tests if Datadog::Tracing::Contrib::ActiveSupport::Cache::Redis::Patcher does not eager load + # ActiveSupport::Cache::RedisCacheStore when the version of Redis present is too old to be compatible. + # @see Datadog::Tracing::Contrib::ActiveSupport::Cache::Redis::Patcher#patch_redis_cache_store? + desc '' # "Explicitly hiding from `rake -T`" + RSpec::Core::RakeTask.new(:rails_old_redis) do |t, args| + t.pattern = 'spec/datadog/tracing/contrib/rails/cache_spec.rb' + t.rspec_opts = args.to_a.join(' ') + end + desc '' # "Explicitly hiding from `rake -T`" RSpec::Core::RakeTask.new(:hanami) do |t, args| t.pattern = 'spec/datadog/tracing/contrib/hanami/**/*_spec.rb' diff --git a/appraisal/jruby-9.2.rb b/appraisal/jruby-9.2.rb index 571acd7252c..5e4073d035f 100644 --- a/appraisal/jruby-9.2.rb +++ b/appraisal/jruby-9.2.rb @@ -151,6 +151,16 @@ gem 'i18n', '1.8.7', platform: :jruby # Removal pending: https://github.com/ruby-i18n/i18n/issues/555#issuecomment-772112169 end +appraise 'rails-old-redis' do + # All dependencies except Redis < 4 are not important, they are just required to run Rails tests. + gem 'redis', '< 4' + gem 'rails', '~> 6.1.0' + gem 'activerecord-jdbcpostgresql-adapter', platform: :jruby + gem 'sprockets', '< 4' + gem 'lograge', '~> 0.11' + gem 'net-smtp' +end + appraise 'resque2-redis3' do gem 'redis', '< 4.0' gem 'resque', '>= 2.0' diff --git a/appraisal/jruby-9.3.rb b/appraisal/jruby-9.3.rb index f796fd81c21..f51344a8562 100644 --- a/appraisal/jruby-9.3.rb +++ b/appraisal/jruby-9.3.rb @@ -131,6 +131,16 @@ gem 'rails_semantic_logger', '~> 4.0' end +appraise 'rails-old-redis' do + # All dependencies except Redis < 4 are not important, they are just required to run Rails tests. + gem 'redis', '< 4' + gem 'rails', '~> 6.1.0' + gem 'activerecord-jdbcpostgresql-adapter', platform: :jruby + gem 'sprockets', '< 4' + gem 'lograge', '~> 0.11' + gem 'net-smtp' +end + appraise 'resque2-redis3' do gem 'redis', '~> 3.0' gem 'resque', '>= 2.0' diff --git a/appraisal/jruby-9.4.rb b/appraisal/jruby-9.4.rb index 6fce8d81830..947d54885cb 100644 --- a/appraisal/jruby-9.4.rb +++ b/appraisal/jruby-9.4.rb @@ -41,6 +41,16 @@ gem 'net-smtp' end +appraise 'rails-old-redis' do + # All dependencies except Redis < 4 are not important, they are just required to run Rails tests. + gem 'redis', '< 4' + gem 'rails', '~> 6.1.0' + gem 'activerecord-jdbcpostgresql-adapter', platform: :jruby + gem 'sprockets', '< 4' + gem 'lograge', '~> 0.11' + gem 'net-smtp' +end + appraise 'resque2-redis3' do gem 'redis', '< 4.0' gem 'resque', '>= 2.0' diff --git a/appraisal/ruby-2.5.rb b/appraisal/ruby-2.5.rb index 1249ba7e9c6..502c998055d 100644 --- a/appraisal/ruby-2.5.rb +++ b/appraisal/ruby-2.5.rb @@ -184,6 +184,15 @@ gem 'rails_semantic_logger', '~> 4.0' end +appraise 'rails-old-redis' do + # All dependencies except Redis < 4 are not important, they are just required to run Rails tests. + gem 'redis', '< 4' + gem 'rails', '~> 6.1.0' + gem 'pg', '>= 1.1', platform: :ruby + gem 'sprockets', '< 4' + gem 'lograge', '~> 0.11' +end + appraise 'resque2-redis3' do gem 'redis', '< 4.0' gem 'resque', '>= 2.0' diff --git a/appraisal/ruby-2.6.rb b/appraisal/ruby-2.6.rb index 7de49f45740..c89e19893c9 100644 --- a/appraisal/ruby-2.6.rb +++ b/appraisal/ruby-2.6.rb @@ -137,6 +137,15 @@ gem 'rails_semantic_logger', '~> 4.0' end +appraise 'rails-old-redis' do + # All dependencies except Redis < 4 are not important, they are just required to run Rails tests. + gem 'redis', '< 4' + gem 'rails', '~> 6.1.0' + gem 'pg', '>= 1.1', platform: :ruby + gem 'sprockets', '< 4' + gem 'lograge', '~> 0.11' +end + appraise 'resque2-redis3' do gem 'redis', '~> 3.0' gem 'resque', '>= 2.0' diff --git a/appraisal/ruby-2.7.rb b/appraisal/ruby-2.7.rb index 60d2ec62d9d..88b3b0f1e98 100644 --- a/appraisal/ruby-2.7.rb +++ b/appraisal/ruby-2.7.rb @@ -137,6 +137,15 @@ gem 'rails_semantic_logger', '~> 4.0' end +appraise 'rails-old-redis' do + # All dependencies except Redis < 4 are not important, they are just required to run Rails tests. + gem 'redis', '< 4' + gem 'rails', '~> 6.1.0' + gem 'pg', '>= 1.1', platform: :ruby + gem 'sprockets', '< 4' + gem 'lograge', '~> 0.11' +end + appraise 'resque2-redis3' do gem 'redis', '< 4.0' gem 'resque', '>= 2.0' diff --git a/appraisal/ruby-3.0.rb b/appraisal/ruby-3.0.rb index f4b00ee4ec0..ac024429e2f 100644 --- a/appraisal/ruby-3.0.rb +++ b/appraisal/ruby-3.0.rb @@ -58,6 +58,15 @@ gem 'rails', '~> 7.1.0' end +appraise 'rails-old-redis' do + # All dependencies except Redis < 4 are not important, they are just required to run Rails tests. + gem 'redis', '< 4' + gem 'rails', '~> 6.1.0' + gem 'pg', '>= 1.1', platform: :ruby + gem 'sprockets', '< 4' + gem 'lograge', '~> 0.11' +end + appraise 'resque2-redis3' do gem 'redis', '< 4.0' gem 'resque', '>= 2.0' diff --git a/appraisal/ruby-3.1.rb b/appraisal/ruby-3.1.rb index f4b00ee4ec0..ac024429e2f 100644 --- a/appraisal/ruby-3.1.rb +++ b/appraisal/ruby-3.1.rb @@ -58,6 +58,15 @@ gem 'rails', '~> 7.1.0' end +appraise 'rails-old-redis' do + # All dependencies except Redis < 4 are not important, they are just required to run Rails tests. + gem 'redis', '< 4' + gem 'rails', '~> 6.1.0' + gem 'pg', '>= 1.1', platform: :ruby + gem 'sprockets', '< 4' + gem 'lograge', '~> 0.11' +end + appraise 'resque2-redis3' do gem 'redis', '< 4.0' gem 'resque', '>= 2.0' diff --git a/appraisal/ruby-3.2.rb b/appraisal/ruby-3.2.rb index f4b00ee4ec0..ac024429e2f 100644 --- a/appraisal/ruby-3.2.rb +++ b/appraisal/ruby-3.2.rb @@ -58,6 +58,15 @@ gem 'rails', '~> 7.1.0' end +appraise 'rails-old-redis' do + # All dependencies except Redis < 4 are not important, they are just required to run Rails tests. + gem 'redis', '< 4' + gem 'rails', '~> 6.1.0' + gem 'pg', '>= 1.1', platform: :ruby + gem 'sprockets', '< 4' + gem 'lograge', '~> 0.11' +end + appraise 'resque2-redis3' do gem 'redis', '< 4.0' gem 'resque', '>= 2.0' diff --git a/appraisal/ruby-3.3.rb b/appraisal/ruby-3.3.rb index 77faa8ba5c7..d361fcd68a7 100644 --- a/appraisal/ruby-3.3.rb +++ b/appraisal/ruby-3.3.rb @@ -58,6 +58,15 @@ gem 'rails', '~> 7.1.0' end +appraise 'rails-old-redis' do + # All dependencies except Redis < 4 are not important, they are just required to run Rails tests. + gem 'redis', '< 4' + gem 'rails', '~> 6.1.0' + gem 'pg', '>= 1.1', platform: :ruby + gem 'sprockets', '< 4' + gem 'lograge', '~> 0.11' +end + appraise 'resque2-redis3' do gem 'redis', '< 4.0' gem 'resque', '>= 2.0' diff --git a/appraisal/ruby-3.4.rb b/appraisal/ruby-3.4.rb index 6cb1bf51ce2..e83945820bc 100644 --- a/appraisal/ruby-3.4.rb +++ b/appraisal/ruby-3.4.rb @@ -58,6 +58,15 @@ gem 'rails', '~> 7.1.0' end +appraise 'rails-old-redis' do + # All dependencies except Redis < 4 are not important, they are just required to run Rails tests. + gem 'redis', '< 4' + gem 'rails', '~> 6.1.0' + gem 'pg', '>= 1.1', platform: :ruby + gem 'sprockets', '< 4' + gem 'lograge', '~> 0.11' +end + appraise 'resque2-redis3' do gem 'redis', '< 4.0' gem 'resque', '>= 2.0' diff --git a/gemfiles/jruby_9.2_rails_old_redis.gemfile b/gemfiles/jruby_9.2_rails_old_redis.gemfile new file mode 100644 index 00000000000..7b73020384b --- /dev/null +++ b/gemfiles/jruby_9.2_rails_old_redis.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 "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", git: "https://github.com/DataDog/simplecov", ref: "3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db" +gem "simplecov-cobertura", "~> 2.1.0" +gem "warning", "~> 1" +gem "webmock", ">= 3.10.0" +gem "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0" +gem "redis", "< 4" +gem "rails", "~> 6.1.0" +gem "activerecord-jdbcpostgresql-adapter", platform: :jruby +gem "sprockets", "< 4" +gem "lograge", "~> 0.11" +gem "net-smtp" + +group :check do + +end + +group :dev do + +end + +gemspec path: "../" diff --git a/gemfiles/jruby_9.3_rails_old_redis.gemfile b/gemfiles/jruby_9.3_rails_old_redis.gemfile new file mode 100644 index 00000000000..2529ebfb26e --- /dev/null +++ b/gemfiles/jruby_9.3_rails_old_redis.gemfile @@ -0,0 +1,45 @@ +# 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 "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", git: "https://github.com/DataDog/simplecov", ref: "3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db" +gem "simplecov-cobertura", "~> 2.1.0" +gem "warning", "~> 1" +gem "webmock", ">= 3.10.0" +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 "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0" +gem "redis", "< 4" +gem "rails", "~> 6.1.0" +gem "activerecord-jdbcpostgresql-adapter", platform: :jruby +gem "sprockets", "< 4" +gem "lograge", "~> 0.11" +gem "net-smtp" + +group :check do + +end + +group :dev do + +end + +gemspec path: "../" diff --git a/gemfiles/jruby_9.4_rails_old_redis.gemfile b/gemfiles/jruby_9.4_rails_old_redis.gemfile new file mode 100644 index 00000000000..643f9bbd829 --- /dev/null +++ b/gemfiles/jruby_9.4_rails_old_redis.gemfile @@ -0,0 +1,46 @@ +# 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 "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", git: "https://github.com/DataDog/simplecov", ref: "3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db" +gem "simplecov-cobertura", "~> 2.1.0" +gem "warning", "~> 1" +gem "webmock", ">= 3.10.0" +gem "webrick", ">= 1.7.0" +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 "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0" +gem "redis", "< 4" +gem "rails", "~> 6.1.0" +gem "activerecord-jdbcpostgresql-adapter", platform: :jruby +gem "sprockets", "< 4" +gem "lograge", "~> 0.11" +gem "net-smtp" + +group :check do + +end + +group :dev do + +end + +gemspec path: "../" diff --git a/gemfiles/ruby_2.5_rails_old_redis.gemfile b/gemfiles/ruby_2.5_rails_old_redis.gemfile new file mode 100644 index 00000000000..f6a144fa6f9 --- /dev/null +++ b/gemfiles/ruby_2.5_rails_old_redis.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 "extlz4", "~> 0.3", ">= 0.3.3" +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", git: "https://github.com/DataDog/simplecov", ref: "3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db" +gem "simplecov-cobertura", "~> 2.1.0" +gem "warning", "~> 1" +gem "webmock", ">= 3.10.0" +gem "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0" +gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1", "< 3.19.2"] +gem "redis", "< 4" +gem "rails", "~> 6.1.0" +gem "pg", ">= 1.1", platform: :ruby +gem "sprockets", "< 4" +gem "lograge", "~> 0.11" + +group :check do + +end + +group :dev do + +end + +gemspec path: "../" diff --git a/gemfiles/ruby_2.6_rails_old_redis.gemfile b/gemfiles/ruby_2.6_rails_old_redis.gemfile new file mode 100644 index 00000000000..672ac8d0500 --- /dev/null +++ b/gemfiles/ruby_2.6_rails_old_redis.gemfile @@ -0,0 +1,47 @@ +# 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 "extlz4", "~> 0.3", ">= 0.3.3" +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 "simplecov", git: "https://github.com/DataDog/simplecov", ref: "3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db" +gem "simplecov-cobertura", "~> 2.1.0" +gem "warning", "~> 1" +gem "webmock", ">= 3.10.0" +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 "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0" +gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1", "< 3.19.2"] +gem "redis", "< 4" +gem "rails", "~> 6.1.0" +gem "pg", ">= 1.1", platform: :ruby +gem "sprockets", "< 4" +gem "lograge", "~> 0.11" + +group :check do + +end + +group :dev do + +end + +gemspec path: "../" diff --git a/gemfiles/ruby_2.7_rails_old_redis.gemfile b/gemfiles/ruby_2.7_rails_old_redis.gemfile new file mode 100644 index 00000000000..963760610a1 --- /dev/null +++ b/gemfiles/ruby_2.7_rails_old_redis.gemfile @@ -0,0 +1,47 @@ +# 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 "extlz4", "~> 0.3", ">= 0.3.3" +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 "simplecov", git: "https://github.com/DataDog/simplecov", ref: "3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db" +gem "simplecov-cobertura", "~> 2.1.0" +gem "warning", "~> 1" +gem "webmock", ">= 3.10.0" +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 "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0" +gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1"] +gem "redis", "< 4" +gem "rails", "~> 6.1.0" +gem "pg", ">= 1.1", platform: :ruby +gem "sprockets", "< 4" +gem "lograge", "~> 0.11" + +group :check do + +end + +group :dev do + +end + +gemspec path: "../" diff --git a/gemfiles/ruby_3.0_rails_old_redis.gemfile b/gemfiles/ruby_3.0_rails_old_redis.gemfile new file mode 100644 index 00000000000..40fe62d2eeb --- /dev/null +++ b/gemfiles/ruby_3.0_rails_old_redis.gemfile @@ -0,0 +1,48 @@ +# 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 "extlz4", "~> 0.3", ">= 0.3.3" +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 "simplecov", git: "https://github.com/DataDog/simplecov", ref: "3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db" +gem "simplecov-cobertura", "~> 2.1.0" +gem "warning", "~> 1" +gem "webmock", ">= 3.10.0" +gem "webrick", ">= 1.7.0" +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 "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0" +gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1"] +gem "redis", "< 4" +gem "rails", "~> 6.1.0" +gem "pg", ">= 1.1", platform: :ruby +gem "sprockets", "< 4" +gem "lograge", "~> 0.11" + +group :check do + +end + +group :dev do + +end + +gemspec path: "../" diff --git a/gemfiles/ruby_3.1_rails_old_redis.gemfile b/gemfiles/ruby_3.1_rails_old_redis.gemfile new file mode 100644 index 00000000000..40fe62d2eeb --- /dev/null +++ b/gemfiles/ruby_3.1_rails_old_redis.gemfile @@ -0,0 +1,48 @@ +# 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 "extlz4", "~> 0.3", ">= 0.3.3" +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 "simplecov", git: "https://github.com/DataDog/simplecov", ref: "3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db" +gem "simplecov-cobertura", "~> 2.1.0" +gem "warning", "~> 1" +gem "webmock", ">= 3.10.0" +gem "webrick", ">= 1.7.0" +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 "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0" +gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1"] +gem "redis", "< 4" +gem "rails", "~> 6.1.0" +gem "pg", ">= 1.1", platform: :ruby +gem "sprockets", "< 4" +gem "lograge", "~> 0.11" + +group :check do + +end + +group :dev do + +end + +gemspec path: "../" diff --git a/gemfiles/ruby_3.2_rails_old_redis.gemfile b/gemfiles/ruby_3.2_rails_old_redis.gemfile new file mode 100644 index 00000000000..6eba23b30d0 --- /dev/null +++ b/gemfiles/ruby_3.2_rails_old_redis.gemfile @@ -0,0 +1,47 @@ +# 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 "extlz4", "~> 0.3", ">= 0.3.3" +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 "simplecov", git: "https://github.com/DataDog/simplecov", ref: "3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db" +gem "simplecov-cobertura", "~> 2.1.0" +gem "warning", "~> 1" +gem "webmock", ">= 3.10.0" +gem "webrick", ">= 1.7.0" +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 "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0" +gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1"] +gem "redis", "< 4" +gem "rails", "~> 6.1.0" +gem "pg", ">= 1.1", platform: :ruby +gem "sprockets", "< 4" +gem "lograge", "~> 0.11" + +group :check do + +end + +group :dev do + +end + +gemspec path: "../" diff --git a/gemfiles/ruby_3.3_rails_old_redis.gemfile b/gemfiles/ruby_3.3_rails_old_redis.gemfile new file mode 100644 index 00000000000..6eba23b30d0 --- /dev/null +++ b/gemfiles/ruby_3.3_rails_old_redis.gemfile @@ -0,0 +1,47 @@ +# 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 "extlz4", "~> 0.3", ">= 0.3.3" +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 "simplecov", git: "https://github.com/DataDog/simplecov", ref: "3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db" +gem "simplecov-cobertura", "~> 2.1.0" +gem "warning", "~> 1" +gem "webmock", ">= 3.10.0" +gem "webrick", ">= 1.7.0" +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 "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0" +gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1"] +gem "redis", "< 4" +gem "rails", "~> 6.1.0" +gem "pg", ">= 1.1", platform: :ruby +gem "sprockets", "< 4" +gem "lograge", "~> 0.11" + +group :check do + +end + +group :dev do + +end + +gemspec path: "../" diff --git a/gemfiles/ruby_3.4_rails_old_redis.gemfile b/gemfiles/ruby_3.4_rails_old_redis.gemfile new file mode 100644 index 00000000000..a1fa7abb9b3 --- /dev/null +++ b/gemfiles/ruby_3.4_rails_old_redis.gemfile @@ -0,0 +1,51 @@ +# 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 "extlz4", "~> 0.3", ">= 0.3.3" +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 "simplecov", git: "https://github.com/DataDog/simplecov", ref: "3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db" +gem "simplecov-cobertura", "~> 2.1.0" +gem "warning", "~> 1" +gem "webmock", ">= 3.10.0" +gem "webrick", ">= 1.8.2" +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 "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0" +gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1"] +gem "strscan", git: "https://github.com/ruby/strscan", ref: "041b15df4ccc067deabd85fd489b2c15961d0e2f" +gem "base64" +gem "bigdecimal" +gem "mutex_m" +gem "redis", "< 4" +gem "rails", "~> 6.1.0" +gem "pg", ">= 1.1", platform: :ruby +gem "sprockets", "< 4" +gem "lograge", "~> 0.11" + +group :check do + +end + +group :dev do + +end + +gemspec path: "../" diff --git a/lib/datadog/tracing/contrib/active_support/cache/redis.rb b/lib/datadog/tracing/contrib/active_support/cache/redis.rb index 4004ab4a136..e9ce321caf5 100644 --- a/lib/datadog/tracing/contrib/active_support/cache/redis.rb +++ b/lib/datadog/tracing/contrib/active_support/cache/redis.rb @@ -22,17 +22,29 @@ module Patcher # For Rails >= 5.2 w/o redis-activesupport... # ActiveSupport includes a Redis cache store internally, and does not require these overrides. # https://github.com/rails/rails/blob/master/activesupport/lib/active_support/cache/redis_cache_store.rb - def patch_redis?(meth) + def patch_redis_store?(meth) !Gem.loaded_specs['redis-activesupport'].nil? \ && defined?(::ActiveSupport::Cache::RedisStore) \ && ::ActiveSupport::Cache::RedisStore.instance_methods(false).include?(meth) end + # Patches the Rails built-in Redis cache backend `redis_cache_store`, added in Rails 5.2. + # We avoid loading the RedisCacheStore class, as it invokes the statement `gem "redis", ">= 4.0.1"` which + # fails if the application is using an old version of Redis, or not using Redis at all. + # @see https://github.com/rails/rails/blob/d0dcb8fa6073a0c4d42600c15e82e3bb386b27d3/activesupport/lib/active_support/cache/redis_cache_store.rb#L4 + def patch_redis_cache_store?(meth) + Gem.loaded_specs['redis'] && + # Autoload constants return `constant` for `defined?`, but that doesn't mean they are loaded... + defined?(::ActiveSupport::Cache::RedisCacheStore) && + # ... to check that we need to call `autoload?` and check if it returns `nil`, meaning it's loaded. + ::ActiveSupport::Cache.autoload?(:RedisCacheStore).nil? && + ::ActiveSupport::Cache::RedisCacheStore.instance_methods(false).include?(meth) + end + def cache_store_class(meth) - if patch_redis?(meth) + if patch_redis_store?(meth) [::ActiveSupport::Cache::RedisStore, ::ActiveSupport::Cache::Store] - elsif Gem.loaded_specs['redis'] && defined?(::ActiveSupport::Cache::RedisCacheStore) \ - && ::ActiveSupport::Cache::RedisCacheStore.instance_methods(false).include?(meth) + elsif patch_redis_cache_store?(meth) [::ActiveSupport::Cache::RedisCacheStore, ::ActiveSupport::Cache::Store] else super diff --git a/sig/datadog/tracing/contrib/active_support/cache/patcher.rbs b/sig/datadog/tracing/contrib/active_support/cache/patcher.rbs index 42372f58fba..302617fbfb3 100644 --- a/sig/datadog/tracing/contrib/active_support/cache/patcher.rbs +++ b/sig/datadog/tracing/contrib/active_support/cache/patcher.rbs @@ -10,7 +10,7 @@ module Datadog def self?.patch: () -> untyped - def self?.cache_store_class: (untyped meth) -> untyped + def self?.cache_store_class: (Symbol meth) -> Array[Class] def self?.patch_cache_store_read: () -> untyped diff --git a/sig/datadog/tracing/contrib/active_support/cache/redis.rbs b/sig/datadog/tracing/contrib/active_support/cache/redis.rbs index 181f0a49538..a0a624c6614 100644 --- a/sig/datadog/tracing/contrib/active_support/cache/redis.rbs +++ b/sig/datadog/tracing/contrib/active_support/cache/redis.rbs @@ -5,9 +5,9 @@ module Datadog module Cache module Redis module Patcher - def patch_redis?: (untyped meth) -> untyped - - def cache_store_class: (untyped meth) -> untyped + def patch_redis_store?: (Symbol) -> bool + def patch_redis_cache_store?: (Symbol) -> bool + def cache_store_class: (Symbol) -> Array[Class] end end end