berater 0.2.0 → 0.6.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/berater.rb +30 -23
- data/lib/berater/concurrency_limiter.rb +58 -46
- data/lib/berater/dsl.rb +68 -0
- data/lib/berater/inhibitor.rb +5 -3
- data/lib/berater/limiter.rb +94 -0
- data/lib/berater/lock.rb +4 -14
- data/lib/berater/lua_script.rb +55 -0
- data/lib/berater/rate_limiter.rb +69 -52
- data/lib/berater/rspec.rb +14 -0
- data/lib/berater/rspec/matchers.rb +81 -0
- data/lib/berater/test_mode.rb +43 -0
- data/lib/berater/unlimiter.rb +9 -14
- data/lib/berater/utils.rb +46 -0
- data/lib/berater/version.rb +1 -1
- data/spec/berater_spec.rb +37 -28
- data/spec/concurrency_limiter_spec.rb +179 -73
- data/spec/dsl_refinement_spec.rb +46 -0
- data/spec/dsl_spec.rb +72 -0
- data/spec/inhibitor_spec.rb +2 -4
- data/spec/limiter_spec.rb +71 -0
- data/spec/lua_script_spec.rb +97 -0
- data/spec/{matcher_spec.rb → matchers_spec.rb} +71 -3
- data/spec/rate_limiter_spec.rb +156 -70
- data/spec/riddle_spec.rb +102 -0
- data/spec/test_mode_spec.rb +225 -0
- data/spec/unlimiter_spec.rb +5 -12
- data/spec/utils_spec.rb +78 -0
- metadata +40 -10
- data/lib/berater/base_limiter.rb +0 -26
- data/spec/concurrency_lock_spec.rb +0 -39
- data/spec/rate_lock_spec.rb +0 -20
data/lib/berater/base_limiter.rb
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
module Berater
|
2
|
-
class BaseLimiter
|
3
|
-
|
4
|
-
attr_reader :key, :options
|
5
|
-
|
6
|
-
def redis
|
7
|
-
options[:redis] || Berater.redis
|
8
|
-
end
|
9
|
-
|
10
|
-
def limit
|
11
|
-
raise NotImplementedError
|
12
|
-
end
|
13
|
-
|
14
|
-
protected
|
15
|
-
|
16
|
-
def initialize(key, **opts)
|
17
|
-
@key = key
|
18
|
-
@options = opts
|
19
|
-
end
|
20
|
-
|
21
|
-
def cache_key(key)
|
22
|
-
"#{self.class}:#{key}"
|
23
|
-
end
|
24
|
-
|
25
|
-
end
|
26
|
-
end
|
@@ -1,39 +0,0 @@
|
|
1
|
-
describe Berater::Lock do
|
2
|
-
it_behaves_like 'a lock', Berater.new(:key, :concurrency, 3)
|
3
|
-
|
4
|
-
let(:limiter) { Berater.new(:key, :concurrency, 3) }
|
5
|
-
|
6
|
-
describe '#expired?' do
|
7
|
-
let!(:lock) { limiter.limit }
|
8
|
-
|
9
|
-
context 'when timeout is not set' do
|
10
|
-
it { expect(limiter.timeout).to eq 0 }
|
11
|
-
|
12
|
-
it 'never expires' do
|
13
|
-
expect(lock.locked?).to be true
|
14
|
-
expect(lock.expired?).to be false
|
15
|
-
|
16
|
-
Timecop.travel(1_000)
|
17
|
-
|
18
|
-
expect(lock.locked?).to be true
|
19
|
-
expect(lock.expired?).to be false
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
context 'when timeout is set and exceeded' do
|
24
|
-
before { Timecop.travel(1) }
|
25
|
-
|
26
|
-
let(:limiter) { Berater.new(:key, :concurrency, 3, timeout: 1) }
|
27
|
-
|
28
|
-
it 'expires' do
|
29
|
-
expect(lock.expired?).to be true
|
30
|
-
expect(lock.locked?).to be false
|
31
|
-
end
|
32
|
-
|
33
|
-
it 'fails to release' do
|
34
|
-
expect { lock.release }.to raise_error(RuntimeError, /expired/)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
end
|
data/spec/rate_lock_spec.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
describe Berater::Lock do
|
2
|
-
it_behaves_like 'a lock', Berater.new(:key, :rate, 3, :second)
|
3
|
-
|
4
|
-
let(:limiter) { Berater.new(:key, :rate, 3, :second) }
|
5
|
-
|
6
|
-
describe '#expired?' do
|
7
|
-
let!(:lock) { limiter.limit }
|
8
|
-
|
9
|
-
it 'never expires' do
|
10
|
-
expect(lock.locked?).to be true
|
11
|
-
expect(lock.expired?).to be false
|
12
|
-
|
13
|
-
Timecop.travel(1_000)
|
14
|
-
|
15
|
-
expect(lock.locked?).to be true
|
16
|
-
expect(lock.expired?).to be false
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|