millrace 0.1.0 → 0.1.2

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: 9f6226232a1d343786c9e6f178461e8303ebd3fcf5c5347707708f2a70c04be3
4
+ data.tar.gz: 3ba6489385f5df17d0dce59422cea6948f4e1c1c428f08ef730aba116b31ecc5
5
5
  SHA512:
6
- metadata.gz: b418c9900de82cea4b9a2713c1cba315d1df1cd6f7c0bd36ed2fdea8f9f3b5c953450753a5fa0b5f7c2c0005ae926a27608156c16cc4cf23bb4e38a690d596a4
7
- data.tar.gz: 03d7422da51e8d09418b3a406f61d7c051527bd5e01697431acaef63955fb890df44940a233ffd8d46a62a18f819efe3b2c745c3d5dcbc8c1d6537784796da76
6
+ metadata.gz: e292bee50ea861d0859beffe496a72d1742625c376bc7c6a97fa108e7ab17ada53b7622abc6579e1607dfae8f2375ba9666914d6d5066c857c37effdd88fda36
7
+ data.tar.gz: cb3ea109c7000eb3887581951b890ca8d103374534211eb68cbbf8f78f1acb4aa79304129676a98b6e892fbe370562d5951e7c8d31b0fa3e8275606c6fa965e7
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).
@@ -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.2"
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.2
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