millrace 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 432ca42c33580083225c20bc89779a29f683dfede32ef37b81732fa88d03b48d
4
- data.tar.gz: 0c93f9c85062b38c70935a47c80a0a69dee635bc387203d0c8d872e2c7a6ed69
3
+ metadata.gz: d1a9fd88ce31a92e5f735102b1ff07bdcd65d40ad6381a558996005f02dc47e2
4
+ data.tar.gz: c3c6396bc63e2bbc35a89dcb425b70786fc89af743fa1daad2ad4710c9855c54
5
5
  SHA512:
6
- metadata.gz: b418c9900de82cea4b9a2713c1cba315d1df1cd6f7c0bd36ed2fdea8f9f3b5c953450753a5fa0b5f7c2c0005ae926a27608156c16cc4cf23bb4e38a690d596a4
7
- data.tar.gz: 03d7422da51e8d09418b3a406f61d7c051527bd5e01697431acaef63955fb890df44940a233ffd8d46a62a18f819efe3b2c745c3d5dcbc8c1d6537784796da76
6
+ metadata.gz: b84c05d38d74d43a5f3fa36847a74ce9057076192cdd97b999513ceba2fe44a85c0c64d914a0642ca6fc54d4b821d8729e7244b83e9061412af1ac13ed3f0429
7
+ data.tar.gz: '0438195141540b2e865676b7eef7837323c2ebc7bac91f11d9088d2bd1f12a6e850b7c340038379e3ef7c93422386eff3e5c5b7d6bb0526763d4568dfdd0e375'
data/README.md CHANGED
@@ -1,5 +1,28 @@
1
1
  # Millrace
2
2
 
3
+ ## Usage
4
+
5
+ ```
6
+ class UsersController
7
+
8
+ before_action Millrace::RateLimit.new(
9
+ name: "follows",
10
+ rate: 1/60.0, # 1 request per minute
11
+ window: 1.minute,
12
+ penalty: 10.minutes,
13
+ ), only: :create
14
+
15
+ rescue_from Millrace::RateLimited do |error|
16
+ # perhaps record metrics here
17
+ response.set_header "Retry-After", error.retry_after
18
+ head :too_many_requests
19
+ end
20
+
21
+ ...
22
+
23
+ end
24
+ ```
25
+
3
26
  ## Contributing
4
27
 
5
28
  Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/millrace. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/[USERNAME]/millrace/blob/main/CODE_OF_CONDUCT.md).
@@ -1,4 +1,4 @@
1
- require "digest"
1
+ girequire "digest"
2
2
  require "prorate"
3
3
 
4
4
  module Millrace
@@ -15,9 +15,9 @@ module Millrace
15
15
 
16
16
  def before(controller)
17
17
  bucket = get_bucket(controller.request.remote_ip)
18
- level = record_request(bucket)
18
+ level = bucket.fillup(1).level
19
19
 
20
- return unless level > threshold
20
+ return if level < threshold
21
21
 
22
22
  if level - 1 < threshold
23
23
  level = bucket.fillup(penalty).level
@@ -32,10 +32,6 @@ module Millrace
32
32
  ((level - threshold) / rate).to_i
33
33
  end
34
34
 
35
- def record_request(bucket)
36
- bucket.fillup(1).level
37
- end
38
-
39
35
  def get_bucket(ip)
40
36
  Prorate::LeakyBucket.new(
41
37
  redis: redis,
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Millrace
4
- VERSION = "0.1.0"
4
+ VERSION = "0.1.1"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: millrace
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ed Robinson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-05-31 00:00:00.000000000 Z
11
+ date: 2024-06-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: prorate