module RateLimiter::Request
Manages configuration and state for the current HTTP request such as `source`.
It is recommended you don't use `RateLimiter::Request` directly. Instead use `RateLimiter.request`.
Public Class Methods
Turn off RateLimiter
for the given model for this request.
# File lib/rate_limiter/request.rb, line 16 def disable_model(model_class) enabled_for_model(model_class, false) end
Turn on RateLimiter
for the given model for this request.
# File lib/rate_limiter/request.rb, line 21 def enable_model(model_class) enabled_for_model(model_class, true) end
Sets whether RateLimiter
is enabled or disabled for the current request.
# File lib/rate_limiter/request.rb, line 32 def enabled=(value) store[:enabled] = value end
Returns `true` if RateLimiter
is enabled for the current request, `false` otherwise.
# File lib/rate_limiter/request.rb, line 27 def enabled? !!store[:enabled] end
Sets wheterh RateLimiter
is enabled or disabled for this model for the current request.
# File lib/rate_limiter/request.rb, line 38 def enabled_for_model(model, value) store[:"enabled_for_#{model}"] = value end
Returns `true` if RateLimiter
is enabled for this model for the current request, `false` otherwise.
# File lib/rate_limiter/request.rb, line 44 def enabled_for_model?(model) model.include?(Model::InstanceMethods) && !!store.fetch(:"enabled_for_#{model}", true) end
# File lib/rate_limiter/request.rb, line 48 def merge(options) options.to_h.each do |k, v| store[k] = v end end
# File lib/rate_limiter/request.rb, line 54 def set(options) store.clear merge(options) end
Returns who is responsible for attempting to create a new record.
# File lib/rate_limiter/request.rb, line 60 def source who = store[:source] who.respond_to?(:call) ? who.call : who end
Sets who is responsible for attempting to create a new record.
# File lib/rate_limiter/request.rb, line 66 def source=(value) store[:source] = value end
Returns a deep copy of the RequestStore.
# File lib/rate_limiter/request.rb, line 71 def to_h store.deep_dup end
Temporarily set options and execute a block.
# File lib/rate_limiter/request.rb, line 76 def with(options) return unless block_given? before = to_h validate_public_options(options) merge(options) yield ensure set(before) end
Private Class Methods
Internal store for the options for this request.
# File lib/rate_limiter/request.rb, line 90 def store RequestStore.store[:rate_limiter] ||= { enabled: true } end
Double checks that the options passed are known. Does not validate the values of the options.
# File lib/rate_limiter/request.rb, line 98 def validate_public_options(options) options.each do |k, _v| case k when /enabled_for_/, :enabled, :source next else raise InvalidOption, "Invalid option: #{k}" end end end