gcra 1.2.1 → 1.3.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: 4523f1a5f4d9e01c3363bbfd24a1d50f3933799a3ee8ac2774a82de49687344e
4
- data.tar.gz: 963f7aaa9d67b39920bedc148d7b5c89d7acc7ec6a538fef58b7f845804e2f05
3
+ metadata.gz: 423a09e8fad6de7de3fea1bbeb9fbaeba9b68606558ea555a770ab0d744a8f2d
4
+ data.tar.gz: 0a398f0db3ea50330caecce3e56a69ccb5e8dc286633fa114f9ccfcd3ba22039
5
5
  SHA512:
6
- metadata.gz: 7b049fed03339f68e9ef24e6c4d715b28a894a990deb3e50d4f9bedc4af621f7440300efe41b519158b982806df9b3495972de367e39ae8c599095a0e42466e8
7
- data.tar.gz: 6f65016b71ad0fce7b47e1f5340e04023ba800304404e1d7eb1dcedb6a183e4dfb0550a58a0cf9b326ef5218f06763e6d12b8b11d79055bda19815a669ef867e
6
+ metadata.gz: 9be28b39e06b8715f2ce7249a35e727538bdbcc3e48bdea59849fc906ac9dc8fee5d69af54d405321bc3bce98db6c7b9cd4f1aef0f7012e08ca830b8853d081b
7
+ data.tar.gz: b39c6f352d0a2b9617827394eb725e7a6dc52554705c0e3066af790ed19446218385524c89f2f002239fce31aa025082eb9e867fcf0d5a70e7ea90674ba54d7c
@@ -15,10 +15,10 @@ module GCRA
15
15
 
16
16
  # Digest::SHA1.hexdigest(CAS_SCRIPT)
17
17
  CAS_SHA = "89118e702230c0d65969c5fc557a6e942a2f4d31".freeze
18
- CAS_SCRIPT_MISSING_KEY_RESPONSE = 'key does not exist'.freeze
19
- SCRIPT_NOT_IN_CACHE_RESPONSE = 'NOSCRIPT No matching script. Please use EVAL.'.freeze
20
-
21
- CONNECTED_TO_READONLY = "READONLY You can't write against a read only slave.".freeze
18
+ CAS_SCRIPT_MISSING_KEY_RESPONSE_PATTERN = Regexp.new('^key does not exist')
19
+ SCRIPT_NOT_IN_CACHE_RESPONSE_PATTERN = Regexp.new(
20
+ '^NOSCRIPT No matching script(?:\. Please use EVAL\.)?'
21
+ )
22
22
 
23
23
  def initialize(redis, key_prefix, options = {})
24
24
  @redis = redis
@@ -51,9 +51,9 @@ module GCRA
51
51
  begin
52
52
  ttl_milli = calculate_ttl_milli(ttl_nano)
53
53
  @redis.set(full_key, value, nx: true, px: ttl_milli)
54
- rescue Redis::CommandError => e
55
- if e.message == CONNECTED_TO_READONLY && @reconnect_on_readonly && !retried
56
- @redis.client.reconnect
54
+ rescue Redis::ReadOnlyError => e
55
+ if @reconnect_on_readonly && !retried
56
+ @redis.close
57
57
  retried = true
58
58
  retry
59
59
  end
@@ -70,17 +70,20 @@ module GCRA
70
70
  begin
71
71
  ttl_milli = calculate_ttl_milli(ttl_nano)
72
72
  swapped = @redis.evalsha(CAS_SHA, keys: [full_key], argv: [old_value, new_value, ttl_milli])
73
+ rescue Redis::ReadOnlyError => e
74
+ if @reconnect_on_readonly && !retried
75
+ @redis.close
76
+ retried = true
77
+ retry
78
+ end
79
+ raise
73
80
  rescue Redis::CommandError => e
74
- if e.message == CAS_SCRIPT_MISSING_KEY_RESPONSE
81
+ if e.message =~ CAS_SCRIPT_MISSING_KEY_RESPONSE_PATTERN
75
82
  return false
76
- elsif e.message == SCRIPT_NOT_IN_CACHE_RESPONSE && !retried
83
+ elsif e.message =~ SCRIPT_NOT_IN_CACHE_RESPONSE_PATTERN && !retried
77
84
  @redis.script('load', CAS_SCRIPT)
78
85
  retried = true
79
86
  retry
80
- elsif e.message == CONNECTED_TO_READONLY && @reconnect_on_readonly && !retried
81
- @redis.client.reconnect
82
- retried = true
83
- retry
84
87
  end
85
88
  raise
86
89
  end
data/lib/gcra/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module GCRA
2
- VERSION = '1.2.1'.freeze
2
+ VERSION = '1.3.1'.freeze
3
3
  end
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gcra
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Frister
8
8
  - Tobias Schoknecht
9
- autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2022-02-12 00:00:00.000000000 Z
11
+ date: 2025-06-27 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rspec
@@ -17,28 +16,28 @@ dependencies:
17
16
  requirements:
18
17
  - - "~>"
19
18
  - !ruby/object:Gem::Version
20
- version: '3.5'
19
+ version: '3.12'
21
20
  type: :development
22
21
  prerelease: false
23
22
  version_requirements: !ruby/object:Gem::Requirement
24
23
  requirements:
25
24
  - - "~>"
26
25
  - !ruby/object:Gem::Version
27
- version: '3.5'
26
+ version: '3.12'
28
27
  - !ruby/object:Gem::Dependency
29
28
  name: redis
30
29
  requirement: !ruby/object:Gem::Requirement
31
30
  requirements:
32
31
  - - "~>"
33
32
  - !ruby/object:Gem::Version
34
- version: '3.3'
33
+ version: '5.1'
35
34
  type: :development
36
35
  prerelease: false
37
36
  version_requirements: !ruby/object:Gem::Requirement
38
37
  requirements:
39
38
  - - "~>"
40
39
  - !ruby/object:Gem::Version
41
- version: '3.3'
40
+ version: '5.1'
42
41
  description: GCRA implementation for rate limiting
43
42
  email:
44
43
  - tobias.schoknecht@viafintech.com
@@ -53,7 +52,6 @@ homepage: https://github.com/viafintech/gcra-ruby
53
52
  licenses:
54
53
  - MIT
55
54
  metadata: {}
56
- post_install_message:
57
55
  rdoc_options: []
58
56
  require_paths:
59
57
  - lib
@@ -68,8 +66,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
68
66
  - !ruby/object:Gem::Version
69
67
  version: '0'
70
68
  requirements: []
71
- rubygems_version: 3.0.6
72
- signing_key:
69
+ rubygems_version: 3.6.2
73
70
  specification_version: 4
74
71
  summary: Ruby implementation of a generic cell rate algorithm (GCRA), ported from
75
72
  the Go implementation throttled.