kicks 3.0.0.pre → 3.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ff0690a8caadf3b1b4c80039e0893f8f2484f29fec0a19278f9d855ace73355a
4
- data.tar.gz: 4d69ee1e6a93f08df18cd2abbc8969bb2f7a854be45405a1be0c3c770c2bdd2f
3
+ metadata.gz: b553911947a5b50df9d2576610c02c448873a359bf8641116c3bdaeb10539fd4
4
+ data.tar.gz: 8fd78e33555ba42a001781c204ca22e9e875a22d96eb53374dcc1a3d0af2ac06
5
5
  SHA512:
6
- metadata.gz: e8991f96df285bfff54de0a9ce2bbcee0c8233fc81b8fc66d1ba617061650ea3badd5cc5270aaf2c95ec5103b85079e95e3095f05c7335b9681861cb44f90f0f
7
- data.tar.gz: 43d85d3b660bd36802487769b0c518e60998227b418d427c0c69e9ce3748fc2516d574e34e5014fab3d06141d54d707f15d895e6a5648c6558a374e786e4c276
6
+ metadata.gz: cf96bb1a274d3ad4da6f904c6395156541b750a78d20130226e3404f00f97853a71a0327db11b96193affe54a94217b909600ffb9c9e8527c3bcb5b88e51590b
7
+ data.tar.gz: 0244cdda5904875397992237239b67649c6c4ef2affb0962a040d8f06849549b816a371280ef870fb04e16db9c768b948c8b96196e75337c3303131b5c333122
@@ -0,0 +1,6 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: "github-actions"
4
+ directory: "/"
5
+ schedule:
6
+ interval: "weekly"
@@ -8,17 +8,15 @@ jobs:
8
8
  runs-on: ubuntu-latest
9
9
  strategy:
10
10
  matrix:
11
- ruby-version: [3.0, 3.1, 3.2]
11
+ ruby-version: [3.0, 3.1, 3.2, 3.3]
12
12
  steps:
13
- - uses: actions/checkout@v3
13
+ - uses: actions/checkout@v4
14
14
 
15
15
  - name: Install Ruby ${{ matrix.ruby-version }}
16
16
  uses: ruby/setup-ruby@v1
17
17
  with:
18
18
  ruby-version: ${{ matrix.ruby-version }}
19
-
20
- - name: Install dependencies
21
- run: bundle install
19
+ bundler-cache: true # 'bundle install', cache gems
22
20
 
23
21
  - name: Run tests
24
22
  run: bundle exec rake
data/ChangeLog.md CHANGED
@@ -1,10 +1,41 @@
1
1
  # Change Log
2
2
 
