class Grape::Attack::Counter

Attributes

adapter[R]
request[R]

Public Class Methods

new(request, adapter) click to toggle source
# File lib/grape/attack/counter.rb, line 7
def initialize(request, adapter)
  @request = request
  @adapter = adapter
end

Public Instance Methods

update() click to toggle source
# File lib/grape/attack/counter.rb, line 20
def update
  adapter.atomically do
    adapter.incr(key)
    adapter.expire(key, ttl_in_seconds)
  end
rescue ::Grape::Attack::StoreError
end
value() click to toggle source
# File lib/grape/attack/counter.rb, line 12
def value
  @value ||= begin
    adapter.get(key).to_i
  rescue ::Grape::Attack::StoreError
    1
  end
end

Private Instance Methods

key() click to toggle source
# File lib/grape/attack/counter.rb, line 30
def key
  "#{request.method}:#{request.path}:#{request.client_identifier}"
end
ttl_in_seconds() click to toggle source
# File lib/grape/attack/counter.rb, line 34
def ttl_in_seconds
  request.throttle_options.per.to_i
end