Class: Webmidi::Middleware::Debounce

Inherits:
Base
  • Object
show all
Defined in:
lib/webmidi/middleware/timing_gate.rb

Instance Method Summary collapse

Constructor Details

#initialize(app, interval:, key: nil, **options) ⇒ Debounce

Returns a new instance of Debounce.



6
7
8
9
10
11
12
# File 'lib/webmidi/middleware/timing_gate.rb', line 6

def initialize(app, interval:, key: nil, **options)
  super(app, **options)
  validate_interval!(interval)
  @interval = interval
  @key = key || ->(message) { message.to_bytes }
  @last_seen = {}
end

Instance Method Details

#call(message) ⇒ Object



14
15
16
17
18
19
20
21
22
# File 'lib/webmidi/middleware/timing_gate.rb', line 14

def call(message)
  key = @key.call(message)
  now = message.timestamp
  last = @last_seen[key]
  return nil if last && (now - last) < @interval

  @last_seen[key] = now
  @app.call(message)
end