delayed_job_groups_plugin 0.1.2 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
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