berater 0.1.3 → 0.5.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.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