coil 1.5.3 → 1.5.5

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: 407af370c8e8e90f90f405080773d402ee8839b224d9d0f425f00b141864d039
4
- data.tar.gz: a55d8cad9418bbaac9fb11b0e0b205978ab1de9d076dbfb45c5f9cd937924ab9
3
+ metadata.gz: 4e06deca7bbca4aaeb692c3b438da2fd668f709d1f7e4a2abbb0caae7edc2aba
4
+ data.tar.gz: 5a629055bfc265a3162b25744dfe78efb5910f1f609c13c912f897e862c00fc8
5
5
  SHA512:
6
- metadata.gz: fd54ea422cc7b12821838ca16e5be8fe18243fdfc5c9c830815eb4a37def6af9b2a6e38d73b4557b04d0c5e15932d5c70cb579976cd346bebd349970b788b686
7
- data.tar.gz: 02d7c35b193e56998f0d4a91cd8ca7aab94ae289628e767484229e8451a40740873c40b130b6c410d4de3d015bd90ee90364a26d2ee0b3bef14fe1e42302886d
6
+ metadata.gz: da9af31450e4132693a7d9a514892fedaa6f66df725cc23c9b667038d3dfc15688524ce530d10cf4cdaf9d5ce1fa8e5fdbd6e003fa0ff0a894d16df673d13139
7
+ data.tar.gz: ec35ff6c3ecc9a18739e15adf93822ad103043cc8bdfb213f2c7c0e767b1364cef180fe572586e79414d4eec481680ea70b014ad6e403ff343ff686ec4c1255c
data/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  ## main
2
2
 
