Class: Lita::Timing::SlidingWindow
- Inherits:
-
Object
- Object
- Lita::Timing::SlidingWindow
- Defined in:
- lib/lita/timing/sliding_window.rb
Instance Method Summary collapse
- #advance(duration_minutes: 30, buffer_minutes: 0, &block) ⇒ Object
-
#initialize(name, redis) ⇒ SlidingWindow
constructor
A new instance of SlidingWindow.
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 |