Proposal: alternative to Redis::BaseObject.expiration_filter #174
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
PRs #172 and #173 highlight a weakness in the current implementation supporting expiration options on class macros, notably in
Redis::BaseObject.expiration_filter
:redis-objects/lib/redis/base_object.rb
Line 26 in dffb9a0
This approach requires maintainers to register all appropriate methods and theirs aliases with
expiration_filter
. This is problematic forRedis::Objects
which makes heavy use of alias methods in subclasses.An alternative approach ideally obviates the need for a separate registry, makes it explicit that expiration is supported within the method definition itself, and handles alias methods seamlessly.
I propose replacing the current implementation with the following:
Subclasses would simply pass the method implementation as a block to
allow_expiration
:This PR depends on tests implemented in #172 and #173.