simplekiq 0.0.3 → 1.0.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.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +18 -73
  3. data/CHANGELOG.md +25 -3
  4. data/CONTRIBUTING.md +12 -13
  5. data/CONTRIBUTORS.md +15 -5
  6. data/Gemfile +6 -0
  7. data/Gemfile.lock +75 -46
  8. data/README.md +27 -13
  9. data/lib/simplekiq/batch_tracker_job.rb +22 -0
  10. data/lib/simplekiq/batching_job.rb +6 -19
  11. data/lib/simplekiq/orchestration.rb +0 -4
  12. data/lib/simplekiq/orchestration_executor.rb +28 -28
  13. data/lib/simplekiq/orchestration_job.rb +20 -2
  14. data/lib/simplekiq/version.rb +1 -1
  15. data/lib/simplekiq.rb +9 -3
  16. data/simplekiq.gemspec +2 -6
  17. data/tasks/ci.rake +1 -1
  18. metadata +37 -38
  19. data/vendor/cache/ast-2.4.2.gem +0 -0
  20. data/vendor/cache/coderay-1.1.3.gem +0 -0
  21. data/vendor/cache/connection_pool-2.2.5.gem +0 -0
  22. data/vendor/cache/diff-lcs-1.5.0.gem +0 -0
  23. data/vendor/cache/method_source-1.0.0.gem +0 -0
  24. data/vendor/cache/parallel-1.22.1.gem +0 -0
  25. data/vendor/cache/parser-3.1.1.0.gem +0 -0
  26. data/vendor/cache/pry-0.13.1.gem +0 -0
  27. data/vendor/cache/rack-2.2.3.gem +0 -0
  28. data/vendor/cache/rack-protection-2.2.0.gem +0 -0
  29. data/vendor/cache/rainbow-3.1.1.gem +0 -0
  30. data/vendor/cache/rake-12.3.3.gem +0 -0
  31. data/vendor/cache/redis-4.5.1.gem +0 -0
  32. data/vendor/cache/regexp_parser-2.2.1.gem +0 -0
  33. data/vendor/cache/rexml-3.2.5.gem +0 -0
  34. data/vendor/cache/rspec-3.10.0.gem +0 -0
  35. data/vendor/cache/rspec-core-3.10.1.gem +0 -0
  36. data/vendor/cache/rspec-expectations-3.10.1.gem +0 -0
  37. data/vendor/cache/rspec-mocks-3.10.2.gem +0 -0
  38. data/vendor/cache/rspec-support-3.10.3.gem +0 -0
  39. data/vendor/cache/rspec_junit_formatter-0.5.1.gem +0 -0
  40. data/vendor/cache/rubocop-1.26.1.gem +0 -0
  41. data/vendor/cache/rubocop-ast-1.16.0.gem +0 -0
  42. data/vendor/cache/rubocop-performance-1.13.3.gem +0 -0
  43. data/vendor/cache/ruby-progressbar-1.11.0.gem +0 -0
  44. data/vendor/cache/sidekiq-5.2.10.gem +0 -0
  45. data/vendor/cache/standard-1.9.1.gem +0 -0
  46. data/vendor/cache/unicode-display_width-2.1.0.gem +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4caaf4c9bfc49507c627f025b8847b4cbfd36805897abc1c5d14117327cb0313
4
- data.tar.gz: cdff30ac40b315e7e8dca636d013153631b710b8fb65c2bfffdf36632900b293
3
+ metadata.gz: f267eca4633ec71afa7595061707ffdea9a94c9f7b0db7dde1296a6aa314f66f
4
+ data.tar.gz: 52f52165d23bc71277f86c8c6ce049b42566b188ed484efa14cf974901e94dbe
5
5
  SHA512:
6
- metadata.gz: 43789a7c661f3981035069935eecdefa4c03f8bfc2bd0eaeba8840018f54813f103475a5cd149752cbbef48e30f7c7363c98af548d85277995e0699df58b00dd
7
- data.tar.gz: 9ab17b4b9d419d2551fd8cfe6070443015e35c1dc9c6adf195302a912aff52caf67fc7a5edea2c9f7733c43e0e799b790e00be07a4fbc4b6d0586501372be20d
6
+ metadata.gz: c4722a45b623489cd739ff5cd2b41711fb0c5004bfcc3f7775eddb9b31f7c0a18a582b6d890531ade1bd6a06acc59497867b5db2725aaa15009b37ae21c0f4bf
7
+ data.tar.gz: 0ee6f33a11201f94ce846968be2ec471c9292bc0e6d63bf6e7b3bc68eff688198714470405d4b0e5b32192a6e892b409964d7368b6050467ab6f350eae510875
data/.circleci/config.yml CHANGED
@@ -1,23 +1,24 @@
1
1
  version: 2.1
2
2
 
3
- orbs:
4
- gem: doximity/gem-publisher@0
5
-
6
3
  executors:
7
- ruby-2-6:
4
+ ruby:
5
+ resource_class: small
6
+ docker:
7
+ - image: cimg/ruby:3.3
8
+ ruby-with-redis:
8
9
  resource_class: small
9
10
  docker:
10
- - image: cimg/ruby:2.6
11
- environment:
12
- BUNDLE_VERSION: "~> 1.17"
11
+ - image: cimg/ruby:3.3
12
+ - image: redis:6.2
13
+ command: redis-server
13
14
 
14
15
  # yaml anchor filters
15
- master_only: &master_only
16
+ always_run: &always_run
16
17
  filters:
17
18
  branches:
18
- only: master
19
+ only: /.*/
19
20
  tags:
20
- ignore: /.*/
21
+ only: /^v.*/
21
22
  pr_only: &pr_only
22
23
  filters:
23
24
  branches:
@@ -33,26 +34,18 @@ version_tags_only: &version_tags_only
33
34
 
34
35
  jobs:
35
36
  build:
36
- executor: ruby-2-6
37
+ executor: ruby-with-redis
37
38
  steps:
