berater 0.1.4 → 0.6.0

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.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: berater
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Pepper
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-09 00:00:00.000000000 Z
11
+ date: 2021-03-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: benchmark
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: byebug
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -108,26 +122,39 @@ dependencies:
108
122
  - - ">="
109
123
  - !ruby/object:Gem::Version
110
124
  version: '0'
111
- description: rate limiter
125
+ description: work...within limits
112
126
  email:
113
127
  executables: []
114
128
  extensions: []
115
129
  extra_rdoc_files: []
116
130
  files:
117
131
  - lib/berater.rb
118
- - lib/berater/base_limiter.rb
119
132
  - lib/berater/concurrency_limiter.rb
133
+ - lib/berater/dsl.rb
120
134
  - lib/berater/inhibitor.rb
135
+ - lib/berater/limiter.rb
136
+ - lib/berater/lock.rb
137
+ - lib/berater/lua_script.rb
121
138
  - lib/berater/rate_limiter.rb
139
+ - lib/berater/rspec.rb
140
+ - lib/berater/rspec/matchers.rb
141
+ - lib/berater/test_mode.rb
122
142
  - lib/berater/unlimiter.rb
143
+ - lib/berater/utils.rb
123
144
  - lib/berater/version.rb
124
145
  - spec/berater_spec.rb
125
146
  - spec/concurrency_limiter_spec.rb
126
- - spec/concurrency_lock_spec.rb
147
+ - spec/dsl_refinement_spec.rb
148
+ - spec/dsl_spec.rb
127
149
  - spec/inhibitor_spec.rb
128
- - spec/matcher_spec.rb
150
+ - spec/limiter_spec.rb
151
+ - spec/lua_script_spec.rb
152
+ - spec/matchers_spec.rb
129
153
  - spec/rate_limiter_spec.rb
154
+ - spec/riddle_spec.rb
155
+ - spec/test_mode_spec.rb
130
156
  - spec/unlimiter_spec.rb
157
+ - spec/utils_spec.rb
131
158
  homepage: https://github.com/dpep/berater_rb
132
159
  licenses:
133
160
  - MIT
@@ -153,9 +180,15 @@ specification_version: 4
153
180
  summary: Berater
154
181
  test_files:
155
182
  - spec/rate_limiter_spec.rb
156
- - spec/matcher_spec.rb
183
+ - spec/matchers_spec.rb
184
+ - spec/dsl_refinement_spec.rb
185
+ - spec/test_mode_spec.rb
186
+ - spec/dsl_spec.rb
187
+ - spec/lua_script_spec.rb
157
188
  - spec/concurrency_limiter_spec.rb
158
- - spec/concurrency_lock_spec.rb
189
+ - spec/riddle_spec.rb
190
+ - spec/utils_spec.rb
159
191
  - spec/berater_spec.rb
192
+ - spec/limiter_spec.rb
160
193
  - spec/inhibitor_spec.rb
161
194
  - spec/unlimiter_spec.rb
@@ -1,32 +0,0 @@
1
- module Berater
2
- class BaseLimiter
3
-
4
- attr_reader :options
5
-
6
- def initialize(**opts)
7
- @options = opts
8
- end
9
-
10
- def key
11
- if options[:key]
12
- "#{self.class}:#{options[:key]}"
13
- else
14
- # default value
15
- self.class.to_s
16
- end
17
- end
18
-
19
- def redis
20
- options[:redis] || Berater.redis
21
- end
22
-
23
- def limit(**opts)
24
- raise NotImplementedError
25
- end
26
-
27
- def self.limit(*args, **opts, &block)
28
- self.new(*args, **opts).limit(&block)
29
- end
30
-
31
- end
32
- end
@@ -1,92 +0,0 @@
1
- describe Berater::ConcurrencyLimiter::Lock do
2
- before { Berater.mode = :concurrency }
3
-
4
- let(:limiter) { Berater.new(:concurrency, 3) }
5
-
6
- describe '#contention' do
7
- it 'tracks contention' do
8
- lock_1 = limiter.limit
9
- expect(lock_1.contention).to eq 1
10
-
11
- lock_2 = limiter.limit
12
- expect(lock_2.contention).to eq 2
13
-
14
- limiter.limit do |lock_3|
15
- expect(lock_3.contention).to eq 3
16
- end
17
- end
18
-
19
- it 'works in block mode' do
20
- lock_1 = limiter.limit
21
-
22
- limiter.limit do |lock_2|
23
- expect(lock_1.contention).to eq 1
24
- expect(lock_2.contention).to eq 2
25
- end
26
- end
27
- end
28
-
29
- describe '#release' do
30
- it 'can not be released twice' do
31
- lock = limiter.limit
32
- expect(lock.release).to be true
33
- expect { lock.release }.to raise_error(RuntimeError, /already/)
34
- end
35
-
36
- it 'does not work in block mode' do
37
- expect do
38
- limiter.limit do |lock|
39
- lock.release
40
- end
41
- end.to raise_error(RuntimeError, /already/)
42
- end
43
- end
44
-
45
- describe '#released?' do
46
- it 'works' do
47
- lock = limiter.limit
48
- expect(lock.released?).to be false
49
-
50
- lock.release
51
- expect(lock.released?).to be true
52
- end
53
-
54
- it 'works in block mode' do
55
- limiter.limit do |lock|
56
- expect(lock.released?).to be false
57
- end
58
- end
59
- end
60
-
61
- describe '#expired?' do
62
- let!(:lock) { limiter.limit }
63
-
64
- context 'when timeout is not set' do
65
- it { expect(limiter.timeout).to eq 0 }
66
-
67
- it 'never expires' do
68
- expect(lock.expired?).to be false
69
-
70
- Timecop.travel(1_000)
71
-
72
- expect(lock.expired?).to be false
73
- end
74
- end
75
-
76
- context 'when timeout is set and exceeded' do
77
- before { Timecop.travel(1) }
78
-
79
- let(:limiter) { Berater.new(:concurrency, 3, timeout: 1) }
80
-
81
- it 'expires' do
82
- expect(lock.expired?).to be true
83
- end
84
-
85
- it 'fails to release' do
86
- expect(lock.released?).to be false
87
- expect { lock.release }.to raise_error(RuntimeError, /expired/)
88
- end
89
- end
90
- end
91
-
92
- end