def rate_limit(options = {}, &block)
      raise Error, 'Handling block was not provided' unless block_given?

      # Separate out options related only to rate limiting
      strategy = (options.delete(:strategy) || 'sliding_window_log').to_s
      limit = options.delete(:limit) || 100
      per = options.delete(:per) || 3600
      pattern = options.delete(:pattern)
      client = options.delete(:client)

      before_action(options) do
        check_rate_limits(strategy, limit, per, pattern, client, block)
      end
    end
def rate_limit(options = {}, &block)
      raise Error, 'Handling block was not provided' unless block_given?

      # Separate out options related only to rate limiting
      strategy = (options.delete(:strategy) || 'sliding_window_log').to_s
      limit = options.delete(:limit) || 100
      per = options.delete(:per) || 3600
      pattern = options.delete(:pattern)
      client = options.delete(:client)

      before_action(options) do
        check_rate_limits(strategy, limit, per, pattern, client, block)
      end
    end
Sets callback that handles rate limit exceeding. Additionally to
 described options supports all the `before_action` options.

 @example Renders text with time left in case of rate limit exceeding.
   rate_limit limit: 100, per: 1.hour, only: :index do |info|
     render plain: "Next request can be done in #{info.time_left} seconds",
            status: :too_many_requests
   end

 @param [Hash] options
 @option options [Symbol] :strategy Rate limiting strategy.
   Default value is :sliding_window_log
 @option options [Fixnum, Lambda, Proc] :limit The number of allowed
   requests per time period. Default value is 100
 @option options [Fixnum, Lambda, Proc] :per Time period in seconds.
   Default value is 1.hour
 @option options [Lambda, Proc] :pattern Can be used if you want to use
   something instead of IP as cache key identifier. For example
   `-> { current_user.id }`. Default value is `request.remote_ip`
 @option options [Object] :cient Redis client.
   Uses `Redis.new` if not specified

 @yield [info] Executed if rate limit exceded. This argument is mandatory.
 @yieldparam [RailsRateLimiter::Result] Represent information about
   rate limiting