Class: Lita::Timing::SlidingWindow

Inherits:
Object
  • Object
show all
Defined in:
lib/lita/timing/sliding_window.rb

Instance Method Summary collapse

Constructor Details

#initialize(name, redis) ⇒ SlidingWindow

Returns a new instance of SlidingWindow.



4
5
6
7
8
9
# 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

Instance Method Details

#advance(duration_minutes: 30, buffer_minutes: 0, &block) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 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