delayed_job_groups_plugin 0.1.2 → 0.4.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: fcacb139c1ffff95f731afd57e50c3a32efc5952
4
- data.tar.gz: d2693d1526a5e8bd6a00d228deee56bf6f7dfd71
2
+ SHA256:
3
+ metadata.gz: c0754808400681b63e14fc299849af001fd1657bf492fdd56947e00519eaba89
4
+ data.tar.gz: c30c2bde41bcb5a9c374cdb3bab3c9c75ebf7ea5d50e63696fba296600f13985
5
5
  SHA512:
6
- metadata.gz: 9de8e698308f1db0c13873b4d72cfe5497e58252e36140a22a4f36db4dd863df85eb947feb3e7cd4fc9405eba47a244b43517208ab24cb868afd94cfc50a440d
7
- data.tar.gz: 50abccef280bc1a0342e3d4bae3a1bfed10f3214f55ccced57424fc9d836ee31d4d887b5a4220db4e413d301f63d42b75ea4d176b950ff498405849106cbe36c
6
+ metadata.gz: 53c683f2825c99da19e8307c7a1d8b42f91dcad430f77a2f3fcd2cb90cef2ab5e1a2a4693166da75f3cc51e72a614688ae92edbdddcd39626c3b4bdf95a09722
7
+ data.tar.gz: a6a273708961cbd9922382400c441c97f570768283db311c129120f27cfb414b1265227667895e65d2385a194f2bfc05b1e8d09f1489341fa85dc76309a10cda
data/.gitignore CHANGED
@@ -18,3 +18,4 @@ spec/reports
18
18
  test/tmp
19
19
  test/version_tmp
20
20
  tmp
21
+ *.gemfile.lock
data/.rspec CHANGED
@@ -1,2 +1,3 @@
1
1
  --color
2
2
  --format progress
3
+ --require spec_helper
@@ -0,0 +1,8 @@
1
+ inherit_gem:
2
+ salsify_rubocop: conf/rubocop.yml
3
+
4
+ AllCops:
5
+ TargetRubyVersion: 2.3
6
+
7
+ Style/FrozenStringLiteralComment:
8
+ Enabled: true
@@ -1,20 +1,21 @@
1
1
  language: ruby
2
- env:
3
- - RAILS_VERSION="~> 3.2.21" JRUBY_OPTS="$JRUBY_OPTS --debug"
4
- - RAILS_VERSION="~> 4.0.13" JRUBY_OPTS="$JRUBY_OPTS --debug"
5
- - RAILS_VERSION="~> 4.1.9" JRUBY_OPTS="$JRUBY_OPTS --debug"
6
- - RAILS_VERSION="~> 4.2.0" JRUBY_OPTS="$JRUBY_OPTS --debug"
2
+ sudo: false
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
8
+ - gemfiles/rails_6.0.gemfile
7
9
  rvm:
8
- - 1.9.3
9
- - 2.0.0
10
- - 2.1.0
11
- - 2.2.0
12
- - jruby-19mode
10
+ - 2.3.8
11
+ - 2.4.5
12
+ - 2.5.3
13
+ script:
14
+ - bundle exec rspec
15
+ - bundle exec rubocop
13
16
  matrix:
14
17
  exclude:
15
- # See https://github.com/salsify/goldiloader/issues/22
16
- - rvm: jruby-19mode
17
- env: RAILS_VERSION="~> 4.2.0" JRUBY_OPTS="$JRUBY_OPTS --debug"
18
- # See https://github.com/rails/rails/pull/18306
19
- - rvm: 2.2.0
20
- env: RAILS_VERSION="~> 3.2.21" JRUBY_OPTS="$JRUBY_OPTS --debug"
18
+ - rvm: 2.3.8
19
+ gemfile: gemfiles/rails_6.0.gemfile
20
+ - rvm: 2.4.5
21
+ gemfile: gemfiles/rails_6.0.gemfile
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ appraise 'rails-4.2' do
4
+ gem 'sqlite3', '~> 1.3.6'
5
+ gem 'activerecord', '4.2.10'
6
+ gem 'activesupport', '4.2.10'
7
+ end
8
+
9
+ appraise 'rails-5.0' do
10
+ gem 'sqlite3', '~> 1.3.6'
11
+ gem 'activerecord', '5.0.7'
12
+ gem 'activesupport', '5.0.7'
13
+ end
14
+
15
+ appraise 'rails-5.1' do
16
+ gem 'sqlite3', '~> 1.3.6'
17
+ gem 'activerecord', '5.1.6'
18
+ gem 'activesupport', '5.1.6'
19
+ end
20
+
21
+ appraise 'rails-5.2' do
22
+ gem 'sqlite3', '~> 1.3.6'
23
+ gem 'activerecord', '5.2.1 '
24
+ gem 'activesupport', '5.2.1 '
25
+ end
26
+
27
+ appraise 'rails-6.0' do
28
+ gem 'activerecord', '6.0.3'
29
+ gem 'activesupport', '6.0.3'
30
+ end
@@ -1,9 +1,29 @@
1
1
  # Changelog
