millrace 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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