delayed_job_groups_plugin 0.3.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.gitignore +1 -0
- data/.rspec +1 -0
- data/.rubocop.yml +8 -0
- data/.travis.yml +11 -31
- data/Appraisals +21 -0
- data/CHANGELOG.md +11 -2
- data/Gemfile +2 -0
- data/README.md +2 -2
- data/Rakefile +2 -0
- data/delayed_job_groups.gemspec +17 -20
- data/gemfiles/rails_4.2.gemfile +8 -0
- data/gemfiles/rails_5.0.gemfile +8 -0
- data/gemfiles/rails_5.1.gemfile +8 -0
- data/gemfiles/rails_5.2.gemfile +8 -0
- data/lib/delayed/job_groups/compatibility.rb +2 -2
- data/lib/delayed/job_groups/job_extensions.rb +1 -1
- data/lib/delayed/job_groups/job_group.rb +9 -17
- data/lib/delayed/job_groups/plugin.rb +4 -7
- data/lib/delayed/job_groups/version.rb +2 -2
- data/lib/delayed/job_groups/yaml_loader.rb +17 -0
- data/lib/delayed_job_groups_plugin.rb +2 -1
- data/lib/generators/delayed_job_groups_plugin/install_generator.rb +2 -2
- data/lib/generators/delayed_job_groups_plugin/templates/migration.rb +1 -1
- data/spec/db/schema.rb +2 -2
- data/spec/delayed/job_groups/job_group_spec.rb +22 -23
- data/spec/delayed/job_groups/plugin_spec.rb +79 -84
- data/spec/delayed/job_groups/yaml_loader_spec.rb +43 -0
- data/spec/spec_helper.rb +12 -12
- data/spec/support/destroyed_model.rb +3 -3
- metadata +83 -38
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 8e0fcf7a3d3099755aad28122f38afb96cec8896576cb54b47c2b4f7adfd2b94
|
|
4
|
+
data.tar.gz: 5241cc7d7365f07179896559c1aae27df4bf1e8010a49b2e0a2323f752b9efe4
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a6e7381efe91a0aa89492a58f7820e71f3c6d6c35d1e5ddaf4dd777dd63d6707f5f268587569a7da1f57dcd404df859f9980e9bbae1acffbf54c76841f0af8f1
|
|
7
|
+
data.tar.gz: '029c2dd29ed387c254f869c58295c41b446bfb42f87948e5980047ab47c2f7571fe794b65e7f9aa4d73162771d61361e67d6495f7ba4e02e754da29be0ee611e'
|
data/.gitignore
CHANGED
data/.rspec
CHANGED
data/.rubocop.yml
ADDED
data/.travis.yml
CHANGED
|
@@ -1,34 +1,14 @@
|
|
|
1
1
|
language: ruby
|
|
2
2
|
sudo: false
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
- RAILS_VERSION="~> 4.0.13"
|
|
9
|
-
- RAILS_VERSION="~> 4.1.16"
|
|
10
|
-
- RAILS_VERSION="~> 4.2.9"
|
|
11
|
-
- RAILS_VERSION="~> 5.0.6"
|
|
12
|
-
- RAILS_VERSION="~> 5.1.3"
|
|
3
|
+
gemfile:
|
|
4
|
+
- gemfiles/rails_4.2.gemfile
|
|
5
|
+
- gemfiles/rails_5.0.gemfile
|
|
6
|
+
- gemfiles/rails_5.1.gemfile
|
|
7
|
+
- gemfiles/rails_5.2.gemfile
|
|
13
8
|
rvm:
|
|
14
|
-
- 2.
|
|
15
|
-
- 2.
|
|
16
|
-
- 2.3
|
|
17
|
-
|
|
18
|
-
-
|
|
19
|
-
|
|
20
|
-
exclude:
|
|
21
|
-
- rvm: 2.1.10
|
|
22
|
-
env: RAILS_VERSION="~> 5.0.6"
|
|
23
|
-
- rvm: 2.4.2
|
|
24
|
-
env: RAILS_VERSION="~> 3.2.22.5"
|
|
25
|
-
- rvm: 2.4.2
|
|
26
|
-
env: RAILS_VERSION="~> 4.0.13"
|
|
27
|
-
- rvm: 2.4.2
|
|
28
|
-
env: RAILS_VERSION="~> 4.1.16"
|
|
29
|
-
- rvm: jruby-9.1.13.0
|
|
30
|
-
env: RAILS_VERSION="~> 5.0.6"
|
|
31
|
-
- rvm: 2.1.10
|
|
32
|
-
env: RAILS_VERSION="~> 5.1.3"
|
|
33
|
-
- rvm: jruby-9.1.13.0
|
|
34
|
-
env: RAILS_VERSION="~> 5.1.3"
|
|
9
|
+
- 2.3.8
|
|
10
|
+
- 2.4.5
|
|
11
|
+
- 2.5.3
|
|
12
|
+
script:
|
|
13
|
+
- bundle exec rspec
|
|
14
|
+
- bundle exec rubocop
|
data/Appraisals
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
appraise 'rails-4.2' do
|
|
4
|
+
gem 'activerecord', '4.2.10'
|
|
5
|
+
gem 'activesupport', '4.2.10'
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
appraise 'rails-5.0' do
|
|
9
|
+
gem 'activerecord', '5.0.7'
|
|
10
|
+
gem 'activesupport', '5.0.7'
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
appraise 'rails-5.1' do
|
|
14
|
+
gem 'activerecord', '5.1.6'
|
|
15
|
+
gem 'activesupport', '5.1.6'
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
appraise 'rails-5.2' do
|
|
19
|
+
gem 'activerecord', '5.2.1 '
|
|
20
|
+
gem 'activesupport', '5.2.1 '
|
|
21
|
+
end
|
data/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
### 0.
|
|
3
|
+
### 0.4.1
|
|
4
|
+
* Bugfix for `on_completion_job` and `on_cancellation_job` YAML serialization
|
|
5
|
+
|
|
6
|
+
### 0.4.0
|
|
7
|
+
* Drop support for Ruby 2.0, 2.1 and 2.2.
|
|
8
|
+
* Add support for Ruby 2.5.
|
|
9
|
+
* Drop support for Rails < 4.2.
|
|
10
|
+
* Add support for Rails 5.2
|
|
11
|
+
|
|
12
|
+
### 0.3.0
|
|
4
13
|
* Drop support for Ruby 1.9 and 2.0.
|
|
5
14
|
|
|
6
15
|
### 0.2.0
|
|
@@ -13,5 +22,5 @@
|
|
|
13
22
|
### 0.1.2
|
|
14
23
|
* Add configuration option to allow failed jobs not to cancel a group.
|
|
15
24
|
|
|
16
|
-
### 0.1.1
|
|
25
|
+
### 0.1.1
|
|
17
26
|
* Update the run_at for all jobs in a JobGroup when it's unblocked.
|
data/Gemfile
CHANGED
data/README.md
CHANGED
|
@@ -107,8 +107,8 @@ job_group = Delayed::JobGroups::JobGroup.create!(failure_cancels_group: false)
|
|
|
107
107
|
## Supported Platforms
|
|
108
108
|
|
|
109
109
|
* Only the Delayed Job Active Record backend is supported.
|
|
110
|
-
* Tested with Rails
|
|
111
|
-
* Tested with MRI
|
|
110
|
+
* Tested with Rails 4.2 through 5.2.
|
|
111
|
+
* Tested with MRI 2.3 through 2.5.
|
|
112
112
|
|
|
113
113
|
## Contributing
|
|
114
114
|
|
data/Rakefile
CHANGED
data/delayed_job_groups.gemspec
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
2
4
|
lib = File.expand_path('../lib', __FILE__)
|
|
3
5
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
6
|
require 'delayed/job_groups/version'
|
|
@@ -8,37 +10,32 @@ Gem::Specification.new do |spec|
|
|
|
8
10
|
spec.version = Delayed::JobGroups::VERSION
|
|
9
11
|
spec.authors = ['Joel Turkel', 'Randy Burkes']
|
|
10
12
|
spec.email = ['jturkel@salsify.com', 'rlburkes@gmail.com']
|
|
11
|
-
spec.description =
|
|
12
|
-
spec.summary =
|
|
13
|
+
spec.description = 'Aggregates Delayed::Job jobs into groups with group level management and lifecycle callbacks'
|
|
14
|
+
spec.summary = 'Delayed::Job job groups plugin'
|
|
13
15
|
spec.homepage = 'https://github.com/salsify/delayed_job_groups_plugin'
|
|
14
16
|
spec.license = 'MIT'
|
|
15
17
|
|
|
16
|
-
spec.files = `git ls-files`.split(
|
|
18
|
+
spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
|
17
19
|
spec.test_files = Dir.glob('spec/**/*')
|
|
18
20
|
spec.require_paths = ['lib']
|
|
19
21
|
|
|
20
|
-
spec.required_ruby_version = '>= 2.
|
|
22
|
+
spec.required_ruby_version = '>= 2.3'
|
|
21
23
|
|
|
22
24
|
spec.add_dependency 'delayed_job', '>= 4.1'
|
|
23
|
-
spec.add_dependency 'delayed_job_active_record', '>=
|
|
25
|
+
spec.add_dependency 'delayed_job_active_record', '>= 4.1'
|
|
24
26
|
|
|
25
27
|
spec.post_install_message = 'See https://github.com/salsify/delayed_job_groups_plugin#installation for upgrade/installation notes.'
|
|
26
28
|
|
|
27
|
-
spec.add_development_dependency '
|
|
29
|
+
spec.add_development_dependency 'appraisal'
|
|
30
|
+
spec.add_dependency 'activerecord', '>= 4.2', '< 5.3'
|
|
28
31
|
spec.add_development_dependency 'coveralls'
|
|
29
32
|
spec.add_development_dependency 'database_cleaner', '>= 1.2'
|
|
30
|
-
|
|
31
|
-
spec.add_development_dependency 'rake'
|
|
32
|
-
spec.add_development_dependency 'rspec', '
|
|
33
|
-
spec.add_development_dependency '
|
|
33
|
+
spec.add_development_dependency 'mime-types'
|
|
34
|
+
spec.add_development_dependency 'rake'
|
|
35
|
+
spec.add_development_dependency 'rspec', '~> 3'
|
|
36
|
+
spec.add_development_dependency 'rspec-its'
|
|
37
|
+
spec.add_development_dependency 'salsify_rubocop', '0.52.1.1'
|
|
38
|
+
spec.add_development_dependency 'simplecov'
|
|
39
|
+
spec.add_development_dependency 'sqlite3'
|
|
34
40
|
spec.add_development_dependency 'timecop'
|
|
35
|
-
spec.add_development_dependency 'mime-types', '~> 2'
|
|
36
|
-
|
|
37
|
-
if RUBY_PLATFORM == 'java'
|
|
38
|
-
spec.add_development_dependency 'jdbc-sqlite3'
|
|
39
|
-
spec.add_development_dependency 'activerecord-jdbcsqlite3-adapter'
|
|
40
|
-
else
|
|
41
|
-
spec.add_development_dependency 'sqlite3'
|
|
42
|
-
end
|
|
43
|
-
|
|
44
41
|
end
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require 'active_support/version'
|
|
4
4
|
require 'active_record/version'
|
|
@@ -8,7 +8,7 @@ module Delayed
|
|
|
8
8
|
module Compatibility
|
|
9
9
|
|
|
10
10
|
def self.mass_assignment_security_enabled?
|
|
11
|
-
|
|
11
|
+
defined?(::ActiveRecord::MassAssignmentSecurity)
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
end
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'yaml_loader'
|
|
2
4
|
|
|
3
5
|
module Delayed
|
|
4
6
|
module JobGroups
|
|
@@ -11,29 +13,19 @@ module Delayed
|
|
|
11
13
|
:on_cancellation_job_options, :failure_cancels_group
|
|
12
14
|
end
|
|
13
15
|
|
|
14
|
-
serialize :on_completion_job
|
|
16
|
+
serialize :on_completion_job, Delayed::JobGroups::YamlLoader
|
|
15
17
|
serialize :on_completion_job_options, Hash
|
|
16
|
-
serialize :on_cancellation_job
|
|
18
|
+
serialize :on_cancellation_job, Delayed::JobGroups::YamlLoader
|
|
17
19
|
serialize :on_cancellation_job_options, Hash
|
|
18
20
|
|
|
19
21
|
validates :queueing_complete, :blocked, :failure_cancels_group, inclusion: [true, false]
|
|
20
22
|
|
|
21
|
-
|
|
22
|
-
has_many :active_jobs, -> { where(failed_at: nil) }, class_name: '::Delayed::Job'
|
|
23
|
-
else
|
|
24
|
-
has_many :active_jobs, class_name: Job, conditions: {failed_at: nil}
|
|
25
|
-
end
|
|
26
|
-
|
|
23
|
+
has_many :active_jobs, -> { where(failed_at: nil) }, class_name: '::Delayed::Job'
|
|
27
24
|
|
|
28
25
|
# Only delete dependent jobs that are unlocked so we can determine if there are in-flight jobs
|
|
29
26
|
# for canceled job groups
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
dependent: :delete_all
|
|
33
|
-
else
|
|
34
|
-
has_many :queued_jobs, class_name: Job, conditions: {failed_at: nil, locked_by: nil},
|
|
35
|
-
dependent: :delete_all
|
|
36
|
-
end
|
|
27
|
+
has_many :queued_jobs, -> { where(failed_at: nil, locked_by: nil) }, class_name: '::Delayed::Job',
|
|
28
|
+
dependent: :delete_all
|
|
37
29
|
|
|
38
30
|
def mark_queueing_complete
|
|
39
31
|
with_lock do
|
|
@@ -78,7 +70,7 @@ module Delayed
|
|
|
78
70
|
end
|
|
79
71
|
end
|
|
80
72
|
|
|
81
|
-
def self.has_pending_jobs?(job_group_ids)
|
|
73
|
+
def self.has_pending_jobs?(job_group_ids) # rubocop:disable Naming/PredicateName
|
|
82
74
|
job_group_ids = Array(job_group_ids)
|
|
83
75
|
return false if job_group_ids.empty?
|
|
84
76
|
Delayed::Job.where(job_group_id: job_group_ids, failed_at: nil).exists?
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require 'delayed_job'
|
|
4
4
|
require 'set'
|
|
@@ -8,7 +8,7 @@ module Delayed
|
|
|
8
8
|
class Plugin < Delayed::Plugin
|
|
9
9
|
|
|
10
10
|
callbacks do |lifecycle|
|
|
11
|
-
lifecycle.before(:error) do |
|
|
11
|
+
lifecycle.before(:error) do |_worker, job|
|
|
12
12
|
# If the job group has been cancelled then don't let the job be retried
|
|
13
13
|
if job.in_job_group? && job_group_cancelled?(job.job_group_id)
|
|
14
14
|
def job.max_attempts
|
|
@@ -17,7 +17,7 @@ module Delayed
|
|
|
17
17
|
end
|
|
18
18
|
end
|
|
19
19
|
|
|
20
|
-
lifecycle.before(:failure) do |
|
|
20
|
+
lifecycle.before(:failure) do |_worker, job|
|
|
21
21
|
# If a job in the job group fails, then cancel the whole job group.
|
|
22
22
|
# Need to check that the job group is present since another
|
|
23
23
|
# job may have concurrently cancelled it.
|
|
@@ -26,7 +26,7 @@ module Delayed
|
|
|
26
26
|
end
|
|
27
27
|
end
|
|
28
28
|
|
|
29
|
-
lifecycle.after(:perform) do |
|
|
29
|
+
lifecycle.after(:perform) do |_worker, job|
|
|
30
30
|
# Make sure we only check to see if the job group is complete
|
|
31
31
|
# if the job succeeded
|
|
32
32
|
if job.in_job_group? && job_completed?(job)
|
|
@@ -35,8 +35,6 @@ module Delayed
|
|
|
35
35
|
end
|
|
36
36
|
end
|
|
37
37
|
|
|
38
|
-
private
|
|
39
|
-
|
|
40
38
|
def self.job_group_cancelled?(job_group_id)
|
|
41
39
|
!JobGroup.exists?(job_group_id)
|
|
42
40
|
end
|
|
@@ -49,4 +47,3 @@ module Delayed
|
|
|
49
47
|
end
|
|
50
48
|
end
|
|
51
49
|
end
|
|
52
|
-
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Delayed
|
|
4
|
+
module JobGroups
|
|
5
|
+
module YamlLoader
|
|
6
|
+
def self.load(yaml)
|
|
7
|
+
return yaml unless yaml.is_a?(String) && /^---/.match(yaml)
|
|
8
|
+
YAML.load_dj(yaml)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def self.dump(object)
|
|
12
|
+
return if object.nil?
|
|
13
|
+
YAML.dump(object)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require 'active_support'
|
|
4
4
|
require 'active_record'
|
|
@@ -8,6 +8,7 @@ require 'delayed/job_groups/compatibility'
|
|
|
8
8
|
require 'delayed/job_groups/job_extensions'
|
|
9
9
|
require 'delayed/job_groups/job_group'
|
|
10
10
|
require 'delayed/job_groups/plugin'
|
|
11
|
+
require 'delayed/job_groups/yaml_loader'
|
|
11
12
|
require 'delayed/job_groups/version'
|
|
12
13
|
|
|
13
14
|
Delayed::Backend::ActiveRecord::Job.send(:include, Delayed::JobGroups::JobExtensions)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require 'rails/generators'
|
|
4
4
|
require 'rails/generators/migration'
|
|
@@ -8,7 +8,7 @@ module DelayedJobGroupsPlugin
|
|
|
8
8
|
class InstallGenerator < Rails::Generators::Base
|
|
9
9
|
include Rails::Generators::Migration
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
source_paths << File.join(File.dirname(__FILE__), 'templates')
|
|
12
12
|
|
|
13
13
|
def create_migration_file
|
|
14
14
|
migration_template('migration.rb', 'db/migrate/create_delayed_job_groups.rb')
|
data/spec/db/schema.rb
CHANGED