class Lita::Timing::SlidingWindow
Public Class Methods
new(name, redis)
click to toggle source
# File lib/lita/timing/sliding_window.rb, line 4 def initialize(name, redis) @name, @redis = name, redis @mutex = Timing::Mutex.new("#{name}-lock", redis) initialise_last_time_if_not_set end
Public Instance Methods
advance(duration_minutes: 30, buffer_minutes: 0) { |last_time| ... }
click to toggle source
# File lib/lita/timing/sliding_window.rb, line 11 def advance(duration_minutes: 30, buffer_minutes: 0, &block) @mutex.syncronise do start_time = Time.now - mins_to_seconds(duration_minutes) - mins_to_seconds(buffer_minutes) last_time = get_last_time return unless start_time > last_time advance_to = last_time + mins_to_seconds(duration_minutes) yield last_time + 1, advance_to @redis.set(@name, advance_to.to_i) end end
Private Instance Methods
get_last_time()
click to toggle source
# File lib/lita/timing/sliding_window.rb, line 32 def get_last_time Time.at(@redis.get(@name).to_i) end
initialise_last_time_if_not_set()
click to toggle source
# File lib/lita/timing/sliding_window.rb, line 36 def initialise_last_time_if_not_set @mutex.syncronise do @redis.setnx(@name, two_weeks_ago.to_i) end end
mins_to_seconds(mins)
click to toggle source
# File lib/lita/timing/sliding_window.rb, line 28 def mins_to_seconds(mins) mins * 60 end
two_weeks_ago()
click to toggle source
# File lib/lita/timing/sliding_window.rb, line 42 def two_weeks_ago ::Time.now - (60 * 60 * 24 * 14) end