From 04eeeb9a338bb81145b799565ad472e52f7b6cb5 Mon Sep 17 00:00:00 2001 From: Gonzalo Rodriguez Date: Thu, 28 Feb 2019 22:51:57 -0300 Subject: [PATCH] refactor: avoid rescuing pattern repetition --- lib/rack/attack/store_proxy/dalli_proxy.rb | 38 +++++++++++-------- lib/rack/attack/store_proxy/redis_proxy.rb | 28 +++++++------- .../attack/store_proxy/redis_store_proxy.rb | 10 ++--- 3 files changed, 40 insertions(+), 36 deletions(-) diff --git a/lib/rack/attack/store_proxy/dalli_proxy.rb b/lib/rack/attack/store_proxy/dalli_proxy.rb index 0b6cfb0..fef6179 100644 --- a/lib/rack/attack/store_proxy/dalli_proxy.rb +++ b/lib/rack/attack/store_proxy/dalli_proxy.rb @@ -24,35 +24,35 @@ module Rack end def read(key) - with do |client| - client.get(key) + rescuing do + with do |client| + client.get(key) + end end - rescue Dalli::DalliError - nil end def write(key, value, options = {}) - with do |client| - client.set(key, value, options.fetch(:expires_in, 0), raw: true) + rescuing do + with do |client| + client.set(key, value, options.fetch(:expires_in, 0), raw: true) + end end - rescue Dalli::DalliError - nil end def increment(key, amount, options = {}) - with do |client| - client.incr(key, amount, options.fetch(:expires_in, 0), amount) + rescuing do + with do |client| + client.incr(key, amount, options.fetch(:expires_in, 0), amount) + end end - rescue Dalli::DalliError - nil end def delete(key) - with do |client| - client.delete(key) + rescuing do + with do |client| + client.delete(key) + end end - rescue Dalli::DalliError - nil end private @@ -64,6 +64,12 @@ module Rack end end end + + def rescuing + yield + rescue Dalli::DalliError + nil + end end end end diff --git a/lib/rack/attack/store_proxy/redis_proxy.rb b/lib/rack/attack/store_proxy/redis_proxy.rb index 5572d0c..9fe2bc8 100644 --- a/lib/rack/attack/store_proxy/redis_proxy.rb +++ b/lib/rack/attack/store_proxy/redis_proxy.rb @@ -19,36 +19,38 @@ module Rack end def read(key) - get(key) - rescue Redis::BaseError - nil + rescuing { get(key) } end def write(key, value, options = {}) if (expires_in = options[:expires_in]) - setex(key, expires_in, value) + rescuing { setex(key, expires_in, value) } else - set(key, value) + rescuing { set(key, value) } end - rescue Redis::BaseError - nil end def increment(key, amount, options = {}) count = nil - pipelined do - count = incrby(key, amount) - expire(key, options[:expires_in]) if options[:expires_in] + rescuing do + pipelined do + count = incrby(key, amount) + expire(key, options[:expires_in]) if options[:expires_in] + end end count.value if count - rescue Redis::BaseError - nil end def delete(key, _options = {}) - del(key) + rescuing { del(key) } + end + + private + + def rescuing + yield rescue Redis::BaseError nil end diff --git a/lib/rack/attack/store_proxy/redis_store_proxy.rb b/lib/rack/attack/store_proxy/redis_store_proxy.rb index d7b753c..6be5412 100644 --- a/lib/rack/attack/store_proxy/redis_store_proxy.rb +++ b/lib/rack/attack/store_proxy/redis_store_proxy.rb @@ -11,19 +11,15 @@ module Rack end def read(key) - get(key, raw: true) - rescue Redis::BaseError - nil + rescuing { get(key, raw: true) } end def write(key, value, options = {}) if (expires_in = options[:expires_in]) - setex(key, expires_in, value, raw: true) + rescuing { setex(key, expires_in, value, raw: true) } else - set(key, value, raw: true) + rescuing { set(key, value, raw: true) } end - rescue Redis::BaseError - nil end end end