38
39
  - checkout
39
40
  - run:
40
41
  name: Install Bundler specific version
41
42
  command: |
42
43
  gem install bundler --version "${BUNDLE_VERSION}" --force
43
- - restore_cache:
44
- keys:
45
- - v1-bundle-{{ checksum "Gemfile.lock" }}-
46
44
  - run:
47
45
  name: Install Ruby Dependencies
48
46
  command: |
49
47
  bundle config set --local path 'vendor/bundle'
50
- bundle config set --local frozen 'true'
51
- bundle install --local --jobs=4 --retry=3
52
- - save_cache:
53
- key: v1-bundle-{{ checksum "Gemfile.lock" }}-
54
- paths:
55
- - vendor/bundle
48
+ bundle install --jobs=4 --retry=3
56
49
  - run:
57
50
  name: Run Tests
58
51
  command: bundle exec rake ci:specs
@@ -68,58 +61,10 @@ jobs:
68
61
  - vendor/bundle
69
62
 
70
63
  workflows:
71
- version: 2
72
-
73
- trunk:
74
- jobs:
75
- - build:
76
- <<: *master_only
77
- - gem/build:
78
- <<: *master_only
79
- executor: ruby-2-6
80
- name: gem-build
81
- requires:
82
- - build
83
-
84
- pull-requests:
85
- jobs:
86
- - build:
87
- <<: *pr_only
88
- - gem/build:
89
- <<: *pr_only
90
- executor: ruby-2-6
91
- name: gem-build
92
- requires:
93
- - build
94
- - pre-release-approval:
95
- <<: *pr_only
96
- type: approval
97
- requires:
98
- - gem-build
99
- - gem/publish:
100
- <<: *pr_only
101
- name: gem-publish
102
- to_rubygems: true
103
- pre_release: true
104
- requires:
105
- - pre-release-approval
106
- context: artifact_publishing
107
-
108
- final-release:
64
+ main:
109
65
  jobs:
110
66
  - build:
