Class: Glimmer::Util::Debounce

Inherits:
Object
  • Object
show all
Defined in:
lib/glimmer/util/debounce.rb

Constant Summary collapse

INTERVAL_CHECK_IN_MILLISECONDS =
50

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(&work) ⇒ Debounce

Returns a new instance of Debounce.



8
9
10
# File 'lib/glimmer/util/debounce.rb', line 8

def initialize(&work)
  @work = work
end

Instance Attribute Details

#workObject (readonly)

Returns the value of attribute work.



6
7
8
# File 'lib/glimmer/util/debounce.rb', line 6

def work
  @work
end

Instance Method Details

#call(delay: 300, debounce: true) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/glimmer/util/debounce.rb', line 12

def call(delay: 300, debounce: true)
  if delay.nil? || delay == 0 || !debounce
    @call_in_progress = @call_request_time = nil
    work.call
    return
  end
  @call_request_time = Time.now
  return if @call_in_progress
    
  @call_in_progress  = true
  debouncer          = lambda do
    if (Time.now - @call_request_time) < (delay / 1000.0)
      Async::Timeout.new(INTERVAL_CHECK_IN_MILLISECONDS, &debouncer)
    else
      @call_in_progress = @call_request_time = nil
      work.call
    end
  end
  Async::Timeout.new(delay, &debouncer)
end