resque-unique_in_queue 2.0.0 → 2.0.2

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.
data/README.md CHANGED
@@ -1,37 +1,145 @@
1
- # Resque::UniqueInQueue
1
+ <a href="https://github.com/resque"><img alt="resque Logo by GitHub" src="https://github.com/resque.png?size=192" width="14%" align="right"/></a>
2
2
 
3
- | Project | Resque::UniqueInQueue |
4
- |------------------------ | ----------------------- |
5
- | gem name | [resque-unique_in_queue](https://rubygems.org/gems/resque-unique_in_queue) |
6
- | license | [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) |
7
- | download rank | [![Downloads Today](https://img.shields.io/gem/rd/resque-unique_in_queue.svg)](https://github.com/pboling/resque-unique_in_queue) |
8
- | version | [![Version](https://img.shields.io/gem/v/resque-unique_in_queue.svg)](https://rubygems.org/gems/resque-unique_in_queue) |
9
- | dependencies | [![Depfu](https://badges.depfu.com/badges/25c6e1e4c671926e9adea898f2df9a47/count.svg)](https://depfu.com/github/pboling/resque-unique_in_queue?project_id=2729) |
10
- | continuous integration | [![Build Status](https://travis-ci.org/pboling/resque-unique_in_queue.svg?branch=master)](https://travis-ci.org/pboling/resque-unique_in_queue) |
11
- | test coverage | [![Test Coverage](https://api.codeclimate.com/v1/badges/7520df3968eb146c8894/test_coverage)](https://codeclimate.com/github/pboling/resque-unique_in_queue/test_coverage) |
12
- | maintainability | [![Maintainability](https://api.codeclimate.com/v1/badges/7520df3968eb146c8894/maintainability)](https://codeclimate.com/github/pboling/resque-unique_in_queue/maintainability) |
13
- | code triage | [![Open Source Helpers](https://www.codetriage.com/pboling/resque-unique_in_queue/badges/users.svg)](https://www.codetriage.com/pboling/resque-unique_in_queue) |
14
- | homepage | [on Github.com][homepage], [on Railsbling.com][blogpage] |
15
- | documentation | [on RDoc.info][documentation] |
16
- | Spread ~♡ⓛⓞⓥⓔ♡~ | [🌍 🌎 🌏](https://about.me/peter.boling), [🍚](https://www.crowdrise.com/helprefugeeswithhopefortomorrowliberia/fundraiser/peterboling), [➕](https://plus.google.com/+PeterBoling/posts), [👼](https://angel.co/peter-boling), [🐛](https://www.topcoder.com/members/pboling/), [:shipit:](http://coderwall.com/pboling), [![Tweet Peter](https://img.shields.io/twitter/follow/galtzo.svg?style=social&label=Follow)](http://twitter.com/galtzo) |
3
+ # 💎 Resque::UniqueInQueue
17
4
 
18
- Resque::UniqueInQueue is a resque plugin to add unique jobs to resque.
5
+ [![Version][👽versioni]][👽version] [![Ruby Users Forum][✉️ruby-forum-top-img]][✉️ruby-forum] [![GitHub tag (latest SemVer)][⛳️tag-img]][⛳️tag] [![License: MIT][📄license-img]][📄license] [![Total downloads][👽dl-ranki]][👽dl-rank] [![CodeCov Test Coverage][🏀codecovi]][🏀codecov] [![Coveralls Test Coverage][🏀coveralls-img]][🏀coveralls] [![QLTY Test Coverage][🏀qlty-covi]][🏀qlty-cov] [![QLTY Maintainability][🏀qlty-mnti]][🏀qlty-mnt] [![CI Heads][🚎3-hd-wfi]][🚎3-hd-wf] [![CI Runtime Dependencies @ HEAD][🚎12-crh-wfi]][🚎12-crh-wf] [![CI Current][🚎11-c-wfi]][🚎11-c-wf] [![CI Truffle Ruby][🚎9-t-wfi]][🚎9-t-wf] [![CI JRuby][🚎10-j-wfi]][🚎10-j-wf] [![Deps Locked][🚎13-🔒️-wfi]][🚎13-🔒️-wf] [![Deps Unlocked][🚎14-🔓️-wfi]][🚎14-🔓️-wf] [![CI Test Coverage][🚎2-cov-wfi]][🚎2-cov-wf] [![CI Style][🚎5-st-wfi]][🚎5-st-wf] [![Apache SkyWalking Eyes License Compatibility Check][🚎15-🪪-wfi]][🚎15-🪪-wf]
19
6
 
20
- It is a re-write of [resque_solo](https://github.com/neighborland/resque_solo), which is a fork of [resque-loner](https://github.com/jayniz/resque-loner).
7
+ `if ci_badges.map(&:color).detect { it != "green"}` ☝️ [let me know on Discord][✉️discord-invite] or [RubyForum][✉️ruby-forum], as I may have missed the notification.
21
8
 
22
- It requires resque 1.25 and works with ruby 2.0 and later.
9
+ ---
23
10
 
24
- It removes the dependency on `Resque::Helpers`, which is deprecated for resque 2.0.
11
+ `if ci_badges.map(&:color).all? { it == "green"}` 👇️ send money so I can do more of this. FLOSS maintenance is now my full-time job.
25
12
 
26
- ## Install
13
+ [![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate at ko-fi.com][🖇kofi-img]][🖇kofi]
27
14
 
28
- Add the gem to your Gemfile:
15
+ <details markdown="1">
16
+ <summary>👣 How will this project approach the September 2025 hostile takeover of RubyGems? 🚑️</summary>
17
+
18
+ I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-takeover-of-rubygems-my-thoughts-5hlo).
19
+
20
+ </details>
21
+
22
+ ## 🌻 Synopsis <a href="https://discord.gg/3qme4XHNKN"><img alt="Galtzo FLOSS Logo by Aboling0, CC BY-SA 4.0" src="https://logos.galtzo.com/assets/images/galtzo-floss/avatar-128px.svg" width="8%" align="right"/></a> <a href="https://ruby-toolbox.com"><img alt="ruby-lang Logo, Yukihiro Matsumoto, Ruby Visual Identity Team, CC BY-SA 2.5" src="https://logos.galtzo.com/assets/images/ruby-lang/avatar-128px.svg" width="8%" align="right"/></a>
23
+
24
+ `resque-unique_in_queue` prevents duplicate Resque jobs from being enqueued in the same queue. A job including `Resque::Plugins::UniqueInQueue` is identified by its class and serialized arguments; matching enqueue attempts are ignored until its uniqueness key is released or expires.
25
+
26
+ This is enqueue-time uniqueness. It does not prevent two workers from executing duplicate work that was already present in Redis; use `resque-unique_at_runtime` for that guarantee.
27
+
28
+ ## 💡 Info you can shake a stick at
29
+
30
+ | Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
31
+ |-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
32
+ | Works with JRuby | [![JRuby 9.2 Compat][💎jruby-9.2i]][🚎jruby-9.2-wf] [![JRuby 9.3 Compat][💎jruby-9.3i]][🚎jruby-9.3-wf] <br/> [![JRuby 9.4 Compat][💎jruby-9.4i]][🚎jruby-9.4-wf] [![JRuby 10.0 Compat][💎jruby-10.0i]][🚎jruby-10.0-wf] [![JRuby current Compat][💎jruby-c-i]][🚎10-j-wf] [![JRuby HEAD Compat][💎jruby-headi]][🚎3-hd-wf]|
33
+ | Works with Truffle Ruby | [![Truffle Ruby 22.3 Compat][💎truby-22.3i]][🚎truby-22.3-wf] [![Truffle Ruby 23.0 Compat][💎truby-23.0i]][🚎truby-23.0-wf] [![Truffle Ruby 23.1 Compat][💎truby-23.1i]][🚎truby-23.1-wf] <br/> [![Truffle Ruby 24.2 Compat][💎truby-24.2i]][🚎truby-24.2-wf] [![Truffle Ruby 25.0 Compat][💎truby-25.0i]][🚎truby-25.0-wf] [![Truffle Ruby 33.0 Compat][💎truby-33.0i]][🚎truby-33.0-wf] [![Truffle Ruby current Compat][💎truby-c-i]][🚎9-t-wf] [![Truffle Ruby HEAD Compat][💎truby-headi]][🚎3-hd-wf]|
34
+ | Works with MRI Ruby 4 | [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf] [![Ruby HEAD Compat][💎ruby-headi]][🚎3-hd-wf]|
35
+ | Works with MRI Ruby 3 | [![Ruby 3.0 Compat][💎ruby-3.0i]][🚎ruby-3.0-wf] [![Ruby 3.1 Compat][💎ruby-3.1i]][🚎ruby-3.1-wf] [![Ruby 3.2 Compat][💎ruby-3.2i]][🚎ruby-3.2-wf] [![Ruby 3.3 Compat][💎ruby-3.3i]][🚎ruby-3.3-wf] [![Ruby 3.4 Compat][💎ruby-3.4i]][🚎ruby-3.4-wf]|
36
+ | Works with MRI Ruby 2 | ![Ruby 2.3 Compat][💎ruby-2.3i] <br/> [![Ruby 2.4 Compat][💎ruby-2.4i]][🚎ruby-2.4-wf] [![Ruby 2.5 Compat][💎ruby-2.5i]][🚎ruby-2.5-wf] [![Ruby 2.6 Compat][💎ruby-2.6i]][🚎ruby-2.6-wf] [![Ruby 2.7 Compat][💎ruby-2.7i]][🚎ruby-2.7-wf]|
37
+ | Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Get help from RubyForum][✉️ruby-forum-img]][✉️ruby-forum] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork] [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor] |
38
+ | Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on GitHub.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
39
+ | Documentation | [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![YARD on Galtzo.com][📜docs-head-rd-img]][🚎yard-head] [![Maintainer Blog][🚂maint-blog-img]][🚂maint-blog] [![GitLab Wiki][📜gl-wiki-img]][📜gl-wiki] [![GitHub Wiki][📜gh-wiki-img]][📜gh-wiki] |
40
+ | Compliance | [![License: MIT][📄license-img]][📄license] [![Apache license compatibility: Category A][📄license-compat-img]][📄license-compat] [![📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct] [![SemVer 2.0.0][📌semver-img]][📌semver] |
41
+ | Style | [![Enforced Code Style Linter][💎rlts-img]][💎rlts] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog] [![Gitmoji Commits][📌gitmoji-img]][📌gitmoji] [![Compatibility appraised by: appraisal2][💎appraisal2-img]][💎appraisal2] |
42
+ | Maintainer 🎖️ | [![Follow Me on LinkedIn][💖🖇linkedin-img]][💖🖇linkedin] [![Follow Me on Ruby.Social][💖🐘ruby-mast-img]][💖🐘ruby-mast] [![Follow Me on Bluesky][💖🦋bluesky-img]][💖🦋bluesky] [![Contact Maintainer][🚂maint-contact-img]][🚂maint-contact] [![My technical writing][💖💁🏼‍♂️devto-img]][💖💁🏼‍♂️devto] |
43
+ | `...` 💖 | [![Find Me on WellFound:][💖✌️wellfound-img]][💖✌️wellfound] [![Find Me on CrunchBase][💖💲crunchbase-img]][💖💲crunchbase] [![My LinkTree][💖🌳linktree-img]][💖🌳linktree] [![More About Me][💖💁🏼‍♂️aboutme-img]][💖💁🏼‍♂️aboutme] [🧊][💖🧊berg] [🐙][💖🐙hub] [🛖][💖🛖hut] [🧪][💖🧪lab] |
44
+
45
+ ### Compatibility
46
+
47
+ Compatible with MRI Ruby 2.3.0+, JRuby, and TruffleRuby.
48
+ CI workflows and Appraisals are generated for MRI Ruby 2.4+.
49
+ This test floor is configured by `ruby.test_minimum` in `.kettle-jem.yml` and
50
+ may be higher than the gem's runtime compatibility floor when legacy Rubies are
51
+ not practical for the current toolchain.
52
+
53
+ <a href="https://github.com/kettle-dev"><img alt="kettle-dev Logo by Aboling0, CC BY-SA 4.0" src="https://logos.galtzo.com/assets/images/kettle-dev/avatar-128px.svg" width="14%" align="right"/></a>
54
+
55
+ The _amazing_ test matrix is powered by the kettle-dev stack.
56
+
57
+ <details markdown="1">
58
+ <summary>How kettle-dev manages complexity in tests</summary>
59
+
60
+ | Gem | Source | Role | Total downloads |
61
+ |-----|--------|------|---------------------|
62
+ | [appraisal2](https://clickgems.clickhouse.com/dashboard/appraisal2) | [GitHub](https://github.com/appraisal-rb/appraisal2) | multi-dependency Appraisal matrix generation | [![Total downloads for appraisal2](https://img.shields.io/gem/dt/appraisal2.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/appraisal2) |
63
+ | [appraisal2-rubocop](https://clickgems.clickhouse.com/dashboard/appraisal2-rubocop) | [GitHub](https://github.com/appraisal-rb/appraisal2-rubocop) | RuboCop Appraisal generator integration | [![Total downloads for appraisal2-rubocop](https://img.shields.io/gem/dt/appraisal2-rubocop.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/appraisal2-rubocop) |
64
+ | [kettle-dev](https://clickgems.clickhouse.com/dashboard/kettle-dev) | [GitHub](https://github.com/kettle-dev/kettle-dev) | development, release, and CI workflow tooling | [![Total downloads for kettle-dev](https://img.shields.io/gem/dt/kettle-dev.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/kettle-dev) |
65
+ | [kettle-jem](https://clickgems.clickhouse.com/dashboard/kettle-jem) | [GitHub](https://github.com/kettle-dev/kettle-jem) | Appraisals & CI workflow templates | [![Total downloads for kettle-jem](https://img.shields.io/gem/dt/kettle-jem.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/kettle-jem) |
66
+ | [kettle-soup-cover](https://clickgems.clickhouse.com/dashboard/kettle-soup-cover) | [GitHub](https://github.com/kettle-dev/kettle-soup-cover) | SimpleCov coverage policy and reporting | [![Total downloads for kettle-soup-cover](https://img.shields.io/gem/dt/kettle-soup-cover.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/kettle-soup-cover) |
67
+ | [kettle-test](https://clickgems.clickhouse.com/dashboard/kettle-test) | [GitHub](https://github.com/kettle-dev/kettle-test) | standard test runner and coverage harness | [![Total downloads for kettle-test](https://img.shields.io/gem/dt/kettle-test.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/kettle-test) |
68
+ | [rubocop-lts](https://clickgems.clickhouse.com/dashboard/rubocop-lts) | [GitHub](https://github.com/rubocop-lts/rubocop-lts) | Ruby-version-aware linting | [![Total downloads for rubocop-lts](https://img.shields.io/gem/dt/rubocop-lts.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/rubocop-lts) |
69
+ | [turbo_tests2](https://clickgems.clickhouse.com/dashboard/turbo_tests2) | [GitHub](https://github.com/galtzo-floss/turbo_tests2) | parallel test execution | [![Total downloads for turbo_tests2](https://img.shields.io/gem/dt/turbo_tests2.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/turbo_tests2) |
70
+
71
+ </details>
72
+
73
+ ### Federated DVCS
74
+
75
+ <details markdown="1">
76
+ <summary>Find this repo on federated forges (Coming soon!)</summary>
77
+
78
+ | Federated [DVCS][💎d-in-dvcs] Repository | Status | Issues | PRs | Wiki | CI |
79
+ |-------------------------------------------------|-------------------------------------------|-------------------|------------------|-----------------|----------------|
80
+ | 🧪 [resque/resque-unique_in_queue on GitLab][📜src-gl] | The Truth | [💚][🤝gl-issues] | [💚][🤝gl-pulls] | [💚][📜gl-wiki] | 🐭 Tiny Matrix |
81
+ | 🧊 [resque/resque-unique_in_queue on CodeBerg][📜src-cb] | An Ethical Mirror ([Donate][🤝cb-donate]) | [💚][🤝cb-issues] | [💚][🤝cb-pulls] | ➖ | ⭕️ No Matrix |
82
+ | 🐙 [resque/resque-unique_in_queue on GitHub][📜src-gh] | Another Mirror | [💚][🤝gh-issues] | [💚][🤝gh-pulls] | [💚][📜gh-wiki] | 💯 Full Matrix |
83
+
84
+ </details>
85
+
86
+ ### Enterprise Support
87
+
88
+ [![Tidelift](https://tidelift.com/badges/package/rubygems/resque-unique_in_queue)](https://tidelift.com/subscription/pkg/rubygems-resque-unique_in_queue?utm_source=rubygems-resque-unique_in_queue&utm_medium=referral&utm_campaign=readme)
89
+
90
+ Available as part of the Tidelift Subscription.
91
+
92
+ <details markdown="1">
93
+ <summary>Need enterprise-level guarantees?</summary>
94
+
95
+ The maintainers of this and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source packages you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact packages you use.
96
+
97
+ [![Get help from me on Tidelift][🏙️entsup-tidelift-img]][🏙️entsup-tidelift]
98
+
99
+ - 💡Subscribe for support guarantees covering _all_ your FLOSS dependencies
100
+ - 💡Tidelift is part of [Sonar][🏙️entsup-tidelift-sonar]
101
+ - 💡Tidelift pays maintainers to maintain the software you depend on!<br/>📊`@`Pointy Haired Boss: An [enterprise support][🏙️entsup-tidelift] subscription is "[never gonna let you down][🧮kloc]", and *supports* open source maintainers
102
+
103
+ Alternatively:
104
+
105
+ - [![Ruby Users Forum][✉️ruby-forum-img]][✉️ruby-forum]
106
+ - [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
107
+ - [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork]
108
+ - [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor]
109
+
110
+ </details>
111
+
112
+ ## ✨ Installation
113
+
114
+ Install the gem and add to the application's Gemfile by executing:
115
+
116
+ ```console
117
+ bundle add resque-unique_in_queue
118
+ ```
119
+
120
+ If bundler is not being used to manage dependencies, install the gem by executing:
121
+
122
+ ```console
123
+ gem install resque-unique_in_queue
124
+ ```
125
+
126
+ ## ⚙️ Configuration
127
+
128
+ Configure application defaults before jobs are enqueued:
29
129
 
30
130
  ```ruby
31
- gem 'resque-unique_in_queue'
131
+ Resque::UniqueInQueue.configure do |config|
132
+ config.lock_after_execution_period = 0
133
+ config.ttl = -1
134
+ config.unique_in_queue_key_base = "r-uiq"
135
+ end
32
136
  ```
33
137
 
34
- ## Usage
138
+ `lock_after_execution_period` keeps the key after a job leaves the queue; `0` removes it immediately. `ttl` is the Redis key expiry in seconds; `-1` leaves the key without an expiry. Jobs may override the first two settings with `@lock_after_execution_period` and `@ttl`.
139
+
140
+ Keep `unique_in_queue_key_base` global for the application. Per-job key bases make cleanup and cross-queue inspection unreliable. Set `RESQUE_DEBUG=true` (or a value containing `queue`) to enable plugin debug logging.
141
+
142
+ ## 🔧 Basic Usage
35
143
 
36
144
  `resque-unique_in_queue` utilizes 3 class instance variables that can be set
37
145
  in your Jobs, in addition to the standard `@queue`. Here they are, with their
@@ -40,7 +148,7 @@ default values:
40
148
  ```ruby
41
149
  @lock_after_execution_period = 0
42
150
  @ttl = -1
43
- @unique_in_queue_key_base = 'r-uiq'.freeze
151
+ @unique_in_queue_key_base = "r-uiq".freeze
44
152
  ```
45
153
 
46
154
  The last one, in normal circumstances, shouldn't be set as different per class,
@@ -49,13 +157,13 @@ or uniqueness cleanup becomes more difficult.
49
157
  It should be set only once, globally:
50
158
 
51
159
  ```ruby
52
- Resque::UniqueInQueue.configuration.unique_in_queue_key_base = 'my-custom'
160
+ Resque::UniqueInQueue.configuration.unique_in_queue_key_base = "my-custom"
53
161
  ```
54
162
 
55
-
56
163
  ```ruby
57
164
  class UpdateCat
58
165
  include Resque::Plugins::UniqueInQueue
166
+
59
167
  @queue = :cats
60
168
 
61
169
  def self.perform(cat_id)
@@ -97,6 +205,7 @@ job more than once per minute, set `lock_after_execution_period = 60`.
97
205
  ```ruby
98
206
  class UpdateCat
99
207
  include Resque::Plugins::UniqueInQueue
208
+
100
209
  @queue = :cats
101
210
  @lock_after_execution_period = 20
102
211
 
@@ -107,7 +216,7 @@ end
107
216
  ```
108
217
 
109
218
  #### Oops, I have stale Queue Time uniqueness keys...
110
-
219
+
111
220
  Preventing jobs with matching signatures from being queued, and they never get
112
221
  dequeued because there is no actual corresponding job to dequeue.
113
222
 
@@ -118,7 +227,7 @@ Option: Rampage
118
227
  ```ruby
119
228
  # Delete *all* queued jobs in the queue, and
120
229
  # delete *all* unqueness keys for the queue.
121
- Redis.remove_queue('queue_name')
230
+ Redis.remove_queue("queue_name")
122
231
  ```
123
232
 
124
233
  Option: Butterfly
@@ -126,53 +235,398 @@ Option: Butterfly
126
235
  ```ruby
127
236
  # Delete *no* queued jobs at all, and
128
237
  # delete *all* unqueness keys for the queue (might then allow duplicates).
129
- Resque::UniqueInQueue::Queue.cleanup('queue_name')
238
+ Resque::UniqueInQueue::Queue.cleanup("queue_name")
130
239
  ```
131
240
 
132
- ## Contributing
241
+ ## 🦷 FLOSS Funding
133
242
 
134
- Bug reports and pull requests are welcome on GitHub at https://github.com/pboling/resque-unique_in_queue. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
243
+ While resque tools are free software and will always be, the project would benefit immensely from some funding.
244
+ Raising a monthly budget of... "dollars" would make the project more sustainable.
135
245
 
136
- 1. Fork it
137
- 2. Create your feature branch (`git checkout -b my-new-feature`)
138
- 3. Commit your changes (`git commit -am 'Added some feature'`)
139
- 4. Push to the branch (`git push origin my-new-feature`)
140
- 5. Create new Pull Request
246
+ We welcome both individual and corporate sponsors! We also offer a
247
+ wide array of funding channels to account for your preferences.
248
+ Currently, [Open Collective][🖇osc] is our preferred funding platform.
141
249
 
142
- ## Code of Conduct
250
+ **If you're working in a company that's making significant use of resque tools we'd
251
+ appreciate it if you suggest to your company to become a resque sponsor.**
143
252
 
144
- Everyone interacting in the Resque::Plugins::UniqueInQueue project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/pboling/resque-unique_in_queue/blob/master/CODE_OF_CONDUCT.md).
253
+ You can support the development of resque tools via
254
+ [GitHub Sponsors][🖇sponsor],
255
+ [Liberapay][⛳liberapay],
256
+ [PayPal][🖇paypal],
257
+ [Open Collective][🖇osc]
258
+ and [Tidelift][🏙️entsup-tidelift].
145
259
 
146
- ## Versioning
260
+ | 📍 NOTE |
261
+ |----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
262
+ | If doing a sponsorship in the form of donation is problematic for your company <br/> from an accounting standpoint, we'd recommend the use of Tidelift, <br/> where you can get a support-like subscription instead. |
147
263
 
148
- This library aims to adhere to [Semantic Versioning 2.0.0][semver].
149
- Violations of this scheme should be reported as bugs. Specifically,
150
- if a minor or patch version is released that breaks backward
151
- compatibility, a new version should be immediately released that
152
- restores compatibility. Breaking changes to the public API will
153
- only be introduced with new major versions.
264
+ ### Open Collective for Individuals
154
265
 
155
- As a result of this policy, you can (and should) specify a
156
- dependency on this gem using the [Pessimistic Version Constraint][pvc] with two digits of precision.
266
+ Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/resque#backer)]
157
267
 
158
- For example:
268
+ NOTE: [kettle-readme-backers][kettle-readme-backers] updates this list every day, automatically.
159
269
 
160
- ```ruby
161
- spec.add_dependency 'resque-unique_in_queue', '~> 1.0'
162
- ```
270
+ <!-- OPENCOLLECTIVE-INDIVIDUALS:START -->
271
+ No backers yet. Be the first!
272
+ <!-- OPENCOLLECTIVE-INDIVIDUALS:END -->
273
+
274
+ ### Open Collective for Organizations
275
+
276
+ Become a sponsor and get your logo on our README on GitHub with a link to your site. [[Become a sponsor](https://opencollective.com/resque#sponsor)]
277
+
278
+ NOTE: [kettle-readme-backers][kettle-readme-backers] updates this list every day, automatically.
279
+
280
+ <!-- OPENCOLLECTIVE-ORGANIZATIONS:START -->
281
+ No sponsors yet. Be the first!
282
+ <!-- OPENCOLLECTIVE-ORGANIZATIONS:END -->
283
+
284
+ [kettle-readme-backers]: https://github.com/resque/resque-unique_in_queue/blob/main/bin/kettle-readme-backers
285
+
286
+ ### Another way to support open-source
287
+
288
+ I’m driven by a passion to foster a thriving open-source community – a space where people can tackle complex problems, no matter how small. Revitalizing libraries that have fallen into disrepair, and building new libraries focused on solving real-world challenges, are my passions. I was recently affected by layoffs, and the tech jobs market is unwelcoming. I’m reaching out here because your support would significantly aid my efforts to provide for my family, and my farm (11 🐔 chickens, 2 🐶 dogs, 3 🐰 rabbits, 8 🐈‍ cats).
289
+
290
+ If you work at a company that uses my work, please encourage them to support me as a corporate sponsor. My work on gems you use might show up in `bundle fund`.
291
+
292
+ I’m developing a new library, [floss_funding][🖇floss-funding-gem], designed to empower open-source developers like myself to get paid for the work we do, in a sustainable way. Please give it a look.
293
+
294
+ **[Floss-Funding.dev][🖇floss-funding.dev]: 👉️ No network calls. 👉️ No tracking. 👉️ No oversight. 👉️ Minimal crypto hashing. 💡 Easily disabled nags**
295
+
296
+ [![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate to my FLOSS efforts at ko-fi.com][🖇kofi-img]][🖇kofi]
297
+
298
+ ## 🔐 Security
299
+
300
+ See [SECURITY.md][🔐security].
301
+
302
+ ## 🤝 Contributing
303
+
304
+ If you need some ideas of where to help, you could work on adding more code coverage,
305
+ check [issues][🤝gh-issues] or [PRs][🤝gh-pulls], or use the gem and think about how it could be better.
163
306
 
164
- ## License
307
+ We [![Keep A Changelog][📗keep-changelog-img]][📗keep-changelog] so if you make changes, remember to update it.
165
308
 
166
- * Copyright (c) 2012 Jonathan R. Wallace
167
- * Copyright (c) 2017 - 2018 [Peter H. Boling][peterboling] of [Rails Bling][railsbling]
309
+ See [CONTRIBUTING.md][🤝contributing] for more detailed instructions.
168
310
 
169
- [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT)
311
+ ### 🚀 Release Instructions
312
+
313
+ See [CONTRIBUTING.md][🤝contributing].
314
+
315
+ ### Code Coverage
316
+
317
+ <details markdown="1">
318
+ <summary>Coverage service badges</summary>
319
+
320
+ [![Coverage Graph][🏀codecov-g]][🏀codecov]
321
+
322
+ [![Coveralls Test Coverage][🏀coveralls-img]][🏀coveralls]
323
+
324
+ [![QLTY Test Coverage][🏀qlty-covi]][🏀qlty-cov]
325
+
326
+ </details>
327
+
328
+ ### 🪇 Code of Conduct
329
+
330
+ Everyone interacting with this project's codebases, issue trackers,
331
+ chat rooms and mailing lists agrees to follow the [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct].
332
+
333
+ ## 🌈 Contributors
334
+
335
+ [![Contributors][🖐contributors-img]][🖐contributors]
336
+
337
+ Made with [contributors-img][🖐contrib-rocks].
338
+
339
+ Also see GitLab Contributors: [https://gitlab.com/resque/resque-unique_in_queue/-/graphs/main][🚎contributors-gl]
340
+
341
+ ## 📌 Versioning
342
+
343
+ This library follows [![Semantic Versioning 2.0.0][📌semver-img]][📌semver] for its public API where practical.
344
+ For most applications, prefer the [Pessimistic Version Constraint][📌pvc] with two digits of precision.
345
+
346
+ For example:
347
+
348
+ ```ruby
349
+ spec.add_dependency("resque-unique_in_queue", "~> 2.0")
350
+ ```
170
351
 
171
- [license]: LICENSE
172
- [semver]: http://semver.org/
173
- [pvc]: http://guides.rubygems.org/patterns/#pessimistic-version-constraint
174
- [railsbling]: http://www.railsbling.com
175
- [peterboling]: http://www.peterboling.com
176
- [documentation]: http://rdoc.info/github/pboling/resque-unique_in_queue/frames
177
- [homepage]: https://github.com/pboling/resque-unique_in_queue/
178
- [blogpage]: http://www.railsbling.com/tags/resque-unique_in_queue/
352
+ <details markdown="1">
353
+ <summary>📌 Is "Platform Support" part of the public API? More details inside.</summary>
354
+
355
+ Dropping support for a platform can be a breaking change for affected users.
356
+ If a release changes supported platforms, it should be called out clearly in the changelog and versioned with that impact in mind.
357
+
358
+ To get a better understanding of how SemVer is intended to work over a project's lifetime,
359
+ read this article from the creator of SemVer:
360
+
361
+ - ["Major Version Numbers are Not Sacred"][📌major-versions-not-sacred]
362
+
363
+ </details>
364
+
365
+ See [CHANGELOG.md][📌changelog] for a list of releases.
366
+
367
+ ## 📄 License
368
+
369
+ The gem is available as open source under the terms of
370
+ the [MIT](https://github.com/resque/resque-unique_in_queue/blob/main/MIT.md) [![License: MIT][📄license-img]][📄license-ref].
371
+
372
+ ### © Copyright
373
+
374
+ See [LICENSE.md][📄license] for the official copyright notice.
375
+
376
+ <details markdown="1">
377
+ <summary>Copyright holders</summary>
378
+
379
+ - Copyright (c) 2013-2017 Tee Parham
380
+ - Copyright (c) 2016 MaksMasalitin
381
+ - Copyright (c) 2018, 2026 Peter H. Boling
382
+ - Copyright (c) 2019 Daniel Cunha
383
+ - Copyright (c) 2026 Max Lewis
384
+
385
+ </details>
386
+
387
+ ## 🤑 A request for help
388
+
389
+ Maintainers have teeth and need to pay their dentists.
390
+ After getting laid off in an RIF in March, and encountering difficulty finding a new one,
391
+ I began spending most of my time building open source tools.
392
+ I'm hoping to be able to pay for my kids' health insurance this month,
393
+ so if you value the work I am doing, I need your support.
394
+ Please consider sponsoring me or the project.
395
+
396
+ To join the community or get help, use the RubyForum or Discord.
397
+
398
+ [![Ruby Users Forum][✉️ruby-forum-img]][✉️ruby-forum]
399
+ [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
400
+
401
+ To say "thanks!" ☝️ Join the community or 👇️ send money.
402
+
403
+ [![Sponsor resque/resque-unique_in_queue on Open Source Collective][🖇osc-all-bottom-img]][🖇osc] 💌 [![Sponsor me on GitHub Sponsors][🖇sponsor-bottom-img]][🖇sponsor] 💌 [![Sponsor me on Liberapay][⛳liberapay-bottom-img]][⛳liberapay] 💌 [![Donate on PayPal][🖇paypal-bottom-img]][🖇paypal]
404
+
405
+ ### Please give the project a star ⭐ ♥.
406
+
407
+ Many parts of this project are actively managed by a [kettle-jem](https://github.com/structuredmerge/structuredmerge-ruby/tree/main/gems/kettle-jem) smart template utilizing [StructuredMerge.org](https://structuredmerge.org) merge contracts.
408
+
409
+ Thanks for RTFM. ☺️
410
+
411
+ [⛳liberapay-img]: https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay&color=a51611&style=flat
412
+ [⛳liberapay-bottom-img]: https://img.shields.io/liberapay/goal/pboling.svg?style=for-the-badge&logo=liberapay&color=a51611
413
+ [⛳liberapay]: https://liberapay.com/pboling/donate
414
+ [🖇osc-all-img]: https://img.shields.io/opencollective/all/resque
415
+ [🖇osc-sponsors-img]: https://img.shields.io/opencollective/sponsors/resque
416
+ [🖇osc-backers-img]: https://img.shields.io/opencollective/backers/resque
417
+ [🖇osc-backers]: https://opencollective.com/resque#backer
418
+ [🖇osc-backers-i]: https://opencollective.com/resque/backers/badge.svg?style=flat
419
+ [🖇osc-sponsors]: https://opencollective.com/resque#sponsor
420
+ [🖇osc-sponsors-i]: https://opencollective.com/resque/sponsors/badge.svg?style=flat
421
+ [🖇osc-all-bottom-img]: https://img.shields.io/opencollective/all/resque?style=for-the-badge
422
+ [🖇osc-sponsors-bottom-img]: https://img.shields.io/opencollective/sponsors/resque?style=for-the-badge
423
+ [🖇osc-backers-bottom-img]: https://img.shields.io/opencollective/backers/resque?style=for-the-badge
424
+ [🖇osc]: https://opencollective.com/resque
425
+ [🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
426
+ [🖇sponsor-bottom-img]: https://img.shields.io/badge/Sponsor_Me!-pboling-blue?style=for-the-badge&logo=github
427
+ [🖇sponsor]: https://github.com/sponsors/pboling
428
+ [🖇kofi-img]: https://img.shields.io/badge/ko--fi-%E2%9C%93-a51611.svg?style=flat
429
+ [🖇kofi]: https://ko-fi.com/pboling
430
+ [🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-%E2%9C%93-a51611.svg?style=flat
431
+ [🖇buyme-img]: https://img.buymeacoffee.com/button-api/?text=Buy%20me%20a%20latte&emoji=&slug=pboling&button_colour=FFDD00&font_colour=000000&font_family=Cookie&outline_colour=000000&coffee_colour=ffffff
432
+ [🖇buyme]: https://www.buymeacoffee.com/pboling
433
+ [🖇paypal-img]: https://img.shields.io/badge/donate-paypal-a51611.svg?style=flat&logo=paypal
434
+ [🖇paypal-bottom-img]: https://img.shields.io/badge/donate-paypal-a51611.svg?style=for-the-badge&logo=paypal&color=0A0A0A
435
+ [🖇paypal]: https://www.paypal.com/paypalme/peterboling
436
+ [🖇floss-funding.dev]: https://floss-funding.dev
437
+ [🖇floss-funding-gem]: https://github.com/galtzo-floss/floss_funding
438
+ [✉️discord-invite]: https://discord.gg/3qme4XHNKN
439
+ [✉️discord-invite-img-ftb]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge&logo=discord
440
+ [✉️ruby-friends-img]: https://img.shields.io/badge/daily.dev-%F0%9F%92%8E_Ruby_Friends-0A0A0A?style=for-the-badge&logo=dailydotdev&logoColor=white
441
+ [✉️ruby-friends]: https://app.daily.dev/squads/rubyfriends
442
+ [✉️ruby-forum-top-img]: https://img.shields.io/discourse/topics?server=https%3A%2F%2Fwww.rubyforum.org&style=flat&logo=discourse&label=Ruby%20Users%20Forum
443
+ [✉️ruby-forum-img]: https://img.shields.io/discourse/topics?server=https%3A%2F%2Fwww.rubyforum.org&style=for-the-badge&logo=discourse&label=Ruby%20Users%20Forum
444
+ [✉️ruby-forum]: https://www.rubyforum.org/tag/resque
445
+
446
+ [✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
447
+ [⛳️gem-namespace]: https://github.com/resque/resque-unique_in_queue
448
+ [⛳️namespace-img]: https://img.shields.io/badge/namespace-Resque::UniqueInQueue-3C2D2D.svg?style=square&logo=ruby&logoColor=white
449
+ [⛳️gem-name]: https://clickgems.clickhouse.com/dashboard/resque-unique_in_queue
450
+ [⛳️name-img]: https://img.shields.io/badge/name-resque--unique__in__queue-3C2D2D.svg?style=square&logo=rubygems&logoColor=red
451
+ [⛳️tag-img]: https://img.shields.io/github/tag/resque/resque-unique_in_queue.svg
452
+ [⛳️tag]: https://github.com/resque/resque-unique_in_queue/releases
453
+ [🚂maint-blog]: http://www.railsbling.com/tags/resque-unique_in_queue
454
+ [🚂maint-blog-img]: https://img.shields.io/badge/blog-railsbling-0093D0.svg?style=for-the-badge&logo=rubyonrails&logoColor=orange
455
+ [🚂maint-contact]: http://www.railsbling.com/contact
456
+ [🚂maint-contact-img]: https://img.shields.io/badge/Contact-Maintainer-0093D0.svg?style=flat&logo=rubyonrails&logoColor=red
457
+ [💖🖇linkedin]: http://www.linkedin.com/in/peterboling
458
+ [💖🖇linkedin-img]: https://img.shields.io/badge/LinkedIn-Profile-0B66C2?style=flat&logo=newjapanprowrestling
459
+ [💖✌️wellfound]: https://wellfound.com/u/peter-boling
460
+ [💖✌️wellfound-img]: https://img.shields.io/badge/peter--boling-orange?style=flat&logo=wellfound
461
+ [💖💲crunchbase]: https://www.crunchbase.com/person/peter-boling
462
+ [💖💲crunchbase-img]: https://img.shields.io/badge/peter--boling-purple?style=flat&logo=crunchbase
463
+ [💖🐘ruby-mast]: https://ruby.social/@galtzo
464
+ [💖🐘ruby-mast-img]: https://img.shields.io/mastodon/follow/109447111526622197?domain=https://ruby.social&style=flat&logo=mastodon&label=Ruby%20@galtzo
465
+ [💖🦋bluesky]: https://bsky.app/profile/galtzo.com
466
+ [💖🦋bluesky-img]: https://img.shields.io/badge/@galtzo.com-0285FF?style=flat&logo=bluesky&logoColor=white
467
+ [💖🌳linktree]: https://linktr.ee/galtzo
468
+ [💖🌳linktree-img]: https://img.shields.io/badge/galtzo-purple?style=flat&logo=linktree
469
+ [💖💁🏼‍♂️devto]: https://dev.to/galtzo
470
+ [💖💁🏼‍♂️devto-img]: https://img.shields.io/badge/dev.to-0A0A0A?style=flat&logo=devdotto&logoColor=white
471
+ [💖💁🏼‍♂️aboutme]: https://about.me/peter.boling
472
+ [💖💁🏼‍♂️aboutme-img]: https://img.shields.io/badge/about.me-0A0A0A?style=flat&logo=aboutme&logoColor=white
473
+ [💖🧊berg]: https://codeberg.org/pboling
474
+ [💖🐙hub]: https://github.org/pboling
475
+ [💖🛖hut]: https://sr.ht/~galtzo/
476
+ [💖🧪lab]: https://gitlab.com/pboling
477
+ [👨🏼‍🏫expsup-upwork]: https://www.upwork.com/freelancers/~014942e9b056abdf86?mp_source=share
478
+ [👨🏼‍🏫expsup-upwork-img]: https://img.shields.io/badge/UpWork-13544E?style=for-the-badge&logo=Upwork&logoColor=white
479
+ [👨🏼‍🏫expsup-codementor]: https://www.codementor.io/peterboling?utm_source=github&utm_medium=button&utm_term=peterboling&utm_campaign=github
480
+ [👨🏼‍🏫expsup-codementor-img]: https://img.shields.io/badge/CodeMentor-Get_Help-1abc9c?style=for-the-badge&logo=CodeMentor&logoColor=white
481
+ [🏙️entsup-tidelift]: https://tidelift.com/subscription/pkg/rubygems-resque-unique_in_queue?utm_source=rubygems-resque-unique_in_queue&utm_medium=referral&utm_campaign=readme
482
+ [🏙️entsup-tidelift-img]: https://img.shields.io/badge/Tidelift_and_Sonar-Enterprise_Support-FD3456?style=for-the-badge&logo=sonar&logoColor=white
483
+ [🏙️entsup-tidelift-sonar]: https://blog.tidelift.com/tidelift-joins-sonar
484
+ [💁🏼‍♂️peterboling]: http://www.peterboling.com
485
+ [🚂railsbling]: http://www.railsbling.com
486
+ [📜src-gl-img]: https://img.shields.io/badge/GitLab-FBA326?style=for-the-badge&logo=Gitlab&logoColor=orange
487
+ [📜src-gl]: https://gitlab.com/resque/resque-unique_in_queue
488
+ [📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue
489
+ [📜src-cb]: https://codeberg.org/resque/resque-unique_in_queue
490
+ [📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=GitHub&logoColor=green
491
+ [📜src-gh]: https://github.com/resque/resque-unique_in_queue
492
+ [📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
493
+ [📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
494
+ [📜gl-wiki]: https://gitlab.com/resque/resque-unique_in_queue/-/wikis/home
495
+ [📜gh-wiki]: https://github.com/resque/resque-unique_in_queue/wiki
496
+ [📜gl-wiki-img]: https://img.shields.io/badge/wiki-gitlab-943CD2.svg?style=for-the-badge&logo=gitlab&logoColor=white
497
+ [📜gh-wiki-img]: https://img.shields.io/badge/wiki-github-943CD2.svg?style=for-the-badge&logo=github&logoColor=white
498
+ [👽dl-rank]: https://clickgems.clickhouse.com/dashboard/resque-unique_in_queue
499
+ [👽dl-ranki]: https://img.shields.io/gem/dt/resque-unique_in_queue.svg
500
+ [👽version]: https://clickgems.clickhouse.com/dashboard/resque-unique_in_queue
501
+ [👽versioni]: https://img.shields.io/gem/v/resque-unique_in_queue.svg
502
+ [🏀qlty-mnt]: https://qlty.sh/gh/resque/projects/resque-unique_in_queue
503
+ [🏀qlty-mnti]: https://qlty.sh/gh/resque/projects/resque-unique_in_queue/maintainability.svg
504
+ [🏀qlty-cov]: https://qlty.sh/gh/resque/projects/resque-unique_in_queue/metrics/code?sort=coverageRating
505
+ [🏀qlty-covi]: https://qlty.sh/gh/resque/projects/resque-unique_in_queue/coverage.svg
506
+ [🏀codecov]: https://codecov.io/gh/resque/resque-unique_in_queue
507
+ [🏀codecovi]: https://codecov.io/gh/resque/resque-unique_in_queue/graph/badge.svg
508
+ [🏀coveralls]: https://coveralls.io/github/resque/resque-unique_in_queue?branch=main
509
+ [🏀coveralls-img]: https://coveralls.io/repos/github/resque/resque-unique_in_queue/badge.svg?branch=main
510
+ [🚎ruby-2.4-wf]: https://github.com/resque/resque-unique_in_queue/actions/workflows/ruby-2.4.yml
511
+ [🚎ruby-2.5-wf]: https://github.com/resque/resque-unique_in_queue/actions/workflows/ruby-2.5.yml
512
+ [🚎ruby-2.6-wf]: https://github.com/resque/resque-unique_in_queue/actions/workflows/ruby-2.6.yml
513
+ [🚎ruby-2.7-wf]: https://github.com/resque/resque-unique_in_queue/actions/workflows/ruby-2.7.yml
514
+ [🚎ruby-3.0-wf]: https://github.com/resque/resque-unique_in_queue/actions/workflows/ruby-3.0.yml
515
+ [🚎ruby-3.1-wf]: https://github.com/resque/resque-unique_in_queue/actions/workflows/ruby-3.1.yml
516
+ [🚎ruby-3.2-wf]: https://github.com/resque/resque-unique_in_queue/actions/workflows/ruby-3.2.yml
517
+ [🚎ruby-3.3-wf]: https://github.com/resque/resque-unique_in_queue/actions/workflows/ruby-3.3.yml
518
+ [🚎ruby-3.4-wf]: https://github.com/resque/resque-unique_in_queue/actions/workflows/ruby-3.4.yml
519
+ [🚎jruby-9.2-wf]: https://github.com/resque/resque-unique_in_queue/actions/workflows/jruby-9.2.yml
520
+ [🚎jruby-9.3-wf]: https://github.com/resque/resque-unique_in_queue/actions/workflows/jruby-9.3.yml
521
+ [🚎jruby-9.4-wf]: https://github.com/resque/resque-unique_in_queue/actions/workflows/jruby-9.4.yml
522
+ [🚎jruby-10.0-wf]: https://github.com/resque/resque-unique_in_queue/actions/workflows/jruby-10.0.yml
523
+ [🚎truby-22.3-wf]: https://github.com/resque/resque-unique_in_queue/actions/workflows/truffleruby-22.3.yml
524
+ [🚎truby-23.0-wf]: https://github.com/resque/resque-unique_in_queue/actions/workflows/truffleruby-23.0.yml
525
+ [🚎truby-23.1-wf]: https://github.com/resque/resque-unique_in_queue/actions/workflows/truffleruby-23.1.yml
526
+ [🚎truby-24.2-wf]: https://github.com/resque/resque-unique_in_queue/actions/workflows/truffleruby-24.2.yml
527
+ [🚎truby-25.0-wf]: https://github.com/resque/resque-unique_in_queue/actions/workflows/truffleruby-25.0.yml
528
+ [🚎truby-33.0-wf]: https://github.com/resque/resque-unique_in_queue/actions/workflows/truffleruby-33.0.yml
529
+ [🚎2-cov-wf]: https://github.com/resque/resque-unique_in_queue/actions/workflows/coverage.yml
530
+ [🚎2-cov-wfi]: https://github.com/resque/resque-unique_in_queue/actions/workflows/coverage.yml/badge.svg
531
+ [🚎3-hd-wf]: https://github.com/resque/resque-unique_in_queue/actions/workflows/heads.yml
532
+ [🚎3-hd-wfi]: https://github.com/resque/resque-unique_in_queue/actions/workflows/heads.yml/badge.svg
533
+ [🚎5-st-wf]: https://github.com/resque/resque-unique_in_queue/actions/workflows/style.yml
534
+ [🚎5-st-wfi]: https://github.com/resque/resque-unique_in_queue/actions/workflows/style.yml/badge.svg
535
+ [🚎9-t-wf]: https://github.com/resque/resque-unique_in_queue/actions/workflows/truffle.yml
536
+ [🚎9-t-wfi]: https://github.com/resque/resque-unique_in_queue/actions/workflows/truffle.yml/badge.svg
537
+ [🚎10-j-wf]: https://github.com/resque/resque-unique_in_queue/actions/workflows/jruby.yml
538
+ [🚎10-j-wfi]: https://github.com/resque/resque-unique_in_queue/actions/workflows/jruby.yml/badge.svg
539
+ [🚎11-c-wf]: https://github.com/resque/resque-unique_in_queue/actions/workflows/current.yml
540
+ [🚎11-c-wfi]: https://github.com/resque/resque-unique_in_queue/actions/workflows/current.yml/badge.svg
541
+ [🚎12-crh-wf]: https://github.com/resque/resque-unique_in_queue/actions/workflows/dep-heads.yml
542
+ [🚎12-crh-wfi]: https://github.com/resque/resque-unique_in_queue/actions/workflows/dep-heads.yml/badge.svg
543
+ [🚎13-🔒️-wf]: https://github.com/resque/resque-unique_in_queue/actions/workflows/locked_deps.yml
544
+ [🚎13-🔒️-wfi]: https://github.com/resque/resque-unique_in_queue/actions/workflows/locked_deps.yml/badge.svg
545
+ [🚎14-🔓️-wf]: https://github.com/resque/resque-unique_in_queue/actions/workflows/unlocked_deps.yml
546
+ [🚎14-🔓️-wfi]: https://github.com/resque/resque-unique_in_queue/actions/workflows/unlocked_deps.yml/badge.svg
547
+ [🚎15-🪪-wf]: https://github.com/resque/resque-unique_in_queue/actions/workflows/license-eye.yml
548
+ [🚎15-🪪-wfi]: https://github.com/resque/resque-unique_in_queue/actions/workflows/license-eye.yml/badge.svg
549
+ [💎ruby-2.3i]: https://img.shields.io/badge/Ruby-2.3_(%F0%9F%9A%ABCI)-AABBCC?style=for-the-badge&logo=ruby&logoColor=white
550
+ [💎ruby-2.4i]: https://img.shields.io/badge/Ruby-2.4-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
551
+ [💎ruby-2.5i]: https://img.shields.io/badge/Ruby-2.5-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
552
+ [💎ruby-2.6i]: https://img.shields.io/badge/Ruby-2.6-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
553
+ [💎ruby-2.7i]: https://img.shields.io/badge/Ruby-2.7-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
554
+ [💎ruby-3.0i]: https://img.shields.io/badge/Ruby-3.0-CC342D?style=for-the-badge&logo=ruby&logoColor=white
555
+ [💎ruby-3.1i]: https://img.shields.io/badge/Ruby-3.1-CC342D?style=for-the-badge&logo=ruby&logoColor=white
556
+ [💎ruby-3.2i]: https://img.shields.io/badge/Ruby-3.2-CC342D?style=for-the-badge&logo=ruby&logoColor=white
557
+ [💎ruby-3.3i]: https://img.shields.io/badge/Ruby-3.3-CC342D?style=for-the-badge&logo=ruby&logoColor=white
558
+ [💎ruby-3.4i]: https://img.shields.io/badge/Ruby-3.4-CC342D?style=for-the-badge&logo=ruby&logoColor=white
559
+ [💎ruby-c-i]: https://img.shields.io/badge/Ruby-current-CC342D?style=for-the-badge&logo=ruby&logoColor=green
560
+ [💎ruby-headi]: https://img.shields.io/badge/Ruby-HEAD-CC342D?style=for-the-badge&logo=ruby&logoColor=blue
561
+ [💎truby-22.3i]: https://img.shields.io/badge/Truffle_Ruby-22.3-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
562
+ [💎truby-23.0i]: https://img.shields.io/badge/Truffle_Ruby-23.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
563
+ [💎truby-23.1i]: https://img.shields.io/badge/Truffle_Ruby-23.1-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
564
+ [💎truby-24.2i]: https://img.shields.io/badge/Truffle_Ruby-24.2-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
565
+ [💎truby-25.0i]: https://img.shields.io/badge/Truffle_Ruby-25.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
566
+ [💎truby-33.0i]: https://img.shields.io/badge/Truffle_Ruby-33.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
567
+ [💎truby-c-i]: https://img.shields.io/badge/Truffle_Ruby-current-34BCB1?style=for-the-badge&logo=ruby&logoColor=green
568
+ [💎truby-headi]: https://img.shields.io/badge/Truffle_Ruby-HEAD-34BCB1?style=for-the-badge&logo=ruby&logoColor=blue
569
+ [💎jruby-9.2i]: https://img.shields.io/badge/JRuby-9.2-FBE742?style=for-the-badge&logo=ruby&logoColor=red
570
+ [💎jruby-9.3i]: https://img.shields.io/badge/JRuby-9.3-FBE742?style=for-the-badge&logo=ruby&logoColor=red
571
+ [💎jruby-9.4i]: https://img.shields.io/badge/JRuby-9.4-FBE742?style=for-the-badge&logo=ruby&logoColor=red
572
+ [💎jruby-10.0i]: https://img.shields.io/badge/JRuby-10.0-FBE742?style=for-the-badge&logo=ruby&logoColor=red
573
+ [💎jruby-c-i]: https://img.shields.io/badge/JRuby-current-FBE742?style=for-the-badge&logo=ruby&logoColor=green
574
+ [💎jruby-headi]: https://img.shields.io/badge/JRuby-HEAD-FBE742?style=for-the-badge&logo=ruby&logoColor=blue
575
+ [🤝gh-issues]: https://github.com/resque/resque-unique_in_queue/issues
576
+ [🤝gh-pulls]: https://github.com/resque/resque-unique_in_queue/pulls
577
+ [🤝gl-issues]: https://gitlab.com/resque/resque-unique_in_queue/-/issues
578
+ [🤝gl-pulls]: https://gitlab.com/resque/resque-unique_in_queue/-/merge_requests
579
+ [🤝cb-issues]: https://codeberg.org/resque/resque-unique_in_queue/issues
580
+ [🤝cb-pulls]: https://codeberg.org/resque/resque-unique_in_queue/pulls
581
+ [🤝cb-donate]: https://donate.codeberg.org/
582
+ [🤝contributing]: https://github.com/resque/resque-unique_in_queue/blob/main/CONTRIBUTING.md
583
+ [🏀codecov-g]: https://codecov.io/gh/resque/resque-unique_in_queue/graph/badge.svg
584
+ [🖐contrib-rocks]: https://contrib.rocks
585
+ [🖐contributors]: https://github.com/resque/resque-unique_in_queue/graphs/contributors
586
+ [🖐contributors-img]: https://contrib.rocks/image?repo=resque/resque-unique_in_queue
587
+ [🚎contributors-gl]: https://gitlab.com/resque/resque-unique_in_queue/-/graphs/main
588
+ [🪇conduct]: https://github.com/resque/resque-unique_in_queue/blob/main/CODE_OF_CONDUCT.md
589
+ [🪇conduct-img]: https://img.shields.io/badge/Contributor_Covenant-2.1-259D6C.svg
590
+ [📌pvc]: http://guides.rubygems.org/patterns/#pessimistic-version-constraint
591
+ [📌semver]: https://semver.org/spec/v2.0.0.html
592
+ [📌semver-img]: https://img.shields.io/badge/semver-2.0.0-259D6C.svg?style=flat
593
+ [📌semver-breaking]: https://github.com/semver/semver/issues/716#issuecomment-869336139
594
+ [📌major-versions-not-sacred]: https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred.html
595
+ [📌changelog]: https://github.com/resque/resque-unique_in_queue/blob/main/CHANGELOG.md
596
+ [📗keep-changelog]: https://keepachangelog.com/en/1.0.0/
597
+ [📗keep-changelog-img]: https://img.shields.io/badge/keep--a--changelog-1.0.0-34495e.svg?style=flat
598
+ [📌gitmoji]: https://gitmoji.dev
599
+ [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
600
+ [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
601
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-0.193-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
602
+ [🔐security]: https://github.com/resque/resque-unique_in_queue/blob/main/SECURITY.md
603
+ [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
604
+ [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
605
+ [📄license]: LICENSE.md
606
+ [📄license-ref]: https://github.com/resque/resque-unique_in_queue/blob/main/MIT.md
607
+ [📄license-img]: https://img.shields.io/badge/License-MIT-259D6C.svg
608
+ [📄license-compat]: https://www.apache.org/legal/resolved.html#category-a
609
+ [📄license-compat-img]: https://img.shields.io/badge/Apache_Compatible:_Category_A-%E2%9C%93-259D6C.svg?style=flat&logo=Apache
610
+
611
+ [📄ilo-declaration]: https://www.ilo.org/declaration/lang--en/index.htm
612
+ [📄ilo-declaration-img]: https://img.shields.io/badge/ILO_Fundamental_Principles-✓-259D6C.svg?style=flat
613
+ [🚎yard-current]: http://rubydoc.info/gems/resque-unique_in_queue
614
+ [🚎yard-head]: https://resque-unique-in-queue.galtzo.com
615
+ [💎stone_checksums]: https://github.com/galtzo-floss/stone_checksums
616
+ [💎SHA_checksums]: https://gitlab.com/resque/resque-unique_in_queue/-/tree/main/checksums
617
+ [💎rlts]: https://github.com/rubocop-lts/rubocop-lts
618
+ [💎rlts-img]: https://img.shields.io/badge/code_style_&_linting-rubocop--lts-34495e.svg?plastic&logo=ruby&logoColor=white
619
+ [💎appraisal2]: https://github.com/appraisal-rb/appraisal2
620
+ [💎appraisal2-img]: https://img.shields.io/badge/appraised_by-appraisal2-34495e.svg?plastic&logo=ruby&logoColor=white
621
+ [💎d-in-dvcs]: https://railsbling.com/posts/dvcs/put_the_d_in_dvcs/
622
+
623
+ <!-- kettle-jem:metadata:start -->
624
+ | Field | Value |
625
+ |---|---|
626
+ | Package | resque-unique_in_queue |
627
+ | Description | 💎 A resque plugin that ensures job uniqueness at enqueue time. |
628
+ | Homepage | https://github.com/resque/resque-unique_in_queue |
629
+ | Source | https://github.com/resque/resque-unique_in_queue |
630
+ | License | `MIT` |
631
+ | Funding | https://github.com/sponsors/pboling, https://ko-fi.com/pboling, https://liberapay.com/pboling/donate, https://opencollective.com/resque, https://thanks.dev/u/gh/pboling, https://tidelift.com/funding/github/rubygems/resque-unique_in_queue, https://www.buymeacoffee.com/pboling |
632
+ <!-- kettle-jem:metadata:end -->