kicks 3.1.0 → 3.2.0
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 +4 -4
- data/ChangeLog.md +23 -2
- data/README.md +2 -1
- data/kicks.gemspec +2 -2
- data/lib/active_job/queue_adapters/sneakers_adapter.rb +3 -3
- data/lib/sneakers/configuration.rb +1 -1
- data/lib/sneakers/handlers/maxretry.rb +6 -2
- data/lib/sneakers/publisher.rb +9 -5
- data/lib/sneakers/queue.rb +6 -2
- data/lib/sneakers/version.rb +1 -1
- data/spec/sneakers/publisher_spec.rb +26 -1
- data/spec/sneakers/queue_spec.rb +14 -9
- metadata +7 -10
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7899bb171d5e5399547c0b02c33753e23bc8cfaec63e614baa84cd473448a45d
|
|
4
|
+
data.tar.gz: 3b5b708557aae6c815a2ad23cf86115e5d39ad397cd1e52099ed2e621b26848a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 57565fbb9e74e4b990f62e482293ff41cdffebb0b75875b4c654a34e4bb6ed037e2cc9305f15c1c6920e789749a484403badbc2f7aad58b811d614b0d2e51080
|
|
7
|
+
data.tar.gz: e6516ab5c10e167a1e94b0a80f82b68dbe330be53603d4cc7132104e0827f013c3cc930b1f3fe2ecc5f2f65a6cbf140707ccd3bd709fbae5ae0eae0747e2b8d7
|
data/ChangeLog.md
CHANGED
|
@@ -1,8 +1,29 @@
|
|
|
1
1
|
# Change Log
|
|
2
2
|
|
|
3
|
-
## Changes Between 3.
|
|
3
|
+
## Changes Between 3.2.0 and 3.3.0 (in development)
|
|
4
4
|
|
|
5
|
-
No changes yet.
|
|
5
|
+
No (documented) changes yet.
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
## Changes Between 3.1.0 and 3.2.0 (Jan 26, 2025)
|
|
9
|
+
|
|
10
|
+
### Improved Support for Bring-Your-Own-Connection (BYOC)
|
|
11
|
+
|
|
12
|
+
Kicks now supports a callable (e.g. a proc) to be passed for an externally-initialized
|
|
13
|
+
and managed Bunny connection. In this case, it is entirely up to the caller
|
|
14
|
+
to configure the connection and call `Bunny::Session#start` on it
|
|
15
|
+
at the right moment.
|
|
16
|
+
|
|
17
|
+
Contributed by @tie.
|
|
18
|
+
|
|
19
|
+
GitHub issue: [#29](https://github.com/ruby-amqp/kicks/pull/29)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
### ActiveJob Adapter Compatibility with Ruby on Rails Older Than 7.2
|
|
23
|
+
|
|
24
|
+
Contributed by @dixpac.
|
|
25
|
+
|
|
26
|
+
GitHub issues: [#19](https://github.com/ruby-amqp/kicks/pull/19), [#28](https://github.com/ruby-amqp/kicks/pull/28)
|
|
6
27
|
|
|
7
28
|
|
|
8
29
|
## Changes Between 3.0.0 and 3.1.0 (Oct 20, 2024)
|
data/README.md
CHANGED
|
@@ -212,5 +212,6 @@ See [LICENSE](LICENSE.txt) for further details.
|
|
|
212
212
|
|
|
213
213
|
## Copyright
|
|
214
214
|
|
|
215
|
-
Copyright (c) 2023-2024 Kicks contributors
|
|
215
|
+
Copyright (c) 2023-2024 Kicks contributors.
|
|
216
|
+
|
|
216
217
|
Copyright (c) 2015-2023 [Dotan Nahum](http://gplus.to/dotan) [@jondot](http://twitter.com/jondot).
|
data/kicks.gemspec
CHANGED
|
@@ -31,8 +31,8 @@ Gem::Specification.new do |gem|
|
|
|
31
31
|
gem.add_dependency 'rake', '>= 12.3', '< 14.0'
|
|
32
32
|
|
|
33
33
|
# for integration environment (see .travis.yml and integration_spec)
|
|
34
|
-
gem.add_development_dependency 'activejob', '>= 7.
|
|
35
|
-
gem.add_development_dependency 'activesupport', '>= 7.
|
|
34
|
+
gem.add_development_dependency 'activejob', '>= 7.2'
|
|
35
|
+
gem.add_development_dependency 'activesupport', '>= 7.2'
|
|
36
36
|
gem.add_development_dependency 'rabbitmq_http_api_client'
|
|
37
37
|
gem.add_development_dependency 'redis'
|
|
38
38
|
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
module ActiveJob
|
|
2
2
|
module QueueAdapters
|
|
3
|
-
# Explicitly remove the implementation existing in older
|
|
4
|
-
remove_const(:SneakersAdapter) if
|
|
3
|
+
# Explicitly remove the implementation existing in older Rails versions'.
|
|
4
|
+
remove_const(:SneakersAdapter) if const_defined?(:SneakersAdapter)
|
|
5
5
|
|
|
6
6
|
# = Sneakers adapter for Active Job
|
|
7
7
|
#
|
|
8
8
|
# To use Sneakers set the queue_adapter config to +:sneakers+.
|
|
9
9
|
#
|
|
10
10
|
# Rails.application.config.active_job.queue_adapter = :sneakers
|
|
11
|
-
class SneakersAdapter
|
|
11
|
+
class SneakersAdapter
|
|
12
12
|
def initialize
|
|
13
13
|
@monitor = Monitor.new
|
|
14
14
|
end
|
|
@@ -5,7 +5,7 @@ module Sneakers
|
|
|
5
5
|
class Configuration
|
|
6
6
|
|
|
7
7
|
extend Forwardable
|
|
8
|
-
def_delegators :@hash, :to_hash, :[], :[]=, :==, :fetch, :delete, :has_key
|
|
8
|
+
def_delegators :@hash, :to_hash, :[], :[]=, :==, :fetch, :delete, :has_key?, :dig
|
|
9
9
|
|
|
10
10
|
EXCHANGE_OPTION_DEFAULTS = {
|
|
11
11
|
:type => :direct,
|
|
@@ -84,8 +84,12 @@ module Sneakers
|
|
|
84
84
|
|
|
85
85
|
def self.configure_queue(name, opts)
|
|
86
86
|
retry_name = opts.fetch(:retry_exchange, "#{name}-retry")
|
|
87
|
-
opt_args = opts
|
|
88
|
-
|
|
87
|
+
opt_args = if opts.dig(:queue_options, :arguments).blank?
|
|
88
|
+
{}
|
|
89
|
+
else
|
|
90
|
+
opts.dig(:queue_options, :arguments).transform_keys(&:to_sym)
|
|
91
|
+
end
|
|
92
|
+
opts[:queue_options][:arguments] = { :'x-dead-letter-exchange' => retry_name }.merge!(opt_args)
|
|
89
93
|
opts[:queue_options]
|
|
90
94
|
end
|
|
91
95
|
|
data/lib/sneakers/publisher.rb
CHANGED
|
@@ -6,9 +6,6 @@ module Sneakers
|
|
|
6
6
|
def initialize(opts = {})
|
|
7
7
|
@mutex = Mutex.new
|
|
8
8
|
@opts = Sneakers::CONFIG.merge(opts)
|
|
9
|
-
# If we've already got a bunny object, use it. This allows people to
|
|
10
|
-
# specify all kinds of options we don't need to know about (e.g. for ssl).
|
|
11
|
-
@bunny = @opts[:connection]
|
|
12
9
|
end
|
|
13
10
|
|
|
14
11
|
def publish(msg, options = {})
|
|
@@ -29,8 +26,15 @@ module Sneakers
|
|
|
29
26
|
|
|
30
27
|
private
|
|
31
28
|
def connect!
|
|
32
|
-
|
|
33
|
-
|
|
29
|
+
# If we've already got a bunny object, use it. This allows people to
|
|
30
|
+
# specify all kinds of options we don't need to know about (e.g. for ssl).
|
|
31
|
+
@bunny = @opts[:connection]
|
|
32
|
+
if @bunny.respond_to?(:call)
|
|
33
|
+
@bunny = @bunny.call
|
|
34
|
+
else
|
|
35
|
+
@bunny ||= create_bunny_connection
|
|
36
|
+
@bunny.start
|
|
37
|
+
end
|
|
34
38
|
@channel = @bunny.create_channel
|
|
35
39
|
@exchange = @channel.exchange(@opts[:exchange], **@opts[:exchange_options])
|
|
36
40
|
end
|
data/lib/sneakers/queue.rb
CHANGED
|
@@ -19,8 +19,12 @@ class Sneakers::Queue
|
|
|
19
19
|
# If we've already got a bunny object, use it. This allows people to
|
|
20
20
|
# specify all kinds of options we don't need to know about (e.g. for ssl).
|
|
21
21
|
@bunny = @opts[:connection]
|
|
22
|
-
@bunny
|
|
23
|
-
|
|
22
|
+
if @bunny.respond_to?(:call)
|
|
23
|
+
@bunny = @bunny.call
|
|
24
|
+
else
|
|
25
|
+
@bunny ||= create_bunny_connection
|
|
26
|
+
@bunny.start
|
|
27
|
+
end
|
|
24
28
|
|
|
25
29
|
@channel = @bunny.create_channel
|
|
26
30
|
@channel.prefetch(@opts[:prefetch])
|
data/lib/sneakers/version.rb
CHANGED
|
@@ -122,19 +122,44 @@ describe Sneakers::Publisher do
|
|
|
122
122
|
durable: false
|
|
123
123
|
)
|
|
124
124
|
@existing_session = existing_session
|
|
125
|
+
@exchange = exchange
|
|
126
|
+
@channel = channel
|
|
125
127
|
end
|
|
126
128
|
|
|
127
|
-
it 'can handle an existing connection
|
|
129
|
+
it 'can handle an existing connection object' do
|
|
128
130
|
p = Sneakers::Publisher.new
|
|
129
131
|
p.publish('test msg', my_vars)
|
|
130
132
|
_(p.instance_variable_get(:@bunny)).must_equal @existing_session
|
|
131
133
|
end
|
|
132
134
|
|
|
135
|
+
it 'can handle an existing connection function' do
|
|
136
|
+
@existing_session.start
|
|
137
|
+
p = Sneakers::Publisher.new(connection: ->() { @existing_session })
|
|
138
|
+
p.publish('test msg', my_vars)
|
|
139
|
+
_(p.instance_variable_get(:@bunny)).must_equal @existing_session
|
|
140
|
+
end
|
|
141
|
+
|
|
133
142
|
it 'can handle an existing connection that is online' do
|
|
143
|
+
p = Sneakers::Publisher.new
|
|
144
|
+
p.publish('test msg', my_vars)
|
|
145
|
+
_(p.instance_variable_get(:@bunny)).must_equal @existing_session
|
|
134
146
|
mock(@existing_session).connected? { true }
|
|
147
|
+
mock(@exchange).publish('test msg 2', my_vars)
|
|
148
|
+
p.publish('test msg 2', my_vars)
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
it 'can handle an existing connection that goes offline' do
|
|
135
152
|
p = Sneakers::Publisher.new
|
|
136
153
|
p.publish('test msg', my_vars)
|
|
137
154
|
_(p.instance_variable_get(:@bunny)).must_equal @existing_session
|
|
155
|
+
mock(@existing_session).connected? { false }
|
|
156
|
+
mock(@existing_session).start
|
|
157
|
+
mock(@existing_session).create_channel { @channel }
|
|
158
|
+
mock(@channel).exchange('another_exchange', type: :topic, durable: false, :auto_delete => false, arguments: { 'x-arg' => 'value' }) do
|
|
159
|
+
@exchange
|
|
160
|
+
end
|
|
161
|
+
mock(@exchange).publish('test msg 2', my_vars)
|
|
162
|
+
p.publish('test msg 2', my_vars)
|
|
138
163
|
end
|
|
139
164
|
end
|
|
140
165
|
|
data/spec/sneakers/queue_spec.rb
CHANGED
|
@@ -150,19 +150,24 @@ describe Sneakers::Queue do
|
|
|
150
150
|
:type => :direct,
|
|
151
151
|
:durable => true,
|
|
152
152
|
:arguments => { 'x-arg' => 'value' }){ @mkex }
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
mock(@mkchan).queue(queue_name, :durable => true) { @mkqueue }
|
|
156
|
-
mock(@mkqueue).bind(@mkex, :routing_key => queue_name)
|
|
153
|
+
mock(@mkchan).queue('foo', :durable => true) { @mkqueue }
|
|
154
|
+
mock(@mkqueue).bind(@mkex, :routing_key => 'foo')
|
|
157
155
|
mock(@mkqueue).subscribe(:block => false, :manual_ack => true)
|
|
158
|
-
|
|
159
|
-
my_vars = queue_vars.merge(:connection => @external_connection)
|
|
160
|
-
@q = Sneakers::Queue.new(queue_name, my_vars)
|
|
161
156
|
end
|
|
162
157
|
|
|
163
158
|
it 'uses that object' do
|
|
164
|
-
|
|
165
|
-
|
|
159
|
+
q = Sneakers::Queue.new('foo',
|
|
160
|
+
queue_vars.merge(:connection => @external_connection))
|
|
161
|
+
q.subscribe(@mkworker)
|
|
162
|
+
_(q.instance_variable_get(:@bunny)).must_equal @external_connection
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
it 'uses that function' do
|
|
166
|
+
@external_connection.start
|
|
167
|
+
q = Sneakers::Queue.new('foo',
|
|
168
|
+
queue_vars.merge(:connection => ->() { @external_connection }))
|
|
169
|
+
q.subscribe(@mkworker)
|
|
170
|
+
_(q.instance_variable_get(:@bunny)).must_equal @external_connection
|
|
166
171
|
end
|
|
167
172
|
end
|
|
168
173
|
end
|
metadata
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: kicks
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 3.
|
|
4
|
+
version: 3.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Dotan Nahum
|
|
8
8
|
- Michael Klishin
|
|
9
|
-
autorequire:
|
|
10
9
|
bindir: bin
|
|
11
10
|
cert_chain: []
|
|
12
|
-
date:
|
|
11
|
+
date: 2025-01-26 00:00:00.000000000 Z
|
|
13
12
|
dependencies:
|
|
14
13
|
- !ruby/object:Gem::Dependency
|
|
15
14
|
name: serverengine
|
|
@@ -93,28 +92,28 @@ dependencies:
|
|
|
93
92
|
requirements:
|
|
94
93
|
- - ">="
|
|
95
94
|
- !ruby/object:Gem::Version
|
|
96
|
-
version: '7.
|
|
95
|
+
version: '7.2'
|
|
97
96
|
type: :development
|
|
98
97
|
prerelease: false
|
|
99
98
|
version_requirements: !ruby/object:Gem::Requirement
|
|
100
99
|
requirements:
|
|
101
100
|
- - ">="
|
|
102
101
|
- !ruby/object:Gem::Version
|
|
103
|
-
version: '7.
|
|
102
|
+
version: '7.2'
|
|
104
103
|
- !ruby/object:Gem::Dependency
|
|
105
104
|
name: activesupport
|
|
106
105
|
requirement: !ruby/object:Gem::Requirement
|
|
107
106
|
requirements:
|
|
108
107
|
- - ">="
|
|
109
108
|
- !ruby/object:Gem::Version
|
|
110
|
-
version: '7.
|
|
109
|
+
version: '7.2'
|
|
111
110
|
type: :development
|
|
112
111
|
prerelease: false
|
|
113
112
|
version_requirements: !ruby/object:Gem::Requirement
|
|
114
113
|
requirements:
|
|
115
114
|
- - ">="
|
|
116
115
|
- !ruby/object:Gem::Version
|
|
117
|
-
version: '7.
|
|
116
|
+
version: '7.2'
|
|
118
117
|
- !ruby/object:Gem::Dependency
|
|
119
118
|
name: rabbitmq_http_api_client
|
|
120
119
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -343,7 +342,6 @@ licenses:
|
|
|
343
342
|
- MIT
|
|
344
343
|
metadata:
|
|
345
344
|
source_code_uri: https://github.com/ruby-amqp/kicks
|
|
346
|
-
post_install_message:
|
|
347
345
|
rdoc_options: []
|
|
348
346
|
require_paths:
|
|
349
347
|
- lib
|
|
@@ -358,8 +356,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
358
356
|
- !ruby/object:Gem::Version
|
|
359
357
|
version: '0'
|
|
360
358
|
requirements: []
|
|
361
|
-
rubygems_version: 3.
|
|
362
|
-
signing_key:
|
|
359
|
+
rubygems_version: 3.6.2
|
|
363
360
|
specification_version: 4
|
|
364
361
|
summary: Fast background processing framework for Ruby and RabbitMQ
|
|
365
362
|
test_files:
|