rollie 0.1.0 → 0.1.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 +5 -5
- data/.github/workflows/ci.yml +38 -0
- data/CHANGELOG.md +5 -1
- data/README.md +6 -5
- data/bin/check-version +14 -0
- data/bin/rspec +29 -0
- data/lib/rollie/version.rb +1 -1
- data/rollie.gemspec +6 -6
- data/spec/rollie/rate_limiter_spec.rb +2 -1
- metadata +9 -24
- data/.travis.yml +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f6e0f59a08393e6f0955646fc41f0598b65cccb7d45d1b0ded22c30806bfd2e2
|
4
|
+
data.tar.gz: 209a877efa2dcef64db8c0f63099af0c029e31db39dea4cc13b228d1c5f0ab1d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bc2a3c339d26f054d44f20b331643932c13330767e0e53a1ae2ecdf8b92dff64cdd4eecc6c93f62147857a145bd9b56d1c91eeca8cd5037af1f0f389fc95e538
|
7
|
+
data.tar.gz: 5fed3ce9dd06e6b85e1e17cba4f92a2cb17ae448de79f7e83b22831ebcad42e17cdd64a1eca82acf9a202e2d450ecff75f55de90aa53ddc6d7651877d726e92d
|
@@ -0,0 +1,38 @@
|
|
1
|
+
---
|
2
|
+
name: CI
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
tags: ['v*']
|
6
|
+
branches: [master]
|
7
|
+
pull_request:
|
8
|
+
branches: ['**']
|
9
|
+
jobs:
|
10
|
+
test:
|
11
|
+
runs-on: ubuntu-latest
|
12
|
+
strategy:
|
13
|
+
fail-fast: false
|
14
|
+
matrix:
|
15
|
+
ruby: [2.3, 2.4, 2.5, 2.6, 2.7, 3.0]
|
16
|
+
services:
|
17
|
+
redis:
|
18
|
+
image: redis
|
19
|
+
ports:
|
20
|
+
- 6379:6379
|
21
|
+
steps:
|
22
|
+
- uses: actions/checkout@v2
|
23
|
+
- uses: ruby/setup-ruby@v1
|
24
|
+
with:
|
25
|
+
ruby-version: ${{ matrix.ruby }}
|
26
|
+
bundler-cache: true
|
27
|
+
- run: bundle exec rspec --format doc
|
28
|
+
- run: bin/check-version
|
29
|
+
|
30
|
+
release:
|
31
|
+
needs: test
|
32
|
+
if: startsWith(github.ref, 'refs/tags/v')
|
33
|
+
runs-on: ubuntu-latest
|
34
|
+
steps:
|
35
|
+
- uses: actions/checkout@v2
|
36
|
+
- uses: dawidd6/action-publish-gem@v1
|
37
|
+
with:
|
38
|
+
api_key: ${{secrets.RUBYGEMS_API_KEY}}
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
# Rollie
|
2
2
|
|
3
|
-
|
3
|
+