2
2
 
3
- ### 0.1.3 (Unreleased)
3
+ ### 0.4.2
4
+ * Add support for Rails 6.0.
5
+
6
+ ### 0.4.1
7
+ * Bugfix for `on_completion_job` and `on_cancellation_job` YAML serialization
8
+
9
+ ### 0.4.0
10
+ * Drop support for Ruby 2.0, 2.1 and 2.2.
11
+ * Add support for Ruby 2.5.
12
+ * Drop support for Rails < 4.2.
13
+ * Add support for Rails 5.2
14
+
15
+ ### 0.3.0
16
+ * Drop support for Ruby 1.9 and 2.0.
17
+
18
+ ### 0.2.0
19
+ * Change supported delayed job version
20
+ * Clean up lifecycle management in plugin
21
+
22
+ ### 0.1.3
23
+ * Change supported rails version.
4
24
 
5
25
  ### 0.1.2
6
26
  * Add configuration option to allow failed jobs not to cancel a group.
7
27
 
8
- ### 0.1.1
28
+ ### 0.1.1
9
29
  * Update the run_at for all jobs in a JobGroup when it's unblocked.
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  gemspec
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 3.2 and 4.0.
111
- * Tested with MRI 1.9.3, 2.0.0, 2.1.0 and JRuby in 1.9 mode.
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
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bundler/setup'
2
4
  Bundler::GemHelper.install_tasks
3
5
 
@@ -1,4 +1,6 @@
1
- # encoding: UTF-8
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,33 +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 = %q{Aggregates Delayed::Job jobs into groups with group level management and lifecycle callbacks}
12
- spec.summary = %q{Delayed::Job job groups plugin}
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.add_dependency 'delayed_job', '>= 3.0'
21
- spec.add_dependency 'delayed_job_active_record', '>= 0.4'
22
+ spec.required_ruby_version = '>= 2.3'
23
+
24
+ spec.add_dependency 'delayed_job', '>= 4.1'
25
+ spec.add_dependency 'delayed_job_active_record', '>= 4.1'
22
26
 
23
27
  spec.post_install_message = 'See https://github.com/salsify/delayed_job_groups_plugin#installation for upgrade/installation notes.'
24
28
 
25
- spec.add_development_dependency 'activerecord', ENV.fetch('RAILS_VERSION', ['>= 3.2', '< 4.1'])
29
+ spec.add_development_dependency 'appraisal'
30
+ spec.add_dependency 'activerecord', '>= 4.2', '< 6.1'
26
31
  spec.add_development_dependency 'coveralls'
27
32
  spec.add_development_dependency 'database_cleaner', '>= 1.2'
33
+ spec.add_development_dependency 'mime-types'
28
34
  spec.add_development_dependency 'rake'
29
- spec.add_development_dependency 'rspec', '>= 2.14', '< 2.99'
30
- spec.add_development_dependency 'simplecov', '~> 0.7.1'
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'
31
40
  spec.add_development_dependency 'timecop'
32
-
33
- if RUBY_PLATFORM == 'java'
34
- spec.add_development_dependency 'jdbc-sqlite3'
35
- spec.add_development_dependency 'activerecord-jdbcsqlite3-adapter'
36
- else
37
- spec.add_development_dependency 'sqlite3'
38
- end
39
-
40
41
  end
@@ -0,0 +1,9 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "sqlite3", "~> 1.3.6"
6
+ gem "activerecord", "4.2.10"
7
+ gem "activesupport", "4.2.10"
8
+
9
+ gemspec path: "../"
@@ -0,0 +1,9 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "sqlite3", "~> 1.3.6"
6
+ gem "activerecord", "5.0.7"
7
+ gem "activesupport", "5.0.7"
8
+
9
+ gemspec path: "../"
@@ -0,0 +1,9 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "sqlite3", "~> 1.3.6"
6
+ gem "activerecord", "5.1.6"
7
+ gem "activesupport", "5.1.6"
8
+
9
+ gemspec path: "../"
@@ -0,0 +1,9 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "sqlite3", "~> 1.3.6"
6
+ gem "activerecord", "5.2.1 "
7
+ gem "activesupport", "5.2.1 "
8
+
9
+ gemspec path: "../"
@@ -0,0 +1,8 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "6.0.3"
6
+ gem "activesupport", "6.0.3"
7
+
8
+ gemspec path: "../"
@@ -1,4 +1,4 @@
1
- # encoding: UTF-8
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
- ::ActiveRecord::VERSION::MAJOR < 4 || defined?(::ActiveRecord::MassAssignmentSecurity)
11
+ defined?(::ActiveRecord::MassAssignmentSecurity)
12
12
  end
