berater 0.1.3 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
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.3
4
+ version: 0.5.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-05 00:00:00.000000000 Z
11
+ date: 2021-03-06 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,50 +0,0 @@
1
- describe Berater::ConcurrencyLimiter::Lock do
2
- subject { Berater.limit(1, timeout: 1) }
3
-
4
- before { Berater.mode = :concurrency }
5
-
6
- it { expect(subject.released?).to be false }
7
- it { expect(subject.expired?).to be false }
8
-
9
- context 'after being released' do
10
- before { subject.release }
11
-
12
- it { expect(subject.released?).to be true }
13
- it { expect(subject.expired?).to be false }
14
-
15
- it 'can not be released again' do
16
- expect { subject.release }.to raise_error(RuntimeError, /already/)
17
- end
18
- end
19
-
20
- context 'when enough time passes' do
21
- before { subject; Timecop.freeze(2) }
22
-
23
- it 'expires' do
24
- expect(subject.expired?).to be true
25
- end
26
-
27
- it 'fails to release' do
28
- expect { subject.release }.to raise_error(RuntimeError, /expired/)
29
- end
30
-
31
- it { expect(subject.released?).to be false }
32
- end
33
-
34
- describe '#contention' do
35
- let(:limiter) { Berater.new(:concurrency, 3) }
36
-
37
- it 'tracks contention' do
38
- lock_1 = limiter.limit
39
- expect(lock_1.contention).to eq 1
40
-
41
- lock_2 = limiter.limit
42
- expect(lock_2.contention).to eq 2
43
-
44
- limiter.limit do |lock_3|
45
- expect(lock_3.contention).to eq 3
46
- end
47
- end
48
- end
49
-
50
- end