Module: Datadog::Tracing::Contrib::Configuration::CachingResolver
- Included in:
- ActiveRecord::Configuration::Resolver
- Defined in:
- lib/datadog/tracing/contrib/configuration/resolver.rb
Overview
The CachingResolver is a mixin that provides caching functionality to the Resolver class. This is useful when Resolver#resolve values that are expensive to compute. This is a size-limited, FIFO cache.
Instance Method Summary collapse
-
#add(matcher, value) ⇒ Object
Adds a new
matcher, associating with it avalue. - #initialize(*args, cache_limit: 200) ⇒ Object
-
#reset_cache ⇒ Object
Clears the internal cache.
-
#resolve(value) ⇒ Object
Matches an arbitrary value against the configured matchers previously set with
#add.
Instance Method Details
#add(matcher, value) ⇒ Object
Adds a new matcher, associating with it a value.
This value is returned when #resolve is called with a matching value for this matcher. When multiple matchers would match, #resolve returns the latest added one.
The matcher can be transformed internally by the #parse_matcher method before being stored.
The value can also be retrieved by calling #get with the same matcher added by this method.
115 116 117 118 |
# File 'lib/datadog/tracing/contrib/configuration/resolver.rb', line 115 def add(matcher, value) reset_cache # Bust the cache when a new matcher is added super end |
#initialize(*args, cache_limit: 200) ⇒ Object
94 95 96 97 98 99 |
# File 'lib/datadog/tracing/contrib/configuration/resolver.rb', line 94 def initialize(*args, cache_limit: 200) super(*args) @cache_limit = cache_limit @cache = {} end |
#reset_cache ⇒ Object
Clears the internal cache.
121 122 123 |
# File 'lib/datadog/tracing/contrib/configuration/resolver.rb', line 121 def reset_cache @cache.clear end |
#resolve(value) ⇒ Object
Matches an arbitrary value against the configured matchers previously set with #add.
If multiple matchers would match, returns the latest one.
102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/datadog/tracing/contrib/configuration/resolver.rb', line 102 def resolve(value) if @cache.key?(value) @cache[value] else if @cache.size >= @cache_limit @cache.shift # Remove the oldest entry if cache is full end @cache[value] = super end end |