111
- <<: *version_tags_only
112
- - gem/build:
113
- <<: *version_tags_only
114
- executor: ruby-2-6
115
- name: gem-build
116
- requires:
117
- - build
118
- - gem/publish:
119
- <<: *version_tags_only
120
- name: gem-publish
121
- to_rubygems: true
122
- pre_release: false
123
- requires:
124
- - gem-build
125
- context: artifact_publishing
67
+ <<: *always_run
68
+ context:
69
+ - sidekiq-enterprise
70
+ - nexus_readonly
data/CHANGELOG.md CHANGED
@@ -4,11 +4,33 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [1.0.0]
8
+ * Only support Sidekiq 7.1 and Sidekiq 8 (dropped support for older versions)
9
+ [#42](https://github.com/doximity/simplekiq/pull/42)
10
+
11
+ ## [0.1.0] (pre-release for 1.0)
12
+ * Fix typo in CONTRIBUTORS
13
+ [#5](https://github.com/doximity/simplekiq/pull/5)
14
+ * Fix incorrectly named spec file
15
+ [#9](https://github.com/doximity/simplekiq/pull/9)
16
+ * README fix
17
+ [#10](https://github.com/doximity/simplekiq/pull/10)
18
+ * Updating CONTRIBUTING license
19
+ [#16](https://github.com/doximity/simplekiq/pull/16)
20
+ * Fix CHANGELOG typo
21
+ [#18](https://github.com/doximity/simplekiq/pull/18)
22
+ * Add sidekiq-pro as an explicit dependency and loosen sidekiq requirements
23
+ [#19](https://github.com/doximity/simplekiq/pull/19)
24
+ * Add new toplevel batch to encapsulate all batches within an orchestration
25
+ [#21](https://github.com/doximity/simplekiq/pull/21)
26
+ * Fix bug with toplevel batch and include batch descriptions
27
+ [#23](https://github.com/doximity/simplekiq/pull/23)
28
+
7
29
  ## [0.0.3]
8
- * Misc minimal fixes to get the gem building and releasable
9
- [#2](https://github.com/doximity/rake-ui/pull/3)
30
+ * Misc minimal fixes to get the gem building and releasable according to our open source standards
31
+ [#3](https://github.com/doximity/simplekiq/pull/3)
10
32
  * Copy over library code from prior sources with maintained history
11
- [#1](https://github.com/doximity/simplekiq/pull/1)
33
+ [#2](https://github.com/doximity/simplekiq/pull/2)
12
34
 
13
35
  ## [0.0.2]
14
36
  * Scrubbed version from rubygems, do not use
data/CONTRIBUTING.md CHANGED
@@ -1,31 +1,30 @@
1
- # Contributing
1
+ # Contributing to Doximity
2
2
 
3
3
  We welcome contributions to this repository. Feel free to submit issues for bugs you encounter and pull requests for code and documentation contributions.
4
+ In order to prevent licensing issues, Doximity Inc. (“Doximity”, “we”, “us”) requires all contributors to agree to an Individual Contributor License Agreement (“CLA”), which is reproduced below. By submitting your contributions to us, you agree that you have read and are bound by the CLA. If you do not agree with the CLA, you may not submit contributions.
4
5
 
5
- In order to prevent licensing issues, we require all contributors to sign an individual contributor license agreement, which is reproduced below:
6
+ ## Doximity Individual Contributor License Agreement
6
7
 
7
- ## Individual Contributor License Agreement
8
+ This license is for your protection as a Contributor as well as the protection of Doximity; it does not change your rights to use your own Contributions for any other purpose.
8
9
 
9
- In order to clarify the intellectual property license granted with Contributions from any person or entity, Doximity Inc. ("Doximity") must have a Contributor License Agreement ("CLA") on file that has been signed by each Contributor, indicating agreement to the license terms below. This license is for your protection as a Contributor as well as the protection of Doximity; it does not change your rights to use your own Contributions for any other purpose.
10
-
11
- You accept and agree to the following terms and conditions for Your present and future Contributions submitted to Doximity. Except for the license granted herein to Doximity and recipients of software distributed by Doximity, You reserve all right, title, and interest in and to Your Contributions.
10
+ You accept and agree to the following terms and conditions for Your present and future Contributions submitted to Doximity. Except for the license granted herein to Doximity and recipients of software distributed by Doximity, You reserve all right, titles, and interests in and to Your Contributions.
12
11
 
13
12
  ### Definitions
14
13
 
15
- "You" (or "Your") shall mean the copyright owner or legal entity authorized by the copyright owner that is making this Agreement with Doximity. For legal entities, the entity making a Contribution and all other entities that control, are controlled by, or are under common control with that entity are considered to be a single Contributor. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
14
+ "You" (or "Your" or the “Contributor”) shall mean the copyright owner or legal entity authorized by the copyright owner that is making this Agreement with Doximity. For legal entities, the entity making a Contribution and all other entities that control, are controlled by, or are under common control with that entity are considered to be a single Contributor. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
16
15
 
17
- 1. "Contribution" shall mean any original work of authorship, including any modifications or additions to an existing work, that is intentionally submitted by You to Doximity for inclusion in, or documentation of, any of the products owned or managed by Doximity (the "Work"). For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to Doximity or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, Doximity for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by You as "Not a Contribution."
16
+ 1. "Contribution" shall mean the code, documentation, or any original work of authorship, including any modifications or additions to an existing work, that is intentionally submitted by You to Doximity for inclusion in, or documentation of, any of the products owned or managed by Doximity (the "Work"). For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to Doximity or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, Doximity for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by You as "Not a Contribution."
18
17
 
19
18
  2. Grant of Copyright License. Subject to the terms and conditions of this Agreement, You hereby grant to Doximity and to recipients of software distributed by Doximity a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute Your Contributions and such derivative works.
20
19
 
21
- 3. Grant of Patent License. Subject to the terms and conditions of this Agreement, You hereby grant to Doximity and to recipients of software distributed by Doximity a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by You that are necessarily infringed by Your Contribution(s) alone or by combination of Your Contribution(s) with the Work to which such Contribution(s) was submitted. If any entity institutes patent litigation against You or any other entity (including a cross-claim or counterclaim in a lawsuit) alleging that your Contribution, or the Work to which you have contributed, constitutes direct or contributory patent infringement, then any patent licenses granted to that entity under this Agreement for that Contribution or Work shall terminate as of the date such litigation is filed.
20
+ 3. Grant of Patent License. Subject to the terms and conditions of this Agreement, You hereby grant to Doximity and to recipients of software distributed by Doximity a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by You that are necessarily infringed by Your Contribution(s) alone or by a combination of Your Contribution(s) with the Work to which such Contribution(s) was submitted. If any entity institutes patent litigation against You or any other entity (including a cross-claim or counterclaim in a lawsuit) alleging that your Contribution, or the Work to which you have contributed, constitutes a direct or contributory patent infringement, then any patent licenses granted to that entity under this Agreement for that Contribution or Work shall terminate as of the date such litigation is filed.
22
21
 
23
- 4. You represent that you are legally entitled to grant the above license. If your employer(s) has rights to intellectual property that you create that includes your Contributions, you represent that you have received permission to make Contributions on behalf of that employer, that your employer has waived such rights for your Contributions to Doximity, or that your employer has executed a separate Corporate CLA with Doximity.
22
+ 4. You represent that You are legally entitled to grant the above license. If your employer(s) has rights to intellectual property that you create that includes your Contributions, you represent that you have received permission to make Contributions on behalf of that employer, that your employer has waived such rights for your Contributions to Doximity, or that your employer has executed a separate Corporate CLA with Doximity.
24
23
 
25
24
  5. You represent that each of Your Contributions is Your original creation (see section 7 for submissions on behalf of others). You represent that Your Contribution submissions include complete details of any third-party license or other restriction (including, but not limited to, related patents and trademarks) of which you are personally aware and which are associated with any part of Your Contributions.
26
25
 
27
- 6. You are not expected to provide support for Your Contributions, except to the extent You desire to provide support. You may provide support for free, for a fee, or not at all. Unless required by applicable law or agreed to in writing, You provide Your Contributions on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON- INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE.
26
+ 6. You are not expected to provide support for Your Contributions, except to the extent You desire to provide support. You may provide support for free, for a fee, or not at all. Unless required by applicable law or agreed to in writing, You provide Your Contributions on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE.
28
27
 
29
- 7. Should You wish to submit work that is not Your original creation, You may submit it to Doximity separately from any Contribution, identifying the complete details of its source and of any license or other restriction (including, but not limited to, related patents, trademarks, and license agreements) of which you are personally aware, and conspicuously marking the work as "Submitted on behalf of a third-party: [[]named here]".
28
+ 7. Should You wish to submit work that is not Your original creation, You may submit it to Doximity separately from any Contribution, identifying the complete details of its source and of any license or other restriction (including, but not limited to, related patents, trademarks, and license agreements) of which you are personally aware, and conspicuously marking the work as "Submitted on behalf of a third-party: [named here]".
30
29
 
31
- 8. You agree to notify Doximity of any facts or circumstances of which you become aware that would make these representations inaccurate in any respect.
30
+ 8. You agree to notify Doximity of any facts or circumstances of which you become aware that would make these representations inaccurate in any respect.
data/CONTRIBUTORS.md CHANGED
@@ -1,22 +1,32 @@
1
1
  ## List of All Known Code Contributors to Simplekiq
2
2
 
3
- ### Jack Noble
3
+ ### Jack Noble (Doximity)
4
4
  * Collaborated on initial concept
5
5
  * Wrote the majority of the code as of initial release
6
+ * Helpful contributions to maintenance of specs, README, etc
6
7
 
7
- ### John Wilkinson
8
+ ### John Wilkinson (Doximity)
8
9
  * Collaborated on initial concept
9
10
  * Conducted the gem extraction and release
10
11
 
11
- ### Brian Dillard
12
+ ### Jason Hagglund (Doximity)
13
+ * Finagled a way into getting us the ability to specify `sidekiq-pro` as an explicit dependency despite it not being publicly available and without exposing it to the public in the process.
14
+
15
+ ### Brian Dillard (Doximity)
12
16
  * Added additional comment documentation
13
17
  * Added support for `on_complete` batch callback support in `Simplekiq::BatchingJob`
14
18
 
15
- ### Austin Madden
19
+ ### Austen Madden (Doximity)
16
20
  * Fixed bug with batch statuses in callbacks for empty batches
17
21
 
18
- ### Tiffany Troha
22
+ ### Tiffany Troha (Doximity)
19
23
  * Added support for specifying `sidekiq_options` for the child job in `Simplekiq::BatchingJob`
20
24
 
25
+ ### Lucas Lazzaris (Doximity)
26
+ * Added support for sidekiq 7.x
27
+
21
28
  ### [Daniel Pepper](https://github.com/dpep)
22
29
  * On request, graciously took down his unused `simplekiq` placeholder from rubygems so we could continue using the name :raised_hands:
30
+
31
+ ### [Jeremy Smith](https://github.com/jeremysmithco)
32
+ * Helpfully and respectfully nudged us towards loosening our sidekiq version requirement
data/Gemfile CHANGED
@@ -1,4 +1,10 @@
1
1
  source "https://rubygems.org"
2
2
 
3
+ source "https://artifacts.dox.support/repository/gems" do
4
+ gem "sidekiq-pro", "7.3.6"
5
+ end
6
+
7
+ gem "sidekiq", "7.3.7"
8
+
3
9
  # Specify your gem's dependencies in simplekiq.gemspec
4
10
  gemspec
data/Gemfile.lock CHANGED
@@ -1,70 +1,97 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- simplekiq (0.0.3)
5
- sidekiq (~> 5.2.9)
4
+ simplekiq (0.2.0)
5
+ sidekiq (>= 7.1, < 9.0)
6
+ sidekiq-pro (>= 7.1, < 9.0)
7
+
8
+ GEM
9
+ remote: https://artifacts.dox.support/repository/gems/
10
+ specs:
11
+ json (2.16.0)
12
+ language_server-protocol (3.17.0.5)
13
+ lint_roller (1.1.0)
14
+ prism (1.6.0)
15
+ racc (1.8.1)
16
+ sidekiq-pro (7.3.6)
17
+ sidekiq (>= 7.3.7, < 8)
18
+ unicode-emoji (4.1.0)
6
19
 
7
20
  GEM
8
21
  remote: https://rubygems.org/
9
22
  specs:
10
- ast (2.4.2)
23
+ ast (2.4.3)
11
24
  coderay (1.1.3)
12
- connection_pool (2.2.5)
25
+ connection_pool (2.5.4)
13
26
  diff-lcs (1.5.0)
27
+ logger (1.7.0)
14
28
  method_source (1.0.0)
15
- parallel (1.22.1)
16
- parser (3.1.1.0)
29
+ parallel (1.27.0)
30
+ parser (3.3.10.0)
17
31
  ast (~> 2.4.1)
18
- pry (0.13.1)
32
+ racc
33
+ pry (0.14.1)
19
34
  coderay (~> 1.1)
20
35
  method_source (~> 1.0)
21
- rack (2.2.3)
22
- rack-protection (2.2.0)
23
- rack
36
+ rack (3.2.4)
24
37
  rainbow (3.1.1)
25
38
  rake (12.3.3)
26
- redis (4.5.1)
27
- regexp_parser (2.2.1)
28
- rexml (3.2.5)
29
- rspec (3.10.0)
30
- rspec-core (~> 3.10.0)
31
- rspec-expectations (~> 3.10.0)
32
- rspec-mocks (~> 3.10.0)
33
- rspec-core (3.10.1)
34
- rspec-support (~> 3.10.0)
35
- rspec-expectations (3.10.1)
39
+ redis-client (0.26.1)
40
+ connection_pool
41
+ regexp_parser (2.11.3)
42
+ rspec (3.11.0)
43
+ rspec-core (~> 3.11.0)
44
+ rspec-expectations (~> 3.11.0)
45
+ rspec-mocks (~> 3.11.0)
46
+ rspec-core (3.11.0)
47
+ rspec-support (~> 3.11.0)
48
+ rspec-expectations (3.11.0)
36
49
  diff-lcs (>= 1.2.0, < 2.0)
37
- rspec-support (~> 3.10.0)
38
- rspec-mocks (3.10.2)
50
+ rspec-support (~> 3.11.0)
51
+ rspec-mocks (3.11.1)
39
52
  diff-lcs (>= 1.2.0, < 2.0)
40
- rspec-support (~> 3.10.0)
41
- rspec-support (3.10.3)
53
+ rspec-support (~> 3.11.0)
54
+ rspec-support (3.11.0)
42
55
  rspec_junit_formatter (0.5.1)
43
56
  rspec-core (>= 2, < 4, != 2.12.0)
44
- rubocop (1.26.1)
57
+ rubocop (1.80.2)
58
+ json (~> 2.3)
59
+ language_server-protocol (~> 3.17.0.2)
60
+ lint_roller (~> 1.1.0)
45
61
  parallel (~> 1.10)
46
- parser (>= 3.1.0.0)
62
+ parser (>= 3.3.0.2)
47
63
  rainbow (>= 2.2.2, < 4.0)
48
- regexp_parser (>= 1.8, < 3.0)
49
- rexml
50
- rubocop-ast (>= 1.16.0, < 2.0)
64
+ regexp_parser (>= 2.9.3, < 3.0)
65
+ rubocop-ast (>= 1.46.0, < 2.0)
51
66
  ruby-progressbar (~> 1.7)
52
- unicode-display_width (>= 1.4.0, < 3.0)
53
- rubocop-ast (1.16.0)
54
- parser (>= 3.1.1.0)
55
- rubocop-performance (1.13.3)
56
- rubocop (>= 1.7.0, < 2.0)
57
- rubocop-ast (>= 0.4.0)
58
- ruby-progressbar (1.11.0)
59
- sidekiq (5.2.10)
60
- connection_pool (~> 2.2, >= 2.2.2)
61
- rack (~> 2.0)
62
- rack-protection (>= 1.5.0)
63
- redis (~> 4.5, < 4.6.0)
64
- standard (1.9.1)
65
- rubocop (= 1.26.1)
66
- rubocop-performance (= 1.13.3)
67
- unicode-display_width (2.1.0)
67
+ unicode-display_width (>= 2.4.0, < 4.0)
68
+ rubocop-ast (1.47.1)
69
+ parser (>= 3.3.7.2)
70
+ prism (~> 1.4)
71
+ rubocop-performance (1.25.0)
72
+ lint_roller (~> 1.1)
73
+ rubocop (>= 1.75.0, < 2.0)
74
+ rubocop-ast (>= 1.38.0, < 2.0)
75
+ ruby-progressbar (1.13.0)
76
+ sidekiq (7.3.7)
77
+ connection_pool (>= 2.3.0)
78
+ logger
79
+ rack (>= 2.2.4)
80
+ redis-client (>= 0.22.2)
81
+ standard (1.51.1)
82
+ language_server-protocol (~> 3.17.0.2)
83
+ lint_roller (~> 1.0)
84
+ rubocop (~> 1.80.2)
85
+ standard-custom (~> 1.0.0)
86
+ standard-performance (~> 1.8)
87
+ standard-custom (1.0.2)
88
+ lint_roller (~> 1.0)
89
+ rubocop (~> 1.50)
90
+ standard-performance (1.8.0)
91
+ lint_roller (~> 1.1)
92
+ rubocop-performance (~> 1.25.0)
93
+ unicode-display_width (3.2.0)
94
+ unicode-emoji (~> 4.1)
68
95
 
69
96
  PLATFORMS
70
97
  ruby
@@ -74,8 +101,10 @@ DEPENDENCIES
74
101
  rake (~> 12.0)
75
102
  rspec (~> 3.2)
76
103
  rspec_junit_formatter
104
+ sidekiq (= 7.3.7)
105
+ sidekiq-pro (= 7.3.6)!
77
106
  simplekiq!
78
107
  standard
79
108
 
80
109
  BUNDLED WITH
81
- 2.1.4
110
+ 2.7.2
data/README.md CHANGED
@@ -10,7 +10,7 @@ Add this line to your application's Gemfile:
10
10
  gem "simplekiq"
11
11
  ```
12
12
 
13
- Note that this gem requires you be a Sidekiq Pro paid subscriber to be able to use it, so after following the installation docs for getting the private gem configured with your system, ensure you have `sidekiq-pro` at version `~> 5.0.0` or higher and that it's being required:
13
+ Note that this gem requires you be a Sidekiq Pro paid subscriber to be able to use it, so after following the installation docs for getting the private gem configured with your system, ensure you have `sidekiq-pro` at version `~> 5.0.0` or higher (need at least version `5.2.1` if you want to capture `on_death` callbacks [percolating up to parent batches](https://github.com/mperham/sidekiq/blob/main/Pro-Changes.md#521) - a supported feature which is not required for typical orchestration behavior) and that it's being required:
14
14
 
15
15
  ```ruby
16
16
  gem "sidekiq-pro", "~> 5.0.0"
@@ -38,8 +38,7 @@ There are currently two primary components of the system which were designed to
38
38
  Mixing in the [Simplekiq::Orchestration](./lib/simplekiq/orchestration_job.rb) module lets you define a human-readable workflow of jobs in a single file with almost* no special requirements or restrictions on how the child jobs are designed. In most cases, Sidekiq jobs not designed for use in orchestrations should be compatible for use in orchestrations. A job implementing `OrchestrationJob` might look like:
39
39
 
40
40
  ```ruby
41
- class SomeOrchestrationJob < BaseJob
42
- include Sidekiq::Worker
41
+ class SomeOrchestrationJob
43
42
  include Simplekiq::OrchestrationJob
44
43
 
45
44
  def perform_orchestration(some_id)
@@ -56,6 +55,17 @@ class SomeOrchestrationJob < BaseJob
56
55
  run SomeFinalizationJob, some_model.id # 4.
57
56
  end
58
57
 
58
+ def on_death(status, options) # 5.
59
+ SomeModel.find(options["args"].first).failure_happened!
60
+ end
61
+
62
+ def on_complete(status, options) # 6.
63
+ failures = Array(status&.failure_info) # sidekiq-pro batch status api
64
+ return if failures.empty?
65
+
66
+ SomeModel.find(options["args"].first).it_was_these_failures(failures)
67
+ end
68
+
59
69
  private
60
70
 
61
71
  attr_reader :some_model
@@ -72,6 +82,8 @@ Let's use the above example to describe some specifics of how the flow works.
72
82
  2. It does some initial work in `SomeInitialSetupJob`, which blocks the rest of the workflow until it completes successfully.
73
83
  3. Then it will run a `SomeParallelizableJob` for each of some number of associated models `some_related_models`. These jobs will all run parallel to each other independently.
74
84
  4. Finally, after all of the parallel jobs from #3 complete successfully, `SomeFinalizationJob` will run and then after it finishes the orchestration will be complete.
85
+ 5. If it ran into an error at some point, `on_death` will get fired with the first failure. (please use `sidekiq-pro` of at least `5.2.1` for this feature)
86
+ 6. It will call `on_complete` at the end of the orchestration no matter what, this is the place to collect all the failures and persist them somewhere.
75
87
 
76
88
  **Note** - it's fine to add utility methods and `attr_accessor`s to keep the code tidy and maintainable.
77
89
 
@@ -105,26 +117,28 @@ The crux of the problem was that each job was highly coupled to its position in
105
117
 
106
118
  ## Versioning
107
119
 
108
- This project follows semantic versioning. At time of writing it is sitting at 0.0.1 until its integration with the application it was extracted from is confirmed to be stable. Once confirmed it will be started off at 1.0.0 as it has otherwise been used in a production system already for some time.
120
+ This project follows semantic versioning. See https://semver.org/ for details.
109
121
 
110
122
  ## Development
111
123
 
112
124
  After checking out the repo, run `bin/setup` to install dependencies. Note that this depends on `sidekiq-pro` which requires a [commercial license](https://sidekiq.org/products/pro.html) to install and use.
113
125
 
114
- Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
126
+ Then, run `rake ci:specs` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
127
+
128
+ To install this gem onto your local machine, run `bundle exec rake install`.
115
129
 
116
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
130
+ To get a new release cut, please either open a PR or an issue with your ask with as much context as possible and someone from Doximity will consider your request. If it makes sense for the direction of the project we'll get it done and inform you of when a release has been made available with the changes.
117
131
 
118
- TODO: Update this section with more specific/appropriate instructions once this is a public repository.
132
+ For internal employees: consult the company wiki on the current standard process for conducting releases for our public gems.
119
133
 
120
134
  ## Contributing
121
135
 
122
- 1. Fork it
123
- 2. Create your feature branch (`git checkout -b my-new-feature`)
124
- 3. Commit your changes (`git commit -am 'Add some feature'`)
125
- 4. Push to the branch (`git push origin my-new-feature`)
126
- 5. Create a new Pull Request
127
- 6. Sign the CLA if you haven't yet. See CONTRIBUTING.md
136
+ 1. See [CONTRIBUTING.md](./CONTRIBUTING.md)
137
+ 2. Fork it
138
+ 3. Create your feature branch (`git checkout -b my-new-feature`)
139
+ 4. Commit your changes (`git commit -am 'Add some feature'`)
140
+ 5. Push to the branch (`git push origin my-new-feature`)
141
+ 6. Create a new Pull Request
128
142
 
129
143
  ## License
130
144
 
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This job serves two purposes:
4
+ # * TODO: It provides a convenient way to track top-level orchestration batches
5
+ # * The top-level orchestration batch would otherwise be empty (aside from
6
+ # child-batches) and all sidekiq-pro batches must have at least 1 job
7
+
8
+ module Simplekiq
9
+ class BatchTrackerJob
10
+ include Sidekiq::Job
11
+
12
+ def perform(klass_name, bid, args)
13
+ # In the future, this will likely surface the toplevel batch to a callback method on the
14
+ # orchestration job. We're holding off on this until we have time to design a comprehensive
15
+ # plan for providing simplekiq-wide instrumentation, ideally while being backwards compatible
16
+ # for in-flight orchestrations.
17
+
18
+ # For now, it's just satisfying the all-batches-must-have-jobs limitation in sidekiq-pro
19
+ # described at the head of the file.
20
+ end
21
+ end
22
+ end
@@ -61,7 +61,7 @@
61
61
 
62
62
  module Simplekiq
63
63
  module BatchingJob
64
- include Sidekiq::Worker
64
+ include Sidekiq::Job
65
65
 
66
66
  BATCH_CLASS_NAME = "SimplekiqBatch"
67
67
 
@@ -93,10 +93,10 @@ module Simplekiq
93
93
  # to toggle the behavior on and off.
94
94
  if batch
95
95
  batch.jobs do
96
- handle_batches(args)
96
+ flush_batches(args)
97
97
  end
98
98
  else
99
- handle_batches(args)
99
+ flush_batches(args)
100
100
  end
101
101
  end
102
102
 
@@ -104,24 +104,11 @@ module Simplekiq
104
104
 
105
105
  attr_accessor :batches
106
106
 
107
- def handle_batches(args)
108
- if !batches.empty?
109
- flush_batches(args)
110
- else
111
- # Empty batches with no jobs will never invoke callbacks, so handle
112
- # that case by immediately manually invoking :complete & :success.
113
- on_complete(nil, {"args" => args}) if respond_to?(:on_complete)
114
- on_success(nil, {"args" => args}) if respond_to?(:on_success)
115
- end
116
- end
117
-
118
107
  def flush_batches(args)
119
108
  batch_job_class = self.class.const_get(BATCH_CLASS_NAME)
120
109
  sidekiq_batch.description ||= "Simplekiq Batch Jobs for #{self.class.name}, args: #{args}"
121
110
 
122
- sidekiq_batch.on("death", self.class, "args" => args) if respond_to?(:on_death)
123
- sidekiq_batch.on("complete", self.class, "args" => args) if respond_to?(:on_complete)
124
- sidekiq_batch.on("success", self.class, "args" => args) if respond_to?(:on_success)
111
+ Simplekiq.auto_define_callbacks(sidekiq_batch, args: args, job: self)
125
112
 
126
113
  sidekiq_batch.jobs do
127
114
  batches.each do |job_args|
@@ -146,7 +133,7 @@ module Simplekiq
146
133
  end
147
134
 
148
135
  class BaseBatch
149
- include Sidekiq::Worker
136
+ include Sidekiq::Job
150
137
 
151
138
  def perform(*args)
152
139
  module_parent_of_class.new.perform_batch(*args)
@@ -156,7 +143,7 @@ module Simplekiq
156
143
 
157
144
  def module_parent_of_class
158
145
  # Borrowed from https://apidock.com/rails/Module/module_parent_name
159
- parent_name = self.class.name =~ /::[^:]+\Z/ ? $`.freeze : nil
146
+ parent_name = (self.class.name =~ /::[^:]+\Z/) ? $`.freeze : nil
160
147
  parent_name ? Object.const_get(parent_name) : Object
161
148
  end
162
149
  end
@@ -21,10 +21,6 @@ module Simplekiq
21
21
  serial_workflow
22
22
  end
23
23
 
24
- def execute(parent_batch)
25
- OrchestrationExecutor.execute(workflow: serialized_workflow, parent_batch: parent_batch)
26
- end
27
-
28
24
  def serialized_workflow
29
25
  @serialized_workflow ||= serial_workflow.map do |step|
30
26
  case step[0]
@@ -2,45 +2,45 @@
2
2
 
3
3
  module Simplekiq
4
4
  class OrchestrationExecutor
5
- def self.execute(workflow:, parent_batch:)
6
- new.run_step(parent_batch, workflow, 0)
7
- end
5
+ def self.execute(args:, job:, workflow:)
6
+ orchestration_batch = Sidekiq::Batch.new
7
+ orchestration_batch.description = "#{job.class.name} Simplekiq orchestration"
8
+ Simplekiq.auto_define_callbacks(orchestration_batch, args: args, job: job)
8
9
 
9
- def run_step(parent_batch, workflow, step)
10
- return if workflow.empty?
11
-
12
- nest_under(parent_batch) do
13
- *jobs = workflow.at(step)
14
- sidekiq_batch = Sidekiq::Batch.new
15
- sidekiq_batch.on(
16
- :success,
17
- self.class,
18
- "orchestration_workflow" => workflow, "step" => step + 1
19
- )
20
-
21
- sidekiq_batch.jobs do
22
- jobs.each do |job|
23
- Object.const_get(job["klass"]).perform_async(*job["args"])
24
- end
25
- end
10
+ orchestration_batch.jobs do
11
+ Simplekiq::BatchTrackerJob.perform_async(job.class.name, orchestration_batch.bid, args)
12
+
13
+ new.run_step(workflow, 0) unless workflow.empty?
26
14
  end
27
15
  end
28
16
 
29
- def nest_under(parent_batch)
30
- if parent_batch
31
- parent_batch.jobs do
32
- yield
17
+ def run_step(workflow, step)
18
+ *jobs = workflow.at(step)
19
+ # This will never be empty because Orchestration#serialized_workflow skips inserting
20
+ # a new step for in_parallel if there were no inner jobs specified.
21
+
22
+ next_step = step + 1
23
+ step_batch = Sidekiq::Batch.new
24
+ step_batch.description = "Simplekiq orchestrated step #{next_step}"
25
+ step_batch.on(
26
+ "success",
27
+ self.class,
28
+ {"orchestration_workflow" => workflow, "step" => next_step}
29
+ )
30
+
31
+ step_batch.jobs do
32
+ jobs.each do |job|
33
+ Object.const_get(job["klass"]).perform_async(*job["args"])
33
34
  end
34
- else
35
- yield
36
35
  end
37
36
  end
38
37
 
39
38
  def on_success(status, options)
40
39
  return if options["step"] == options["orchestration_workflow"].length
41
40
 
42
- parent_batch = Sidekiq::Batch.new(status.parent_bid)
43
- run_step(parent_batch, options["orchestration_workflow"], options["step"])
41
+ Sidekiq::Batch.new(status.parent_bid).jobs do
42
+ run_step(options["orchestration_workflow"], options["step"])
43
+ end
44
44
  end
45
45
  end
46
46
  end
@@ -4,14 +4,22 @@ require "forwardable"
4
4
 
5
5
  module Simplekiq
6
6
  module OrchestrationJob
7
- include Sidekiq::Worker
7
+ include Sidekiq::Job
8
8
 
9
9
  extend Forwardable
10
+
10
11
  def_delegators :orchestration, :run, :in_parallel
11
12
 
12
13
  def perform(*args)
13
14
  perform_orchestration(*args)
14
- orchestration.execute(batch)
15
+
16
+ # This makes it so that if there is a parent batch which this orchestration is run under, then the layered batches will be:
17
+ # parent_batch( orchestration_batch( batch_of_first_step_of_the_orchestration ) )
18
+ # If there is no parent batch, then it will simply be:
19
+ # orchestration_batch( batch_of_first_step_of_the_orchestration )
20
+ conditionally_within_parent_batch do
21
+ OrchestrationExecutor.execute(args: args, job: self, workflow: orchestration.serialized_workflow)
22
+ end
15
23
  end
16
24
 
17
25
  def workflow_plan(*args)
@@ -21,6 +29,16 @@ module Simplekiq
21
29
 
22
30
  private
23
31
 
32
+ def conditionally_within_parent_batch
33
+ if batch
34
+ batch.jobs do
35
+ yield
36
+ end
37
+ else
38
+ yield
39
+ end
40
+ end
41
+
24
42
  def orchestration
25
43
  @orchestration ||= Orchestration.new
26
44
  end
@@ -1,3 +1,3 @@
1
1
  module Simplekiq
2
- VERSION = "0.0.3"
2
+ VERSION = "1.0.0"
3
3
  end
data/lib/simplekiq.rb CHANGED
@@ -1,14 +1,20 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "sidekiq"
4
-
5
- # NB: You must explicitly require sidekiq-ent in your app!
6
- # require "sidekiq-ent"
4
+ require "sidekiq-pro"
7
5
 
8
6
  require "simplekiq/orchestration_executor"
9
7
  require "simplekiq/orchestration"
10
8
  require "simplekiq/orchestration_job"
11
9
  require "simplekiq/batching_job"
10
+ require "simplekiq/batch_tracker_job"
12
11
 
13
12
  module Simplekiq
13
+ class << self
14
+ def auto_define_callbacks(batch, args:, job:)
15
+ batch.on("death", job.class, "args" => args) if job.respond_to?(:on_death)
16
+ batch.on("complete", job.class, "args" => args) if job.respond_to?(:on_complete)
17
+ batch.on("success", job.class, "args" => args) if job.respond_to?(:on_success)
18
+ end
19
+ end
14
20
  end
data/simplekiq.gemspec CHANGED
@@ -29,10 +29,6 @@ Gem::Specification.new do |spec|
29
29
  spec.add_development_dependency "pry"
30
30
  spec.add_development_dependency "standard"
31
31
 
32
- spec.add_dependency "sidekiq", "~> 5.2.9"
33
-
34
- # Can't define this explicitly because it would be inappropriate to vendor this
35
- # pay-to-use library into the gem and it is not available on rubygems and
36
- # this otherwise interferes with our publishing process.
37
- # spec.add_dependency "sidekiq-pro", "~> 5.0.0"
32
+ spec.add_dependency "sidekiq", ">= 7.1", "< 9.0"
33
+ spec.add_dependency "sidekiq-pro", ">= 7.1", "< 9.0"
38
34
  end
data/tasks/ci.rake CHANGED
@@ -6,7 +6,7 @@ namespace :ci do
6
6
  reports = "tmp/test-results/rspec"
7
7
  sh "mkdir -p #{reports}"
8
8
  sh "bundle exec rspec ./spec " \
9
- "--format progress "\
9
+ "--format progress " \
10
10
  "--format RspecJunitFormatter " \
11
11
  "-o #{reports}/results.xml"
12
12
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simplekiq
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jack Noble
8
8
  - John Wilkinson
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-04-20 00:00:00.000000000 Z
12
+ date: 2025-11-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -85,16 +85,42 @@ dependencies:
85
85
  name: sidekiq
86
86
  requirement: !ruby/object:Gem::Requirement
87
87
  requirements:
88
- - - "~>"
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '7.1'
91
+ - - "<"
89
92
  - !ruby/object:Gem::Version
90
- version: 5.2.9
93
+ version: '9.0'
91
94
  type: :runtime
92
95
  prerelease: false
93
96
  version_requirements: !ruby/object:Gem::Requirement
94
97
  requirements:
95
- - - "~>"
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: '7.1'
101
+ - - "<"
102
+ - !ruby/object:Gem::Version
103
+ version: '9.0'
104
+ - !ruby/object:Gem::Dependency
105
+ name: sidekiq-pro
106
+ requirement: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '7.1'
111
+ - - "<"
112
+ - !ruby/object:Gem::Version
113
+ version: '9.0'
114
+ type: :runtime
115
+ prerelease: false
116
+ version_requirements: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - ">="
119
+ - !ruby/object:Gem::Version
120
+ version: '7.1'
121
+ - - "<"
96
122
  - !ruby/object:Gem::Version
97
- version: 5.2.9
123
+ version: '9.0'
98
124
  description: Provides tools for representing long chains of parallel and serial jobs
99
125
  in a flat, simple way.
100
126
  email:
@@ -117,6 +143,7 @@ files:
117
143
  - bin/console
118
144
  - bin/setup
119
145
  - lib/simplekiq.rb
146
+ - lib/simplekiq/batch_tracker_job.rb
120
147
  - lib/simplekiq/batching_job.rb
121
148
  - lib/simplekiq/orchestration.rb
122
149
  - lib/simplekiq/orchestration_executor.rb
@@ -124,41 +151,13 @@ files:
124
151
  - lib/simplekiq/version.rb
125
152
  - simplekiq.gemspec
126
153
  - tasks/ci.rake
127
- - vendor/cache/ast-2.4.2.gem
128
- - vendor/cache/coderay-1.1.3.gem
129
- - vendor/cache/connection_pool-2.2.5.gem
130
- - vendor/cache/diff-lcs-1.5.0.gem
131
- - vendor/cache/method_source-1.0.0.gem
132
- - vendor/cache/parallel-1.22.1.gem
133
- - vendor/cache/parser-3.1.1.0.gem
134
- - vendor/cache/pry-0.13.1.gem
135
- - vendor/cache/rack-2.2.3.gem
136
- - vendor/cache/rack-protection-2.2.0.gem
137
- - vendor/cache/rainbow-3.1.1.gem
138
- - vendor/cache/rake-12.3.3.gem
139
- - vendor/cache/redis-4.5.1.gem
140
- - vendor/cache/regexp_parser-2.2.1.gem
141
- - vendor/cache/rexml-3.2.5.gem
142
- - vendor/cache/rspec-3.10.0.gem
143
- - vendor/cache/rspec-core-3.10.1.gem
144
- - vendor/cache/rspec-expectations-3.10.1.gem
145
- - vendor/cache/rspec-mocks-3.10.2.gem
146
- - vendor/cache/rspec-support-3.10.3.gem
147
- - vendor/cache/rspec_junit_formatter-0.5.1.gem
148
- - vendor/cache/rubocop-1.26.1.gem
149
- - vendor/cache/rubocop-ast-1.16.0.gem
150
- - vendor/cache/rubocop-performance-1.13.3.gem
151
- - vendor/cache/ruby-progressbar-1.11.0.gem
152
- - vendor/cache/sidekiq-5.2.10.gem
153
- - vendor/cache/standard-1.9.1.gem
154
- - vendor/cache/unicode-display_width-2.1.0.gem
155
154
  homepage: https://github.com/doximity/simplekiq
156
155
  licenses:
157
156
  - APACHE-2.0
158
157
  metadata:
159
158
  homepage_uri: https://github.com/doximity/simplekiq
160
159
  source_code_uri: https://github.com/doximity/simplekiq
161
- post_install_message:
160
+ post_install_message:
162
161
  rdoc_options: []
163
162
  require_paths:
164
163
  - lib
@@ -173,8 +172,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
173
172
  - !ruby/object:Gem::Version
174
173
  version: '0'
175
174
  requirements: []
176
- rubygems_version: 3.3.11
177
- signing_key:
175
+ rubygems_version: 3.3.26
176
+ signing_key:
178
177
  specification_version: 4
179
178
  summary: Sidekiq-based workflow orchestration library
180
179
  test_files: []
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file