Module: Datadog::Tracing::Contrib::ActiveSupport::Cache::Redis::Patcher
- Defined in:
- lib/datadog/tracing/contrib/active_support/cache/redis.rb
Overview
Patching behavior for Redis with ActiveSupport
Instance Method Summary collapse
- #cache_store_class(meth) ⇒ Object
-
#patch_redis?(meth) ⇒ Boolean
For Rails < 5.2 w/ redis-activesupport…
Instance Method Details
#cache_store_class(meth) ⇒ Object
31 32 33 34 35 36 37 38 39 40 |
# File 'lib/datadog/tracing/contrib/active_support/cache/redis.rb', line 31 def cache_store_class(meth) if patch_redis?(meth) [::ActiveSupport::Cache::RedisStore, ::ActiveSupport::Cache::Store] elsif Gem.loaded_specs['redis'] && defined?(::ActiveSupport::Cache::RedisCacheStore) \ && ::ActiveSupport::Cache::RedisCacheStore.instance_methods(false).include?(meth) [::ActiveSupport::Cache::RedisCacheStore, ::ActiveSupport::Cache::Store] else super end end |
#patch_redis?(meth) ⇒ Boolean
For Rails < 5.2 w/ redis-activesupport… When Redis is used, we can’t only patch Cache::Store as it is Cache::RedisStore, a sub-class of it that is used, in practice. We need to do a per-method monkey patching as some of them might be redefined, and some of them not. The latest version of redis-activesupport redefines write but leaves untouched read and delete: github.com/redis-store/redis-activesupport/blob/v4.1.5/lib/active_support/cache/redis_store.rb
For Rails >= 5.2 w/o redis-activesupport… ActiveSupport includes a Redis cache store internally, and does not require these overrides. github.com/rails/rails/blob/master/activesupport/lib/active_support/cache/redis_cache_store.rb
25 26 27 28 29 |
# File 'lib/datadog/tracing/contrib/active_support/cache/redis.rb', line 25 def patch_redis?(meth) !Gem.loaded_specs['redis-activesupport'].nil? \ && defined?(::ActiveSupport::Cache::RedisStore) \ && ::ActiveSupport::Cache::RedisStore.instance_methods(false).include?(meth) end |