Module: Limiter::Mixin

Defined in:
lib/limiter/mixin.rb

Instance Method Summary collapse

Instance Method Details

#limit_method(method, rate:, interval: 60, balanced: false, &b) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
# File 'lib/limiter/mixin.rb', line 5

def limit_method(method, rate:, interval: 60, balanced: false, &b)
  queue = RateQueue.new(rate, interval: interval, balanced: balanced, &b)

  mixin = Module.new do
    define_method(method) do |*args, **options, &blk|
      queue.shift
      options.empty? ? super(*args, &blk) : super(*args, **options, &blk)
    end
  end

  prepend mixin
end