pause 0.2.1 → 0.4.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.
- checksums.yaml +5 -5
- data/.gitignore +2 -0
- data/.travis.yml +7 -3
- data/Gemfile +0 -8
- data/README.md +126 -21
- data/Rakefile +43 -2
- data/lib/pause.rb +3 -3
- data/lib/pause/action.rb +114 -93
- data/lib/pause/analyzer.rb +3 -3
- data/lib/pause/configuration.rb +1 -1
- data/lib/pause/redis/adapter.rb +37 -17
- data/lib/pause/redis/sharded_adapter.rb +9 -14
- data/lib/pause/version.rb +1 -1
- data/pause.gemspec +16 -7
- data/spec/pause/action_spec.rb +149 -85
- data/spec/pause/redis/adapter_spec.rb +15 -9
- data/spec/pause/redis/sharded_adapter_spec.rb +14 -0
- data/spec/spec_helper.rb +18 -9
- metadata +124 -11
- data/spec/support/fakeredis.rb +0 -2
@@ -31,16 +31,22 @@ describe Pause::Redis::Adapter do
|
|
31
31
|
expect(set[0].size).to eql(2)
|
32
32
|
end
|
33
33
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
34
|
+
context 'removing two elements' do
|
35
|
+
let(:to_delete) { 2 }
|
36
|
+
let(:time) { Time.now }
|
37
|
+
before do
|
38
|
+
adapter
|
39
|
+
to_delete.times do |t|
|
40
|
+
expect(redis_conn).to receive(:zrem).with(tracked_key, [adapter.period_marker(resolution, time + t)]).once
|
41
|
+
end
|
42
|
+
adapter.time_blocks_to_keep = 1
|
41
43
|
end
|
42
|
-
|
43
|
-
adapter.increment(scope, identifier,
|
44
|
+
it 'should remove old elements' do
|
45
|
+
adapter.increment(scope, identifier, time.to_i)
|
46
|
+
to_delete.times do |t|
|
47
|
+
next_time = time + (adapter.resolution + t + 1)
|
48
|
+
adapter.increment(scope, identifier, next_time.to_i)
|
49
|
+
end
|
44
50
|
end
|
45
51
|
end
|
46
52
|
|
@@ -21,4 +21,18 @@ describe Pause::Redis::ShardedAdapter do
|
|
21
21
|
expect { adapter.all_keys('cake') }.to raise_error(Pause::Redis::OperationNotSupported)
|
22
22
|
end
|
23
23
|
end
|
24
|
+
|
25
|
+
describe '#with_multi' do
|
26
|
+
let(:redis) { adapter.send(:redis) }
|
27
|
+
it 'should not call redis.multi' do
|
28
|
+
expect(redis).to_not receive(:multi)
|
29
|
+
expect { adapter.increment(:scope, 123, Time.now) }.to_not raise_error
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe '#redis' do
|
34
|
+
it 'should not use redis db when connecting' do
|
35
|
+
expect(adapter.send(:redis_connection_opts)).to_not include(:db)
|
36
|
+
end
|
37
|
+
end
|
24
38
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -5,20 +5,29 @@
|
|
5
5
|
#
|
6
6
|
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
7
7
|
|
8
|
-
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
|
9
|
-
require 'rubygems'
|
10
|
-
require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE'])
|
11
8
|
require 'pause'
|
12
|
-
require '
|
13
|
-
|
9
|
+
require 'fileutils'
|
10
|
+
|
11
|
+
if ENV['PAUSE_REAL_REDIS']
|
12
|
+
require 'pause/redis/adapter'
|
13
|
+
puts ; puts "NOTE: Using real Redis-server at #{Pause::Redis::Adapter.redis.inspect}\n\n"
|
14
|
+
else
|
15
|
+
require 'fakeredis/rspec'
|
16
|
+
end
|
14
17
|
|
15
18
|
RSpec.configure do |config|
|
16
19
|
config.run_all_when_everything_filtered = true
|
17
20
|
config.filter_run :focus
|
18
21
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
22
|
+
rspec_dir = './.spec'.freeze
|
23
|
+
FileUtils.mkdir_p(rspec_dir)
|
24
|
+
config.example_status_persistence_file_path = "#{rspec_dir}/results.txt"
|
25
|
+
|
23
26
|
config.order = 'random'
|
27
|
+
|
28
|
+
if ENV['PAUSE_REAL_REDIS']
|
29
|
+
config.before(:example) do
|
30
|
+
Pause::Redis::Adapter.redis.flushdb
|
31
|
+
end
|
32
|
+
end
|
24
33
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pause
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Atasay Gokkaya
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date:
|
14
|
+
date: 2018-03-29 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: redis
|
@@ -27,13 +27,127 @@ dependencies:
|
|
27
27
|
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: '0'
|
30
|
-
|
31
|
-
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: hiredis
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
requirements:
|
34
|
+
- - ">="
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: '0'
|
37
|
+
type: :runtime
|
38
|
+
prerelease: false
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
- !ruby/object:Gem::Dependency
|
45
|
+
name: simplecov
|
46
|
+
requirement: !ruby/object:Gem::Requirement
|
47
|
+
requirements:
|
48
|
+
- - ">="
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: '0'
|
51
|
+
type: :development
|
52
|
+
prerelease: false
|
53
|
+
version_requirements: !ruby/object:Gem::Requirement
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: '0'
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: yard
|
60
|
+
requirement: !ruby/object:Gem::Requirement
|
61
|
+
requirements:
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: '0'
|
65
|
+
type: :development
|
66
|
+
prerelease: false
|
67
|
+
version_requirements: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - ">="
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: '0'
|
72
|
+
- !ruby/object:Gem::Dependency
|
73
|
+
name: rspec
|
74
|
+
requirement: !ruby/object:Gem::Requirement
|
75
|
+
requirements:
|
76
|
+
- - ">="
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
79
|
+
type: :development
|
80
|
+
prerelease: false
|
81
|
+
version_requirements: !ruby/object:Gem::Requirement
|
82
|
+
requirements:
|
83
|
+
- - ">="
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
- !ruby/object:Gem::Dependency
|
87
|
+
name: fakeredis
|
88
|
+
requirement: !ruby/object:Gem::Requirement
|
89
|
+
requirements:
|
90
|
+
- - ">="
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: '0'
|
93
|
+
type: :development
|
94
|
+
prerelease: false
|
95
|
+
version_requirements: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - ">="
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '0'
|
100
|
+
- !ruby/object:Gem::Dependency
|
101
|
+
name: guard-rspec
|
102
|
+
requirement: !ruby/object:Gem::Requirement
|
103
|
+
requirements:
|
104
|
+
- - ">="
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: '0'
|
107
|
+
type: :development
|
108
|
+
prerelease: false
|
109
|
+
version_requirements: !ruby/object:Gem::Requirement
|
110
|
+
requirements:
|
111
|
+
- - ">="
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
version: '0'
|
114
|
+
- !ruby/object:Gem::Dependency
|
115
|
+
name: timecop
|
116
|
+
requirement: !ruby/object:Gem::Requirement
|
117
|
+
requirements:
|
118
|
+
- - ">="
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: '0'
|
121
|
+
type: :development
|
122
|
+
prerelease: false
|
123
|
+
version_requirements: !ruby/object:Gem::Requirement
|
124
|
+
requirements:
|
125
|
+
- - ">="
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
version: '0'
|
128
|
+
- !ruby/object:Gem::Dependency
|
129
|
+
name: rake
|
130
|
+
requirement: !ruby/object:Gem::Requirement
|
131
|
+
requirements:
|
132
|
+
- - ">="
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: '0'
|
135
|
+
type: :development
|
136
|
+
prerelease: false
|
137
|
+
version_requirements: !ruby/object:Gem::Requirement
|
138
|
+
requirements:
|
139
|
+
- - ">="
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
142
|
+
description: This gem provides highly flexible and easy to use interface to define
|
143
|
+
rate limit checks, register events as they come, and verify if the rate limit is
|
144
|
+
reached. Multiple checks for the same metric are easily supported. This gem is used
|
145
|
+
at very high scale on several popular web sites.
|
32
146
|
email:
|
33
147
|
- atasay@wanelo.com
|
34
148
|
- paul@wanelo.com
|
35
|
-
- sax@
|
36
|
-
-
|
149
|
+
- sax@ericsaxby.com
|
150
|
+
- kigster@gmail.com
|
37
151
|
executables: []
|
38
152
|
extensions: []
|
39
153
|
extra_rdoc_files: []
|
@@ -65,8 +179,7 @@ files:
|
|
65
179
|
- spec/pause/redis/adapter_spec.rb
|
66
180
|
- spec/pause/redis/sharded_adapter_spec.rb
|
67
181
|
- spec/spec_helper.rb
|
68
|
-
|
69
|
-
homepage: https://github.com/wanelo/pause
|
182
|
+
homepage: https://github.com/kigster/pause
|
70
183
|
licenses: []
|
71
184
|
metadata: {}
|
72
185
|
post_install_message:
|
@@ -85,10 +198,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
85
198
|
version: '0'
|
86
199
|
requirements: []
|
87
200
|
rubyforge_project:
|
88
|
-
rubygems_version: 2.
|
201
|
+
rubygems_version: 2.7.6
|
89
202
|
signing_key:
|
90
203
|
specification_version: 4
|
91
|
-
summary:
|
204
|
+
summary: Fast, scalable, and flexible real time rate limiting library for distributed
|
205
|
+
Ruby environments backed by Redis.
|
92
206
|
test_files:
|
93
207
|
- spec/pause/action_spec.rb
|
94
208
|
- spec/pause/analyzer_spec.rb
|
@@ -97,4 +211,3 @@ test_files:
|
|
97
211
|
- spec/pause/redis/adapter_spec.rb
|
98
212
|
- spec/pause/redis/sharded_adapter_spec.rb
|
99
213
|
- spec/spec_helper.rb
|
100
|
-
- spec/support/fakeredis.rb
|
data/spec/support/fakeredis.rb
DELETED