3
- ## Changes Between 2.12.0 and 2.13.0 (unreleased)
3
+ ## Changes Between 3.1.0 and 3.2.0 (in development)
4
+
5
+ No changes yet.
6
+
7
+
8
+ ## Changes Between 3.0.0 and 3.1.0 (Oct 20, 2024)
9
+
10
+ ### ActiveJob Adapter
11
+
12
+ Kicks now ships with an ActiveJob adapter for Ruby on Rails.
13
+
14
+ Contributed by dixpac.
15
+
16
+ GitHub issue: [#12](https://github.com/ruby-amqp/kicks/pull/12)
17
+
18
+ ### Make Queue Binding Optional
19
+
20
+ It is now possible to opt out of binding of the Kicks-declared exchange and queue.
21
+
22
+ Contributed by @texpert.
23
+
24
+ GitHub issue: [#13](https://github.com/ruby-amqp/kicks/pull/13)
25
+
26
+
27
+ ## Changes Between 2.12.0 and 3.0.0 (Oct 19, 2024)
28
+
29
+ ### New Project Name and Major Version
30
+
31
+ Kicks was originally developed by @jondot under the [name of Sneakers](https://github.com/jondot/sneakers).
32
+
33
+ After a group of users and a RabbitMQ core team member have taken over maintenance, it was renamed
34
+ to Kicks and the version was bumped to 3.0 to clearly indicate the split.
4
35
 
5
36
  ### Minimum Required Ruby Version
6
37
 
7
- Sneakers now requires Ruby 2.5 or later.
38
+ Kicks now requires Ruby 2.5 or later.
8
39
 
9
40
  ### Content Encoding Support
10
41
 
@@ -14,6 +45,7 @@ Contributed by @ansoncat.
14
45
 
15
46
  GitHub issue: [#449](https://github.com/jondot/sneakers/pull/449)
16
47
 
48
+
17
49
  ## Changes Between 2.10.0 and 2.11.0
18
50
 
19
51
  This releases includes bug fixes, support for more queue-binding options, better
data/Gemfile CHANGED
@@ -3,6 +3,6 @@ source 'https://rubygems.org'
3
3
  gem 'ruby-prof', platforms: [:ruby_22, :ruby_23, :ruby_24]
4
4
 
5
5
  gem 'rake', '>= 12.3', '< 14.0'
6
- gem 'metric_fu', github: 'metricfu/metric_fu', branch: 'main'
6
+ gem 'metric_fu', git: 'https://github.com/metricfu/metric_fu', branch: 'main'
7
7
 
8
8
  gemspec
data/LICENSE.txt CHANGED
@@ -1,4 +1,5 @@
1
- Copyright (c) 2013-2016 Dotan Nahum
1
+ Copyright (c) 2013-2023 Dotan Nahum
2
+ Copyright (c) 2023-2024 Kicks Contributors
2
3
 
3
4
  MIT License
4
5
 
data/README.md CHANGED
@@ -25,20 +25,19 @@ By virtue of its Sneakers lineage, Kicks is a mature project that has been aroun
25
25
  Add this line to your application's Gemfile:
26
26
 
27
27
  ```ruby
28
- # Important: this name will change once Kicks 3.0.0 (the initial release) is published
29
- gem 'sneakers'
28
+ gem 'kicks'
30
29
  ```
31
30
 
32
31
  And then execute:
33
32
 
34
33
  ```shell-session
35
- $ bundle
34
+ bundle
36
35
  ```
37
36
 
38
37
  Or install it yourself as:
39
38
 
40
39
  ```shell-session
41
- $ gem install sneakers
40
+ gem install kicks
42
41
  ```
43
42
 
44
43
  ## Documentation
@@ -57,7 +56,7 @@ Set up a Gemfile
57
56
 
58
57
  ```ruby
59
58
  source 'https://rubygems.org'
60
- gem 'sneakers'
59
+ gem 'kicks'
61
60
  gem 'json'
62
61
  gem 'redis'
63
62
  ```
@@ -68,6 +67,7 @@ then create a worker named as `Processor`.
68
67
  > touch boot.rb
69
68
 
70
69
  ```ruby
70
+ # Note: the files still use "sneakers" for the name
71
71
  require 'sneakers'
72
72
  require 'redis'
73
73
  require 'json'
@@ -191,7 +191,9 @@ environment needed locally on your development box.
191
191
 
192
192
  # Compatibility
193
193
 
194
- * Sneakers main branch: Ruby 3.0+
194
+ * Kicks main branch: Ruby 3.0+
195
+ * Kicks 3.1.x branch: Ruby 3.0+
196
+ * Kicks 3.0.x: Ruby 2.5+
195
197
  * Sneakers 2.7.x and later (using Bunny 2.9): Ruby 2.2.x
196
198
  * Sneakers 1.1.x and later (using Bunny 2.x): Ruby 2.x
197
199
  * Sneakers 1.x.x and earlier: Ruby 1.9.x, 2.x
@@ -204,6 +206,11 @@ Fork, implement, add tests, pull request, get my everlasting thanks and a respec
204
206
 
205
207
  To all Sneakers [Contributors](https://github.com/jondot/sneakers/graphs/contributors) - you make this happen, thanks!
206
208
 
207
- # Copyright
209
+ ## License
208
210
 
209
- Copyright (c) 2015-2018 [Dotan Nahum](http://gplus.to/dotan) [@jondot](http://twitter.com/jondot). See [LICENSE](LICENSE.txt) for further details.
211
+ See [LICENSE](LICENSE.txt) for further details.
212
+
213
+ ## Copyright
214
+
215
+ Copyright (c) 2023-2024 Kicks contributors
216
+ Copyright (c) 2015-2023 [Dotan Nahum](http://gplus.to/dotan) [@jondot](http://twitter.com/jondot).
data/kicks.gemspec CHANGED
@@ -13,6 +13,7 @@ Gem::Specification.new do |gem|
13
13
  gem.description = %q( Fast background processing framework for Ruby and RabbitMQ )
14
14
  gem.summary = %q( Fast background processing framework for Ruby and RabbitMQ )
15
15
  gem.homepage = 'https://github.com/ruby-amqp/kicks'
16
+ gem.metadata = { "source_code_uri" => "https://github.com/ruby-amqp/kicks" }
16
17
  gem.license = 'MIT'
17
18
  gem.required_ruby_version = Gem::Requirement.new(">= 2.5")
18
19
 
@@ -30,6 +31,8 @@ Gem::Specification.new do |gem|
30
31
  gem.add_dependency 'rake', '>= 12.3', '< 14.0'
31
32
 
32
33
  # for integration environment (see .travis.yml and integration_spec)
34
+ gem.add_development_dependency 'activejob', '>= 7.1'
35
+ gem.add_development_dependency 'activesupport', '>= 7.1'
33
36
  gem.add_development_dependency 'rabbitmq_http_api_client'
34
37
  gem.add_development_dependency 'redis'
35
38
 
@@ -0,0 +1,39 @@
1
+ module ActiveJob
2
+ module QueueAdapters
3
+ # Explicitly remove the implementation existing in older rails'.
4
+ remove_const(:SneakersAdapter) if defined?(:SneakersAdapter)
5
+
6
+ # = Sneakers adapter for Active Job
7
+ #
8
+ # To use Sneakers set the queue_adapter config to +:sneakers+.
9
+ #
10
+ # Rails.application.config.active_job.queue_adapter = :sneakers
11
+ class SneakersAdapter < ::ActiveJob::QueueAdapters::AbstractAdapter
12
+ def initialize
13
+ @monitor = Monitor.new
14
+ end
15
+
16
+ def enqueue(job)
17
+ @monitor.synchronize do
18
+ JobWrapper.from_queue job.queue_name
19
+ JobWrapper.enqueue ActiveSupport::JSON.encode(job.serialize)
20
+ end
21
+ end
22
+
23
+ def enqueue_at(job, timestamp)
24
+ raise NotImplementedError, 'This queueing backend does not support scheduling jobs.'
25
+ end
26
+
27
+ class JobWrapper
28
+ include Sneakers::Worker
29
+ from_queue 'default'
30
+
31
+ def work(msg)
32
+ job_data = ActiveSupport::JSON.decode(msg)
33
+ Base.execute job_data
34
+ ack!
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -39,7 +39,8 @@ class Sneakers::Queue
39
39
 
40
40
  queue = @channel.queue(@name, **@opts[:queue_options])
41
41
 
42
- if exchange_name.length > 0
42
+ should_bind = @opts.fetch(:bind, true)
43
+ if should_bind && exchange_name.length > 0
43
44
  routing_keys.each do |key|
44
45
  if @opts[:bind_arguments]
45
46
  queue.bind(@exchange, routing_key: key, arguments: @opts[:bind_arguments])
@@ -1,3 +1,3 @@
1
1
  module Sneakers
2
- VERSION = "3.0.0.pre"
2
+ VERSION = "3.1.0"
3
3
  end
data/lib/sneakers.rb CHANGED
@@ -22,6 +22,8 @@ require 'sneakers/content_encoding'
22
22
  require 'sneakers/middleware/config'
23
23
  require 'sneakers/worker'
24
24
  require 'sneakers/publisher'
25
+ require 'active_job/queue_adapters/sneakers_adapter' if defined?(ActiveJob)
26
+
25
27
 
26
28
  module Sneakers
27
29
  extend self
@@ -0,0 +1,13 @@
1
+ require 'sneakers'
2
+ require 'redis'
3
+
4
+ redis_addr = compose_or_localhost('redis')
5
+ puts "REDIS is at #{redis_addr}"
6
+ $redis = Redis.new(host: redis_addr)
7
+
8
+
9
+ class TestJob < ActiveJob::Base
10
+ def perform(message)
11
+ $redis.incr('rails_active_job')
12
+ end
13
+ end
@@ -0,0 +1,66 @@
1
+ require 'spec_helper'
2
+ require 'sneakers'
3
+ require 'sneakers/runner'
4
+ require 'rabbitmq/http/client'
5
+ require 'active_job'
6
+ require 'active_job/queue_adapters/sneakers_adapter'
7
+ require 'fixtures/test_job'
8
+
9
+ describe 'ActiveJob integration' do
10
+ before :each do
11
+ skip unless ENV['INTEGRATION']
12
+ prepare
13
+ end
14
+
15
+ def integration_log(msg)
16
+ puts msg if ENV['INTEGRATION_LOG']
17
+ end
18
+
19
+ def rmq_addr
20
+ @rmq_addr ||= compose_or_localhost('rabbitmq')
21
+ end
22
+
23
+ def prepare
24
+ ActiveJob::Base.queue_adapter = :sneakers
25
+
26
+ Sneakers.clear!
27
+ Sneakers.configure(amqp: "amqp://guest:guest@#{rmq_addr}:5672")
28
+ Sneakers.logger.level = Logger::ERROR
29
+
30
+ redis_addr = compose_or_localhost('redis')
31
+ @redis = Redis.new(host: redis_addr)
32
+ @redis.del('rails_active_job')
33
+ end
34
+
35
+ def wait_for_jobs_to_finish
36
+ sleep 5
37
+ end
38
+
39
+ def start_active_job_workers
40
+ integration_log 'starting ActiveJob workers.'
41
+ runner = Sneakers::Runner.new([ActiveJob::QueueAdapters::SneakersAdapter::JobWrapper], {})
42
+
43
+ pid = fork { runner.run }
44
+
45
+ integration_log 'waiting for workers to stabilize (5s).'
46
+ sleep 5
47
+
48
+ yield if block_given?
49
+ ensure
50
+ Process.kill('TERM', pid) rescue nil
51
+ end
52
+
53
+ it 'runs jobs enqueued on a listening queue' do
54
+ start_active_job_workers do
55
+ TestJob.perform_later('Hello Rails!')
56
+ wait_for_jobs_to_finish
57
+ assert_equal @redis.get('rails_active_job').to_i, 1
58
+ end
59
+ end
60
+
61
+ it 'scheduling jobs are not supported' do
62
+ assert_raises NotImplementedError, 'This queueing backend does not support scheduling jobs.' do
63
+ TestJob.set(wait: 1.second).perform_later('Say Hello to Rails later!')
64
+ end
65
+ end
66
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kicks
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0.pre
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dotan Nahum
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2024-06-27 00:00:00.000000000 Z
12
+ date: 2024-10-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: serverengine
@@ -87,6 +87,34 @@ dependencies:
87
87
  - - "<"
88
88
  - !ruby/object:Gem::Version
89
89
  version: '14.0'
90
+ - !ruby/object:Gem::Dependency
91
+ name: activejob
92
+ requirement: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '7.1'
97
+ type: :development
98
+ prerelease: false
99
+ version_requirements: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '7.1'
104
+ - !ruby/object:Gem::Dependency
105
+ name: activesupport
106
+ requirement: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '7.1'
111
+ type: :development
112
+ prerelease: false
113
+ version_requirements: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '7.1'
90
118
  - !ruby/object:Gem::Dependency
91
119
  name: rabbitmq_http_api_client
92
120
  requirement: !ruby/object:Gem::Requirement
@@ -235,6 +263,7 @@ executables:
235
263
  extensions: []
236
264
  extra_rdoc_files: []
237
265
  files:
266
+ - ".github/dependabot.yml"
238
267
  - ".github/workflows/ci.yml"
239
268
  - ".gitignore"
240
269
  - ChangeLog.md
@@ -257,6 +286,7 @@ files:
257
286
  - examples/title_scraper.rb
258
287
  - examples/workflow_worker.rb
259
288
  - kicks.gemspec
289
+ - lib/active_job/queue_adapters/sneakers_adapter.rb
260
290
  - lib/sneakers.rb
261
291
  - lib/sneakers/cli.rb
262
292
  - lib/sneakers/concerns/logging.rb
@@ -288,7 +318,9 @@ files:
288
318
  - scripts/local_worker
289
319
  - spec/fixtures/integration_worker.rb
290
320
  - spec/fixtures/require_worker.rb
321
+ - spec/fixtures/test_job.rb
291
322
  - spec/gzip_helper.rb
323
+ - spec/sneakers/active_job_integration_spec.rb
292
324
  - spec/sneakers/cli_spec.rb
293
325
  - spec/sneakers/concerns/logging_spec.rb
294
326
  - spec/sneakers/concerns/metrics_spec.rb
@@ -309,7 +341,8 @@ files:
309
341
  homepage: https://github.com/ruby-amqp/kicks
310
342
  licenses:
311
343
  - MIT
312
- metadata: {}
344
+ metadata:
345
+ source_code_uri: https://github.com/ruby-amqp/kicks
313
346
  post_install_message:
314
347
  rdoc_options: []
315
348
  require_paths:
@@ -325,14 +358,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
325
358
  - !ruby/object:Gem::Version
326
359
  version: '0'
327
360
  requirements: []
328
- rubygems_version: 3.5.11
361
+ rubygems_version: 3.5.22
329
362
  signing_key:
330
363
  specification_version: 4
331
364
  summary: Fast background processing framework for Ruby and RabbitMQ
332
365
  test_files:
333
366
  - spec/fixtures/integration_worker.rb
334
367
  - spec/fixtures/require_worker.rb
368
+ - spec/fixtures/test_job.rb
335
369
  - spec/gzip_helper.rb
370
+ - spec/sneakers/active_job_integration_spec.rb
336
371
  - spec/sneakers/cli_spec.rb
337
372
  - spec/sneakers/concerns/logging_spec.rb
338
373
  - spec/sneakers/concerns/metrics_spec.rb