|
4
4
|
|
5
5
|
Rollie is a multi-purpose, fast, redis backed rate limiter that can be used to limit requests to external APIs, in Rack
|
6
6
|
middleware, etc. Rollie uses a dedicated redis connection pool implemented using `connection_pool` for more efficient
|
7
|
-
redis connection management.
|
8
|
-
|
7
|
+
redis connection management. The redis algorithm was inspired by the
|
8
|
+
[rolling-rate-limiter](https://www.npmjs.com/package/rolling-rate-limiter) node package.
|
9
|
+
|
9
10
|
The key implementation detail is that Rollie utilizes a rolling window to bucket invocations in. Meaning, if you set
|
10
11
|
a limit of 100 per 30 seconds, Rollie will start the clock in instant it is first executed with a given key.
|
11
|
-
|
12
|
+
|
12
13
|
For example, first execution:
|
13
14
|
```
|
14
15
|
rollie = Rollie::RateLimiter.new("api", limit: 10, interval: 30000)
|
@@ -91,4 +92,4 @@ Rollie.redis = {
|
|
91
92
|
}
|
92
93
|
```
|
93
94
|
|
94
|
-
If using rails, create an initializer `config/initializers/rollie.rb` with these settings.
|
95
|
+
If using rails, create an initializer `config/initializers/rollie.rb` with these settings.
|
data/bin/check-version
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env sh
|
2
|
+
|
3
|
+
set -e
|
4
|
+
|
5
|
+
tag="$(git describe --abbrev=0 2>/dev/null || echo)"
|
6
|
+
echo "Tag: ${tag}"
|
7
|
+
tag="${tag#v}"
|
8
|
+
echo "Git Version: ${tag}"
|
9
|
+
[ "$tag" = '' ] && exit 0
|
10
|
+
gem_version="$(ruby -r ./lib/rollie/version -e "puts Rollie::VERSION" | tail -n1)"
|
11
|
+
echo "Gem Version: ${gem_version}"
|
12
|
+
|
13
|
+
tag_gt_version="$(ruby -r ./lib/rollie/version -e "puts Gem::Version.new(Rollie::VERSION) >= Gem::Version.new('${tag}')" | tail -n1)"
|
14
|
+
test "$tag_gt_version" = true
|
data/bin/rspec
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
#
|
5
|
+
# This file was generated by Bundler.
|
6
|
+
#
|
7
|
+
# The application 'rspec' is installed as part of a gem, and
|
8
|
+
# this file is here to facilitate running it.
|
9
|
+
#
|
10
|
+
|
11
|
+
require "pathname"
|
12
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
13
|
+
Pathname.new(__FILE__).realpath)
|
14
|
+
|
15
|
+
bundle_binstub = File.expand_path("../bundle", __FILE__)
|
16
|
+
|
17
|
+
if File.file?(bundle_binstub)
|
18
|
+
if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
|
19
|
+
load(bundle_binstub)
|
20
|
+
else
|
21
|
+
abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
|
22
|
+
Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
require "rubygems"
|
27
|
+
require "bundler/setup"
|
28
|
+
|
29
|
+
load Gem.bin_path("rspec-core", "rspec")
|
data/lib/rollie/version.rb
CHANGED
data/rollie.gemspec
CHANGED
@@ -9,16 +9,16 @@ Gem::Specification.new do |s|
|
|
9
9
|
s.summary = "Generic rate limiter backed by Redis for efficient limiting using sliding windows."
|
10
10
|
s.description = s.summary
|
11
11
|
|
12
|
-
s.authors = ["Zach Davis"]
|
13
|
-
s.email = "
|
14
|
-
s.homepage = "https://github.com/
|
12
|
+
s.authors = ["Zach Davis", "Justin Howard"]
|
13
|
+
s.email = "justin.howard@parentsquare.com"
|
14
|
+
s.homepage = "https://github.com/ParentSquare/rollie"
|
15
15
|
|
16
16
|
s.files = `git ls-files -z`.split("\x0")
|
17
17
|
s.test_files = `git ls-files -- test/*`.split("\n")
|
18
18
|
|
19
19
|
s.require_paths = ["lib"]
|
20
20
|
|
21
|
-
s.add_dependency "redis", "
|
22
|
-
s.add_dependency "redis-namespace", "
|
23
|
-
s.add_dependency "connection_pool", "
|
21
|
+
s.add_dependency "redis", ">= 3.2.1"
|
22
|
+
s.add_dependency "redis-namespace", ">= 1.5.2"
|
23
|
+
s.add_dependency "connection_pool", ">= 2.2.0"
|
24
24
|
end
|
metadata
CHANGED
@@ -1,22 +1,20 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rollie
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Zach Davis
|
8
|
+
- Justin Howard
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date:
|
12
|
+
date: 2020-12-31 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: redis
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
16
17
|
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '3.2'
|
20
18
|
- - ">="
|
21
19
|
- !ruby/object:Gem::Version
|
22
20
|
version: 3.2.1
|
@@ -24,9 +22,6 @@ dependencies:
|
|
24
22
|
prerelease: false
|
25
23
|
version_requirements: !ruby/object:Gem::Requirement
|
26
24
|
requirements:
|
27
|
-
- - "~>"
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: '3.2'
|
30
25
|
- - ">="
|
31
26
|
- !ruby/object:Gem::Version
|
32
27
|
version: 3.2.1
|
@@ -34,9 +29,6 @@ dependencies:
|
|
34
29
|
name: redis-namespace
|
35
30
|
requirement: !ruby/object:Gem::Requirement
|
36
31
|
requirements:
|
37
|
-
- - "~>"
|
38
|
-
- !ruby/object:Gem::Version
|
39
|
-
version: '1.5'
|
40
32
|
- - ">="
|
41
33
|
- !ruby/object:Gem::Version
|
42
34
|
version: 1.5.2
|
@@ -44,9 +36,6 @@ dependencies:
|
|
44
36
|
prerelease: false
|
45
37
|
version_requirements: !ruby/object:Gem::Requirement
|
46
38
|
requirements:
|
47
|
-
- - "~>"
|
48
|
-
- !ruby/object:Gem::Version
|
49
|
-
version: '1.5'
|
50
39
|
- - ">="
|
51
40
|
- !ruby/object:Gem::Version
|
52
41
|
version: 1.5.2
|
@@ -54,9 +43,6 @@ dependencies:
|
|
54
43
|
name: connection_pool
|
55
44
|
requirement: !ruby/object:Gem::Requirement
|
56
45
|
requirements:
|
57
|
-
- - "~>"
|
58
|
-
- !ruby/object:Gem::Version
|
59
|
-
version: '2.2'
|
60
46
|
- - ">="
|
61
47
|
- !ruby/object:Gem::Version
|
62
48
|
version: 2.2.0
|
@@ -64,27 +50,26 @@ dependencies:
|
|
64
50
|
prerelease: false
|
65
51
|
version_requirements: !ruby/object:Gem::Requirement
|
66
52
|
requirements:
|
67
|
-
- - "~>"
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: '2.2'
|
70
53
|
- - ">="
|
71
54
|
- !ruby/object:Gem::Version
|
72
55
|
version: 2.2.0
|
73
56
|
description: Generic rate limiter backed by Redis for efficient limiting using sliding
|
74
57
|
windows.
|
75
|
-
email:
|
58
|
+
email: justin.howard@parentsquare.com
|
76
59
|
executables: []
|
77
60
|
extensions: []
|
78
61
|
extra_rdoc_files: []
|
79
62
|
files:
|
63
|
+
- ".github/workflows/ci.yml"
|
80
64
|
- ".gitignore"
|
81
65
|
- ".rspec"
|
82
|
-
- ".travis.yml"
|
83
66
|
- CHANGELOG.md
|
84
67
|
- Gemfile
|
85
68
|
- LICENSE
|
86
69
|
- README.md
|
87
70
|
- Rakefile
|
71
|
+
- bin/check-version
|
72
|
+
- bin/rspec
|
88
73
|
- lib/rollie.rb
|
89
74
|
- lib/rollie/rate_limiter.rb
|
90
75
|
- lib/rollie/redis_pool.rb
|
@@ -94,7 +79,7 @@ files:
|
|
94
79
|
- spec/rollie/rate_limiter_spec.rb
|
95
80
|
- spec/rollie_spec.rb
|
96
81
|
- spec/spec_helper.rb
|
97
|
-
homepage: https://github.com/
|
82
|
+
homepage: https://github.com/ParentSquare/rollie
|
98
83
|
licenses:
|
99
84
|
- MIT
|
100
85
|
metadata: {}
|
@@ -114,7 +99,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
114
99
|
version: '0'
|
115
100
|
requirements: []
|
116
101
|
rubyforge_project:
|
117
|
-
rubygems_version: 2.
|
102
|
+
rubygems_version: 2.7.6
|
118
103
|
signing_key:
|
119
104
|
specification_version: 4
|
120
105
|
summary: Generic rate limiter backed by Redis for efficient limiting using sliding
|
data/.travis.yml
DELETED