Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add ability to silence exists warning message. #920

Merged
merged 1 commit into from Jun 11, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
@@ -1,5 +1,7 @@
# Unreleased

* Setting `Redis.exists_returns_integer = false` disables warning message about new behaviour.

# 4.2.0

* Convert commands to accept keyword arguments rather than option hashes. This both help catching typos, and reduce needless allocations.
Expand Down
28 changes: 23 additions & 5 deletions lib/redis.rb
Expand Up @@ -5,7 +5,20 @@

class Redis
class << self
attr_accessor :exists_returns_integer
attr_reader :exists_returns_integer

def exists_returns_integer=(value)
unless value
message = "`Redis#exists(key)` will return an Integer by default in redis-rb 4.3. The option to explicitly " \
"disable this behaviour via `Redis.exists_returns_integer` will be removed in 5.0. You should use " \
"`exists?` instead. "

::Kernel.warn(message)
end

@exists_returns_integer = value
end

attr_writer :current
end

Expand Down Expand Up @@ -561,11 +574,16 @@ def unlink(*keys)
# @return [Integer]
def exists(*keys)
if !Redis.exists_returns_integer && keys.size == 1
message = "`Redis#exists(key)` will return an Integer in redis-rb 4.3, if you want to keep the old behavior, " \
"use `exists?` instead. To opt-in to the new behavior now you can set Redis.exists_returns_integer = true. " \
"(#{::Kernel.caller(1, 1).first})\n"
if Redis.exists_returns_integer.nil?
message = "`Redis#exists(key)` will return an Integer in redis-rb 4.3. `exists?` returns a boolean, you " \
"should use it instead. To opt-in to the new behavior now you can set Redis.exists_returns_integer = " \
"true. To disable this message and keep the current (boolean) behaviour of 'exists' you can set " \
"`Redis.exists_returns_integer = false`, but this option will be removed in 5.0. " \
"(#{::Kernel.caller(1, 1).first})\n"

::Kernel.warn(message)
end

::Kernel.warn(message)
exists?(*keys)
else
_exists(*keys)
Expand Down