3
+ ## [1.5.5](https://github.com/OdekoTeam/coil/compare/1.5.4...1.5.5) (2025-03-24)
4
+ #### Added
5
+ - Rails 8 support ([bcc6885](https://github.com/OdekoTeam/coil/commit/bcc6885bdbe3a7dedbc505edee0482d215fe9d91))
6
+
7
+ ## [1.5.4](https://github.com/OdekoTeam/coil/compare/1.5.3...1.5.4) (2025-03-24)
8
+ #### Added
9
+ - Rails 7.2 support ([be1cdc4](https://github.com/OdekoTeam/coil/commit/be1cdc4bde1fb73d1ac24f3b786a1d58a748d87f))
10
+
3
11
  ## [1.5.3](https://github.com/OdekoTeam/coil/compare/1.5.2...1.5.3) (2025-03-24)
4
12
  #### Added
5
13
  - Ruby 3.2 and 3.3 support ([a4ceb7c](https://github.com/OdekoTeam/coil/commit/a4ceb7cf2cefc47ae3c14a876a0782aaec0e5c43))
@@ -60,8 +60,9 @@ module Coil
60
60
  ks = keys.uniq(&:int64).sort_by(&:int64).reverse
61
61
 
62
62
  fn = ks.reduce(blk) do |f, key|
63
- -> do
64
- with_lock(key:, wait:, &f)
63
+ ->(*args) do
64
+ lock(key:, wait:)
65
+ f.call(*args)
65
66
  end
66
67
  end
67
68
 
@@ -70,22 +71,21 @@ module Coil
70
71
 
71
72
  private
72
73
 
73
- def with_lock(key:, wait:, &blk)
74
- wait ? lock(key:) : try_lock(key:)
75
- blk.call
74
+ def lock(key:, wait:)
75
+ wait ? acquire_lock(key:) : try_acquire_lock(key:)
76
76
  end
77
77
 
78
78
  ACQUIRE_LOCK = "pg_advisory_xact_lock"
79
79
  TRY_ACQUIRE_LOCK = "pg_try_advisory_xact_lock"
80
80
 
81
- def lock(key:)
81
+ def acquire_lock(key:)
82
82
  command = sql(fn: ACQUIRE_LOCK, key:)
83
83
  connection.execute(command)
84
84
  rescue ActiveRecord::LockWaitTimeout
85
85
  raise LockWaitTimeout
86
86
  end
87
87
 
88
- def try_lock(key:)
88
+ def try_acquire_lock(key:)
89
89
  query = sql(fn: TRY_ACQUIRE_LOCK, key:)
90
90
  return if connection.select_value(query)
91
91
  raise LockWaitTimeout
data/lib/coil/version.rb CHANGED
@@ -2,5 +2,5 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module Coil
5
- VERSION = "1.5.3"
5
+ VERSION = "1.5.5"
6
6
  end
data/lib/coil.rb CHANGED
@@ -4,6 +4,7 @@ require "rails"
4
4
  require "coil/version"
5
5
  require "coil/engine"
6
6
  require "coil/queue_locking"
7
+ require "active_support/core_ext/integer/time"
7
8
 
8
9
  module Coil
9
10
  mattr_accessor :sidekiq_queue, default: "default"
data/rbi/coil.rbi CHANGED
@@ -187,7 +187,12 @@ module Coil::QueueLocking
187
187
  message_type: String,
188
188
  message_keys: T::Array[T.untyped],
189
189
  wait: T::Boolean,
190
- blk: T.proc.returns(T.type_parameter(:P))
190
+ blk: T.any(
191
+ # ActiveRecord versions 7.2 and newer yield a transaction as the block arg.
192
+ T.proc.params(arg0: ActiveRecord::Transaction).returns(T.type_parameter(:P)),
193
+ # Earlier versions yield to the block with no args.
194
+ T.proc.returns(T.type_parameter(:P))
195
+ )
191
196
  ).returns(T.type_parameter(:P))
192
197
  end
193
198
  def locking(queue_type:, message_type:, message_keys:, wait: T.unsafe(nil), &blk); end
@@ -198,23 +203,16 @@ module Coil::QueueLocking
198
203
  def connection; end
199
204
 
200
205
  sig { params(key: Key).void }
201
- def lock(key:); end
206
+ def acquire_lock(key:); end
202
207
 
203
208
  sig { params(fn: String, key: Key).returns(String) }
204
209
  def sql(fn:, key:); end
205
210
 
206
211
  sig { params(key: Key).void }
207
- def try_lock(key:); end
212
+ def try_acquire_lock(key:); end
208
213
 
209
- sig do
210
- type_parameters(:P)
211
- .params(
212
- key: Key,
213
- wait: T::Boolean,
214
- blk: T.proc.returns(T.type_parameter(:P))
215
- ).returns(T.type_parameter(:P))
216
- end
217
- def with_lock(key:, wait:, &blk); end
214
+ sig { params(key: Key, wait: T::Boolean).void }
215
+ def lock(key:, wait:); end
218
216
  end
219
217
 
220
218
  Coil::QueueLocking::ACQUIRE_LOCK = T.let(T.unsafe(nil), String)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: coil
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.3
4
+ version: 1.5.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Brennan
@@ -20,7 +20,7 @@ dependencies:
20
20
  version: 6.0.6
21
21
  - - "<"
22
22
  - !ruby/object:Gem::Version
23
- version: '8.0'
23
+ version: '9.0'
24
24
  type: :runtime
25
25
  prerelease: false
26
26
  version_requirements: !ruby/object:Gem::Requirement
@@ -30,7 +30,7 @@ dependencies:
30
30
  version: 6.0.6
31
31
  - - "<"
32
32
  - !ruby/object:Gem::Version
33
- version: '8.0'
33
+ version: '9.0'
34
34
  - !ruby/object:Gem::Dependency
35
35
  name: sidekiq
36
36
  requirement: !ruby/object:Gem::Requirement
@@ -75,22 +75,22 @@ dependencies:
75
75
  name: rails
76
76
  requirement: !ruby/object:Gem::Requirement
77
77
  requirements:
78
- - - ">="
78
+ - - "~>"
79
79
  - !ruby/object:Gem::Version
80
- version: 6.0.6
80
+ version: '8.0'
81
81
  - - "<"
82
82
  - !ruby/object:Gem::Version
83
- version: '8.0'
83
+ version: '9.0'
84
84
  type: :development
85
85
  prerelease: false
86
86
  version_requirements: !ruby/object:Gem::Requirement
87
87
  requirements:
88
- - - ">="
88
+ - - "~>"
89
89
  - !ruby/object:Gem::Version
90
- version: 6.0.6
90
+ version: '8.0'
91
91
  - - "<"
92
92
  - !ruby/object:Gem::Version
93
- version: '8.0'
93
+ version: '9.0'
94
94
  - !ruby/object:Gem::Dependency
95
95
  name: sidekiq
96
96
  requirement: !ruby/object:Gem::Requirement
@@ -179,14 +179,14 @@ dependencies:
179
179
  requirements:
180
180
  - - "~>"
181
181
  - !ruby/object:Gem::Version
182
- version: '0.8'
182
+ version: '0.9'
183
183
  type: :development
184
184
  prerelease: false
185
185
  version_requirements: !ruby/object:Gem::Requirement
186
186
  requirements:
187
187
  - - "~>"
188
188
  - !ruby/object:Gem::Version
189
- version: '0.8'
189
+ version: '0.9'
190
190
  - !ruby/object:Gem::Dependency
191
191
  name: debug
192
192
  requirement: !ruby/object:Gem::Requirement
@@ -221,14 +221,14 @@ dependencies:
221
221
  requirements:
222
222
  - - "~>"
223
223
  - !ruby/object:Gem::Version
224
- version: '0.14'
224
+ version: '0.16'
225
225
  type: :development
226
226
  prerelease: false
227
227
  version_requirements: !ruby/object:Gem::Requirement
228
228
  requirements:
229
229
  - - "~>"
230
230
  - !ruby/object:Gem::Version
231
- version: '0.14'
231
+ version: '0.16'
232
232
  - !ruby/object:Gem::Dependency
233
233
  name: parlour
234
234
  requirement: !ruby/object:Gem::Requirement