berater 0.2.0 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|