Class: Philiprehberger::RateLimiter::Noop

Inherits:
Object
  • Object
show all
Defined in:
lib/philiprehberger/rate_limiter/noop.rb

Overview

A limiter that always allows requests. Useful for tests and feature-flagged rollouts.

Instance Method Summary collapse

Instance Method Details

#allow!(_key = :default, weight: 1) ⇒ Object



16
17
18
19
# File 'lib/philiprehberger/rate_limiter/noop.rb', line 16

def allow!(_key = :default, weight: 1)
  _ = weight
  true
end

#allow?(_key = :default, weight: 1) ⇒ Boolean

Returns:

  • (Boolean)


7
8
9
10
# File 'lib/philiprehberger/rate_limiter/noop.rb', line 7

def allow?(_key = :default, weight: 1)
  _ = weight
  true
end

#allow_batch(keys) ⇒ Object



12
13
14
# File 'lib/philiprehberger/rate_limiter/noop.rb', line 12

def allow_batch(keys)
  keys.to_h { |key| [key, true] }
end

#block(_key = :default, timeout: nil, weight: 1) ⇒ true

Blocking acquire. Noop always has capacity, so it returns immediately.

Returns:

  • (true)


72
73
74
75
76
# File 'lib/philiprehberger/rate_limiter/noop.rb', line 72

def block(_key = :default, timeout: nil, weight: 1)
  _ = timeout
  _ = weight
  true
end

#clearObject



78
79
80
# File 'lib/philiprehberger/rate_limiter/noop.rb', line 78

def clear
  nil
end

#drain(_key = :default) ⇒ Object



37
38
39
# File 'lib/philiprehberger/rate_limiter/noop.rb', line 37

def drain(_key = :default)
  Float::INFINITY
end

#info(_key = :default) ⇒ Object



82
83
84
# File 'lib/philiprehberger/rate_limiter/noop.rb', line 82

def info(_key = :default)
  { remaining: Float::INFINITY, limit: Float::INFINITY, used: 0 }
end

#info_batch(keys) ⇒ Object



86
87
88
# File 'lib/philiprehberger/rate_limiter/noop.rb', line 86

def info_batch(keys)
  keys.to_h { |key| [key, info(key)] }
end

#keysObject



94
95
96
# File 'lib/philiprehberger/rate_limiter/noop.rb', line 94

def keys
  []
end

#on_reject(&block) ⇒ self

Register a callback for rejected requests.

Noop ignores the callback since nothing is ever rejected.

Returns:

  • (self)


108
109
110
111
# File 'lib/philiprehberger/rate_limiter/noop.rb', line 108

def on_reject(&block)
  _ = block
  self
end

#peek(_key = :default) ⇒ Object



21
22
23
# File 'lib/philiprehberger/rate_limiter/noop.rb', line 21

def peek(_key = :default)
  true
end

#refund(_key = :default, amount: 1) ⇒ nil

Return previously consumed slot(s). No-op always has capacity, so this does nothing and mirrors the real limiters' signature.

Returns:

  • (nil)


49
50
51
52
# File 'lib/philiprehberger/rate_limiter/noop.rb', line 49

def refund(_key = :default, amount: 1)
  _ = amount
  nil
end

#remaining(_key = :default) ⇒ Object



25
26
27
# File 'lib/philiprehberger/rate_limiter/noop.rb', line 25

def remaining(_key = :default)
  Float::INFINITY
end

#reset(_key = :default) ⇒ Object



33
34
35
# File 'lib/philiprehberger/rate_limiter/noop.rb', line 33

def reset(_key = :default)
  nil
end

#retry_after(_key = :default) ⇒ Object



41
42
43
# File 'lib/philiprehberger/rate_limiter/noop.rb', line 41

def retry_after(_key = :default)
  0.0
end

#stats(_key = :default) ⇒ Object



90
91
92
# File 'lib/philiprehberger/rate_limiter/noop.rb', line 90

def stats(_key = :default)
  { allowed: 0, rejected: 0 }
end

#throttle(_key = :default, weight: 1, &block) ⇒ Object



98
99
100
101
# File 'lib/philiprehberger/rate_limiter/noop.rb', line 98

def throttle(_key = :default, weight: 1, &block)
  _ = weight
  { allowed: true, value: block.call }
end

#used(_key = :default) ⇒ Object



29
30
31
# File 'lib/philiprehberger/rate_limiter/noop.rb', line 29

def used(_key = :default)
  0
end

#wait_time(_key = :default, weight: 1) ⇒ Float

Seconds until the next request would be allowed. Always allowed.

Returns:

  • (Float)

    always 0.0



57
58
59
60
# File 'lib/philiprehberger/rate_limiter/noop.rb', line 57

def wait_time(_key = :default, weight: 1)
  _ = weight
  0.0
end

#window_reset_at(_key = :default) ⇒ nil

Time when the current window expires. Noop has no window.

Returns:

  • (nil)


65
66
67
# File 'lib/philiprehberger/rate_limiter/noop.rb', line 65

def window_reset_at(_key = :default)
  nil
end