Module: Berater

Extended by:
Berater
Includes:
Meddleware
Included in:
Berater
Defined in:
lib/berater.rb,
lib/berater/dsl.rb,
lib/berater/lock.rb,
lib/berater/mutex.rb,
lib/berater/utils.rb,
lib/berater/limiter.rb,
lib/berater/version.rb,
lib/berater/inhibitor.rb,
lib/berater/test_mode.rb,
lib/berater/unlimiter.rb,
lib/berater/lua_script.rb,
lib/berater/middleware.rb,
lib/berater/limiter_set.rb,
lib/berater/rate_limiter.rb,
lib/berater/rspec/matchers.rb,
lib/berater/static_limiter.rb,
lib/berater/middleware/trace.rb,
lib/berater/middleware/statsd.rb,
lib/berater/concurrency_limiter.rb,
lib/berater/middleware/fail_open.rb,
lib/berater/middleware/load_shedder.rb

Defined Under Namespace

Modules: DSL, Matchers, Middleware, Mutex, TestMode, Utils Classes: ConcurrencyLimiter, Inhibitor, Limiter, LimiterSet, Lock, LuaScript, Overloaded, RateLimiter, StaticLimiter, Unlimiter

Constant Summary collapse

VERSION =
"0.15.1"

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#redisObject

Returns the value of attribute redis.



17
18
19
# File 'lib/berater.rb', line 17

def redis
  @redis
end

Instance Method Details

#configure {|_self| ... } ⇒ Object

Yields:

  • (_self)

Yield Parameters:

  • _self (Berater)

    the object that the method was called on



19
20
21
# File 'lib/berater.rb', line 19

def configure
  yield self
end

#expungeObject



50
51
52
53
54
# File 'lib/berater.rb', line 50

def expunge
  redis.scan_each(match: "#{name}*") do |key|
    redis.del(key)
  end
end

#limitersObject



23
24
25
# File 'lib/berater.rb', line 23

def limiters
  @limiters ||= LimiterSet.new
end

#LuaScript(source) ⇒ Object



53
54
55
# File 'lib/berater/lua_script.rb', line 53

def LuaScript(source)
  LuaScript.new(source)
end

#new(key, capacity, **opts) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/berater.rb', line 27

def new(key, capacity, **opts)
  args = []

  case capacity
  when Float::INFINITY
    Berater::Unlimiter
  when 0
    Berater::Inhibitor
  else
    if opts[:interval]
      args << opts.delete(:interval)
      Berater::RateLimiter
    elsif opts[:timeout]
      Berater::ConcurrencyLimiter
    else
      Berater::StaticLimiter
    end
  end.yield_self do |klass|
    args = [ key, capacity, *args ].compact
    klass.new(*args, **opts)
  end
end

#resetObject



56
57
58
59
60
# File 'lib/berater.rb', line 56

def reset
  @redis = nil
  limiters.clear
  middleware.clear
end