Avoid as much repetition as possible between RedisProxy and RedisStoreProxy

This commit is contained in:
Gonzalo Rodriguez 2018-06-26 14:24:17 -03:00
parent b40b5718dc
commit 673cf98157
No known key found for this signature in database
GPG key ID: 5DB8B81B049B8AB1
2 changed files with 13 additions and 30 deletions

View file

@ -6,16 +6,21 @@ module Rack
class Attack
module StoreProxy
class RedisProxy < SimpleDelegator
def initialize(*args)
if Gem::Version.new(Redis::VERSION) < Gem::Version.new("3")
warn 'RackAttack requires Redis gem >= 3.0.0.'
end
super(*args)
end
def self.handle?(store)
defined?(::Redis) && store.is_a?(::Redis)
end
def initialize(store)
super(store)
end
def read(key)
get(key)
rescue Redis::BaseError
end
def write(key, value, options = {})
@ -24,6 +29,7 @@ module Rack
else
set(key, value)
end
rescue Redis::BaseError
end
def increment(key, amount, options = {})
@ -35,10 +41,12 @@ module Rack
end
count.value if count
rescue Redis::BaseError
end
def delete(key, _options = {})
del(key)
rescue Redis::BaseError
end
end
end

View file

@ -5,15 +5,7 @@ require 'delegate'
module Rack
class Attack
module StoreProxy
class RedisStoreProxy < SimpleDelegator
def initialize(*args)
if Gem::Version.new(Redis::VERSION) < Gem::Version.new("3")
warn 'RackAttack requires Redis gem >= 3.0.0.'
end
super(*args)
end
class RedisStoreProxy < RedisProxy
def self.handle?(store)
defined?(::Redis::Store) && store.is_a?(::Redis::Store)
end
@ -31,23 +23,6 @@ module Rack
end
rescue Redis::BaseError
end
def increment(key, amount, options = {})
count = nil
pipelined do
count = incrby(key, amount)
expire(key, options[:expires_in]) if options[:expires_in]
end
count.value if count
rescue Redis::BaseError
end
def delete(key, _options = {})
del(key)
rescue Redis::BaseError
end
end
end
end