13
13
 
14
14
  end
@@ -1,9 +1,14 @@
1
- # encoding: UTF-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Delayed
4
4
  module JobGroups
5
5
  module JobExtensions
6
6
  extend ActiveSupport::Concern
7
+ module ReadyToRunExtension
8
+ def ready_to_run(worker_name, max_run_time)
9
+ super(worker_name, max_run_time).where(blocked: false)
10
+ end
11
+ end
7
12
 
8
13
  included do
9
14
  if Delayed::JobGroups::Compatibility.mass_assignment_security_enabled?
@@ -13,15 +18,9 @@ module Delayed
13
18
  belongs_to :job_group, class_name: 'Delayed::JobGroups::JobGroup'
14
19
 
15
20
  class << self
16
-
17
- # Patch ready_to_run to exclude blocked jobs
18
- def ready_to_run_with_blocked_filtering(worker_name, max_run_time)
19
- ready_to_run_without_blocked_filtering(worker_name, max_run_time).where(blocked: false)
20
- end
21
- alias_method_chain :ready_to_run, :blocked_filtering
21
+ prepend ReadyToRunExtension
22
22
  end
23
23
  end
24
-
25
24
  def in_job_group?
26
25
  job_group_id.present?
27
26
  end
@@ -1,4 +1,6 @@
1
- # encoding: UTF-8
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
- if ActiveRecord::VERSION::MAJOR >= 4
22
- has_many :active_jobs, -> { where(failed_at: nil) }, class_name: 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
- if ActiveRecord::VERSION::MAJOR >= 4
31
- has_many :queued_jobs, -> { where(failed_at: nil, locked_by: nil) }, class_name: Job,
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
- # encoding: UTF-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  require 'delayed_job'
4
4
  require 'set'
@@ -7,21 +7,8 @@ module Delayed
7
7
  module JobGroups
8
8
  class Plugin < Delayed::Plugin
9
9
 
10
- # Delayed job callbacks will be registered in a global Delayed::Lifecycle every time a
11
- # Delayed::Worker is created. This creates problems in test runs that create
12
- # multiple workers because we register the callbacks multiple times on the same
13
- # global Lifecycle.
14
- def self.callbacks(&block)
15
- registered_lifecycles = Set.new
16
- super do |lifecycle|
17
- if registered_lifecycles.add?(lifecycle.object_id)
18
- block.call(lifecycle)
19
- end
20
- end
21
- end
22
-
23
10
  callbacks do |lifecycle|
24
- lifecycle.before(:error) do |worker, job|
11
+ lifecycle.before(:error) do |_worker, job|
25
12
  # If the job group has been cancelled then don't let the job be retried
26
13
  if job.in_job_group? && job_group_cancelled?(job.job_group_id)
27
14
  def job.max_attempts
@@ -30,7 +17,7 @@ module Delayed
30
17
  end
31
18
  end
32
19
 
33
- lifecycle.before(:failure) do |worker, job|
20
+ lifecycle.before(:failure) do |_worker, job|
34
21
  # If a job in the job group fails, then cancel the whole job group.
35
22
  # Need to check that the job group is present since another
36
23
  # job may have concurrently cancelled it.
@@ -39,7 +26,7 @@ module Delayed
39
26
  end
40
27
  end
41
28
 
42
- lifecycle.after(:perform) do |worker, job|
29
+ lifecycle.after(:perform) do |_worker, job|
43
30
  # Make sure we only check to see if the job group is complete
44
31
  # if the job succeeded
45
32
  if job.in_job_group? && job_completed?(job)
@@ -48,8 +35,6 @@ module Delayed
48
35
  end
49
36
  end
50
37
 
51
- private
52
-
53
38
  def self.job_group_cancelled?(job_group_id)
54
39
  !JobGroup.exists?(job_group_id)
55
40
  end
@@ -62,4 +47,3 @@ module Delayed
62
47
  end
63
48
  end
64
49
  end
65
-
@@ -1,7 +1,7 @@
1
- # encoding: UTF-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Delayed
4
4
  module JobGroups
5
- VERSION = '0.1.2'
5
+ VERSION = '0.4.2'
6
6
  end
7
7
  end
@@ -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