class PaulWalker::RateLimit
Public Class Methods
add(namespace, key, current, max)
click to toggle source
# File lib/paul_walker/rate_limit.rb, line 6 def self.add(namespace, key, current, max) store.set(composite_key(namespace, key), { current: current, max: max, timestamp: Time.now.utc }.to_json) set_last_used(namespace, key) end
composite_key(namespace, key)
click to toggle source
# File lib/paul_walker/rate_limit.rb, line 26 def self.composite_key(namespace, key) "#{namespace}:#{key}" end
get(namespace, key)
click to toggle source
# File lib/paul_walker/rate_limit.rb, line 16 def self.get(namespace, key) value = store.get(composite_key(namespace, key)) return nil if value.nil? value = JSON.parse(value) time = Time.parse(value['timestamp']) adjusted_current = Time.now.utc.to_i - time.to_i + value['current'] value['current'] = adjusted_current <= value['current'] ? adjusted_current : value['max'] value end
last_used(namespace)
click to toggle source
# File lib/paul_walker/rate_limit.rb, line 34 def self.last_used(namespace) store.get(composite_key(namespace, 'last_used')) end
set_last_used(namespace, key)
click to toggle source
# File lib/paul_walker/rate_limit.rb, line 30 def self.set_last_used(namespace, key) store.set(composite_key(namespace, 'last_used'), key) end
store()
click to toggle source
# File lib/paul_walker/rate_limit.rb, line 38 def self.store store = Store.new store.provider end