delayed_job_active_record 4.0.2 → 4.0.3

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
2
  SHA1:
3
- metadata.gz: 0ba9b64dfebf36a3cc8248ff10fff63af3a8b611
4
- data.tar.gz: 506aba7854d7c39aa711c54e38c7a87e2fd7c00d
3
+ metadata.gz: cae84bcf8f0ca3be4cb937d76739e0688be8df1a
4
+ data.tar.gz: 72c33f816f915538d7c2139ed0634766da0a6b06
5
5
  SHA512:
6
- metadata.gz: 7f1b5ad0fa88e075b988d4234654cfdbc0e63e8a32344d8cb1824ef7562f88b1aa7ad63952e3176df823daac164fda2bf34692735062961cb59896d10f0dec72
7
- data.tar.gz: a4621ce576f0d7fb0458ccd3aa396ad79a5f5bd7ef85440c6aead1fcb8b6b11d11bc5610042b7da72f909a6fd5efeae0c1676427a80233d1d66cdc88a0f273e2
6
+ metadata.gz: 22fb9893fd6b9e10769317bc1bb65c76230153f7216d5fa3947db0b64cfa91c7069eb35f229398d75fdf4de4d63db6740d1d18fb34274d3aa35f190a370d95d7
7
+ data.tar.gz: 8b80ec66cba3eb33baf067090fd4f632eda9273e10e156bba345209c0d48edad9399cbf62cc941090f919906addb65473bf85267b072fe89c7c2a62bc9b397b5
@@ -1,19 +1,14 @@
1
- # coding: utf-8
2
-
3
1
  Gem::Specification.new do |spec|
4
- spec.add_dependency 'activerecord', ['>= 3.0', '< 4.2']
5
- spec.add_dependency 'delayed_job', ['>= 3.0', '< 4.1']
6
- spec.authors = ['Brian Ryckbost', 'Matt Griffin', 'Erik Michaels-Ober']
7
- spec.description = 'ActiveRecord backend for Delayed::Job, originally authored by Tobias Lütke'
8
- spec.email = ['bryckbost@gmail.com', 'matt@griffinonline.org', 'sferik@gmail.com']
9
- spec.files = %w[CONTRIBUTING.md LICENSE.md README.md Rakefile delayed_job_active_record.gemspec]
10
- spec.files += Dir.glob('lib/**/*.rb')
11
- spec.files += Dir.glob('spec/**/*')
12
- spec.homepage = 'http://github.com/collectiveidea/delayed_job_active_record'
13
- spec.licenses = ['MIT']
14
- spec.name = 'delayed_job_active_record'
15
- spec.require_paths = ['lib']
16
- spec.summary = 'ActiveRecord backend for DelayedJob'
17
- spec.test_files = Dir.glob('spec/**/*')
18
- spec.version = '4.0.2'
2
+ spec.add_dependency "activerecord", [">= 3.0", "< 5.0"]
3
+ spec.add_dependency "delayed_job", [">= 3.0", "< 4.1"]
4
+ spec.authors = ["Brian Ryckbost", "Matt Griffin", "Erik Michaels-Ober"]
5
+ spec.description = "ActiveRecord backend for Delayed::Job, originally authored by Tobias Lütke"
6
+ spec.email = ["bryckbost@gmail.com", "matt@griffinonline.org", "sferik@gmail.com"]
7
+ spec.files = %w(CONTRIBUTING.md LICENSE.md README.md delayed_job_active_record.gemspec) + Dir["lib/**/*.rb"]
8
+ spec.homepage = "http://github.com/collectiveidea/delayed_job_active_record"
9
+ spec.licenses = ["MIT"]
10
+ spec.name = "delayed_job_active_record"
11
+ spec.require_paths = ["lib"]
12
+ spec.summary = "ActiveRecord backend for DelayedJob"
13
+ spec.version = "4.0.3"
19
14
  end
@@ -1,4 +1,4 @@
1
- require 'active_record/version'
1
+ require "active_record/version"
2
2
  module Delayed
3
3
  module Backend
4
4
  module ActiveRecord
@@ -12,7 +12,7 @@ module Delayed
12
12
  :failed_at, :locked_at, :locked_by, :handler
13
13
  end
14
14
 
15
- scope :by_priority, lambda { order('priority ASC, run_at ASC') }
15
+ scope :by_priority, lambda { order("priority ASC, run_at ASC") }
16
16
 
17
17
  before_save :set_default_run_at
18
18
 
@@ -24,7 +24,7 @@ module Delayed
24
24
  set_delayed_job_table_name
25
25
 
26
26
  def self.ready_to_run(worker_name, max_run_time)
27
- where('(run_at <= ? AND (locked_at IS NULL OR locked_at < ?) OR locked_by = ?) AND failed_at IS NULL', db_time_now, db_time_now - max_run_time, worker_name)
27
+ where("(run_at <= ? AND (locked_at IS NULL OR locked_at < ?) OR locked_by = ?) AND failed_at IS NULL", db_time_now, db_time_now - max_run_time, worker_name)
28
28
  end
29
29
 
30
30
  def self.before_fork
@@ -37,7 +37,7 @@ module Delayed
37
37
 
38
38
  # When a worker is exiting, make sure we don't have any locked jobs.
39
39
  def self.clear_locks!(worker_name)
40
- where(:locked_by => worker_name).update_all(:locked_by => nil, :locked_at => nil)
40
+ where(locked_by: worker_name).update_all(locked_by: nil, locked_at: nil)
41
41
  end
42
42
 
43
43
  def self.reserve(worker, max_run_time = Worker.max_run_time) # rubocop:disable CyclomaticComplexity
@@ -45,9 +45,9 @@ module Delayed
45
45
  ready_scope = ready_to_run(worker.name, max_run_time)
46
46
 
47
47
  # scope to filter to the single next eligible job
48
- ready_scope = ready_scope.where('priority >= ?', Worker.min_priority) if Worker.min_priority
49
- ready_scope = ready_scope.where('priority <= ?', Worker.max_priority) if Worker.max_priority
50
- ready_scope = ready_scope.where(:queue => Worker.queues) if Worker.queues.any?
48
+ ready_scope = ready_scope.where("priority >= ?", Worker.min_priority) if Worker.min_priority
49
+ ready_scope = ready_scope.where("priority <= ?", Worker.max_priority) if Worker.max_priority
50
+ ready_scope = ready_scope.where(queue: Worker.queues) if Worker.queues.any?
51
51
  ready_scope = ready_scope.by_priority
52
52
 
53
53
  reserve_with_scope(ready_scope, worker, db_time_now)
@@ -56,22 +56,32 @@ module Delayed
56
56
  def self.reserve_with_scope(ready_scope, worker, now)
57
57
  # Optimizations for faster lookups on some common databases
58
58
  case connection.adapter_name
59
- when 'PostgreSQL'
59
+ when "PostgreSQL"
60
60
  # Custom SQL required for PostgreSQL because postgres does not support UPDATE...LIMIT
61
- # This locks the single record 'FOR UPDATE' in the subquery (http://www.postgresql.org/docs/9.0/static/sql-select.html#SQL-FOR-UPDATE-SHARE)
62
- # Note: active_record would attempt to generate UPDATE...LIMIT like sql for postgres if we use a .limit() filter, but it would not use
63
- # 'FOR UPDATE' and we would have many locking conflicts
61
+ # This locks the single record 'FOR UPDATE' in the subquery
62
+ # http://www.postgresql.org/docs/9.0/static/sql-select.html#SQL-FOR-UPDATE-SHARE
63
+ # Note: active_record would attempt to generate UPDATE...LIMIT like
64
+ # SQL for Postgres if we use a .limit() filter, but it would not
65
+ # use 'FOR UPDATE' and we would have many locking conflicts
64
66
  quoted_table_name = connection.quote_table_name(table_name)
65
- subquery_sql = ready_scope.limit(1).lock(true).select('id').to_sql
67
+ subquery_sql = ready_scope.limit(1).lock(true).select("id").to_sql
66
68
  reserved = find_by_sql(["UPDATE #{quoted_table_name} SET locked_at = ?, locked_by = ? WHERE id IN (#{subquery_sql}) RETURNING *", now, worker.name])
67
69
  reserved[0]
68
- when 'MySQL', 'Mysql2'
69
- # This works on MySQL and possibly some other DBs that support UPDATE...LIMIT. It uses separate queries to lock and return the job
70
- count = ready_scope.limit(1).update_all(:locked_at => now, :locked_by => worker.name)
70
+ when "MySQL", "Mysql2"
71
+ # Removing the millisecond precision from now(time object)
72
+ # MySQL 5.6.4 onwards millisecond precision exists, but the
73
+ # datetime object created doesn't have precision, so discarded
74
+ # while updating. But during the where clause, for mysql(>=5.6.4),
75
+ # it queries with precision as well. So removing the precision
76
+ now = now.change(usec: 0)
77
+ # This works on MySQL and possibly some other DBs that support
78
+ # UPDATE...LIMIT. It uses separate queries to lock and return the job
79
+ count = ready_scope.limit(1).update_all(locked_at: now, locked_by: worker.name)
71
80
  return nil if count == 0
72
- where(:locked_at => now, :locked_by => worker.name, :failed_at => nil).first
73
- when 'MSSQL', 'Teradata'
74
- # The MSSQL driver doesn't generate a limit clause when update_all is called directly
81
+ where(locked_at: now, locked_by: worker.name, failed_at: nil).first
82
+ when "MSSQL", "Teradata"
83
+ # The MSSQL driver doesn't generate a limit clause when update_all
84
+ # is called directly
75
85
  subsubquery_sql = ready_scope.limit(1).to_sql
76
86
  # select("id") doesn't generate a subquery, so force a subquery
77
87
  subquery_sql = "SELECT id FROM (#{subsubquery_sql}) AS x"
@@ -80,7 +90,7 @@ module Delayed
80
90
  count = connection.execute(sanitize_sql(sql))
81
91
  return nil if count == 0
82
92
  # MSSQL JDBC doesn't support OUTPUT INSERTED.* for returning a result set, so query locked row
83
- where(:locked_at => now, :locked_by => worker.name, :failed_at => nil).first
93
+ where(locked_at: now, locked_by: worker.name, failed_at: nil).first
84
94
  else
85
95
  reserve_with_scope_using_default_sql(ready_scope, worker, now)
86
96
  end
@@ -89,7 +99,7 @@ module Delayed
89
99
  def self.reserve_with_scope_using_default_sql(ready_scope, worker, now)
90
100
  # This is our old fashion, tried and true, but slower lookup
91
101
  ready_scope.limit(worker.read_ahead).detect do |job|
92
- count = ready_scope.where(:id => job.id).update_all(:locked_at => now, :locked_by => worker.name)
102
+ count = ready_scope.where(id: job.id).update_all(locked_at: now, locked_by: worker.name)
93
103
  count == 1 && job.reload
94
104
  end
95
105
  end
@@ -1,5 +1,5 @@
1
- require 'active_record'
2
- require 'delayed_job'
3
- require 'delayed/backend/active_record'
1
+ require "active_record"
2
+ require "delayed_job"
3
+ require "delayed/backend/active_record"
4
4
 
5
5
  Delayed::Worker.backend = :active_record
@@ -1,7 +1,7 @@
1
- require 'generators/delayed_job/delayed_job_generator'
2
- require 'generators/delayed_job/next_migration_version'
3
- require 'rails/generators/migration'
4
- require 'rails/generators/active_record'
1
+ require "generators/delayed_job/delayed_job_generator"
2
+ require "generators/delayed_job/next_migration_version"
3
+ require "rails/generators/migration"
4
+ require "rails/generators/active_record"
5
5
 
6
6
  # Extend the DelayedJobGenerator so that it creates an AR migration
7
7
  module DelayedJob
@@ -9,10 +9,10 @@ module DelayedJob
9
9
  include Rails::Generators::Migration
10
10
  extend NextMigrationVersion
11
11
 
12
- source_paths << File.join(File.dirname(__FILE__), 'templates')
12
+ source_paths << File.join(File.dirname(__FILE__), "templates")
13
13
 
14
14
  def create_migration_file
15
- migration_template 'migration.rb', 'db/migrate/create_delayed_jobs.rb'
15
+ migration_template "migration.rb", "db/migrate/create_delayed_jobs.rb"
16
16
  end
17
17
 
18
18
  def self.next_migration_number(dirname)
@@ -5,9 +5,9 @@ module DelayedJob
5
5
  def next_migration_number(dirname)
6
6
  next_migration_number = current_migration_number(dirname) + 1
7
7
  if ActiveRecord::Base.timestamped_migrations
8
- [Time.now.utc.strftime('%Y%m%d%H%M%S'), format('%.14d', next_migration_number)].max
8
+ [Time.now.utc.strftime("%Y%m%d%H%M%S"), format("%.14d", next_migration_number)].max
9
9
  else
10
- format('%.3d', next_migration_number)
10
+ format("%.3d", next_migration_number)
11
11
  end
12
12
  end
13
13
  end
@@ -1,19 +1,19 @@
1
1
  class CreateDelayedJobs < ActiveRecord::Migration
2
2
  def self.up
3
- create_table :delayed_jobs, :force => true do |table|
4
- table.integer :priority, :default => 0, :null => false # Allows some jobs to jump to the front of the queue
5
- table.integer :attempts, :default => 0, :null => false # Provides for retries, but still fail eventually.
6
- table.text :handler, :null => false # YAML-encoded string of the object that will do work
7
- table.text :last_error # reason for last failure (See Note below)
8
- table.datetime :run_at # When to run. Could be Time.zone.now for immediately, or sometime in the future.
9
- table.datetime :locked_at # Set when a client is working on this object
10
- table.datetime :failed_at # Set when all retries have failed (actually, by default, the record is deleted instead)
11
- table.string :locked_by # Who is working on this object (if locked)
12
- table.string :queue # The name of the queue this job is in
13
- table.timestamps
3
+ create_table :delayed_jobs, force: true do |table|
4
+ table.integer :priority, default: 0, null: false # Allows some jobs to jump to the front of the queue
5
+ table.integer :attempts, default: 0, null: false # Provides for retries, but still fail eventually.
6
+ table.text :handler, null: false # YAML-encoded string of the object that will do work
7
+ table.text :last_error # reason for last failure (See Note below)
8
+ table.datetime :run_at # When to run. Could be Time.zone.now for immediately, or sometime in the future.
9
+ table.datetime :locked_at # Set when a client is working on this object
10
+ table.datetime :failed_at # Set when all retries have failed (actually, by default, the record is deleted instead)
11
+ table.string :locked_by # Who is working on this object (if locked)
12
+ table.string :queue # The name of the queue this job is in
13
+ table.timestamps null: true
14
14
  end
15
15
 
16
- add_index :delayed_jobs, [:priority, :run_at], :name => 'delayed_jobs_priority'
16
+ add_index :delayed_jobs, [:priority, :run_at], name: "delayed_jobs_priority"
17
17
  end
18
18
 
19
19
  def self.down
@@ -1,7 +1,7 @@
1
- require 'generators/delayed_job/delayed_job_generator'
2
- require 'generators/delayed_job/next_migration_version'
3
- require 'rails/generators/migration'
4
- require 'rails/generators/active_record'
1
+ require "generators/delayed_job/delayed_job_generator"
2
+ require "generators/delayed_job/next_migration_version"
3
+ require "rails/generators/migration"
4
+ require "rails/generators/active_record"
5
5
 
6
6
  # Extend the DelayedJobGenerator so that it creates an AR migration
7
7
  module DelayedJob
@@ -9,10 +9,10 @@ module DelayedJob
9
9
  include Rails::Generators::Migration
10
10
  extend NextMigrationVersion
11
11
 
12
- source_paths << File.join(File.dirname(__FILE__), 'templates')
12
+ source_paths << File.join(File.dirname(__FILE__), "templates")
13
13
 
14
14
  def create_migration_file
15
- migration_template 'upgrade_migration.rb', 'db/migrate/add_queue_to_delayed_jobs.rb'
15
+ migration_template "upgrade_migration.rb", "db/migrate/add_queue_to_delayed_jobs.rb"
16
16
  end
17
17
 
18
18
  def self.next_migration_number(dirname)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: delayed_job_active_record
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.2
4
+ version: 4.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Ryckbost
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2014-08-19 00:00:00.000000000 Z
13
+ date: 2014-12-22 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activerecord
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: '3.0'
22
22
  - - "<"
23
23
  - !ruby/object:Gem::Version
24
- version: '4.2'
24
+ version: '5.0'
25
25
  type: :runtime
26
26
  prerelease: false
27
27
  version_requirements: !ruby/object:Gem::Requirement
@@ -31,7 +31,7 @@ dependencies:
31
31
  version: '3.0'
32
32
  - - "<"
33
33
  - !ruby/object:Gem::Version
34
- version: '4.2'
34
+ version: '5.0'
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: delayed_job
37
37
  requirement: !ruby/object:Gem::Requirement
@@ -65,7 +65,6 @@ files:
65
65
  - CONTRIBUTING.md
66
66
  - LICENSE.md
67
67
  - README.md
68
- - Rakefile
69
68
  - delayed_job_active_record.gemspec
70
69
  - lib/delayed/backend/active_record.rb
71
70
  - lib/delayed_job_active_record.rb
@@ -74,10 +73,6 @@ files:
74
73
  - lib/generators/delayed_job/templates/migration.rb
75
74
  - lib/generators/delayed_job/templates/upgrade_migration.rb
76
75
  - lib/generators/delayed_job/upgrade_generator.rb
77
- - spec/database.yml
78
- - spec/delayed/backend/active_record_spec.rb
79
- - spec/delayed/serialization/active_record_spec.rb
80
- - spec/helper.rb
81
76
  homepage: http://github.com/collectiveidea/delayed_job_active_record
82
77
  licenses:
83
78
  - MIT
@@ -98,12 +93,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
98
93
  version: '0'
99
94
  requirements: []
100
95
  rubyforge_project:
101
- rubygems_version: 2.4.1
96
+ rubygems_version: 2.4.4
102
97
  signing_key:
103
98
  specification_version: 4
104
99
  summary: ActiveRecord backend for DelayedJob
105
- test_files:
106
- - spec/database.yml
107
- - spec/delayed/backend/active_record_spec.rb
108
- - spec/delayed/serialization/active_record_spec.rb
109
- - spec/helper.rb
100
+ test_files: []
data/Rakefile DELETED
@@ -1,38 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- require 'bundler/gem_helper'
3
- Bundler::GemHelper.install_tasks
4
-
5
- require 'rspec/core/rake_task'
6
-
7
- ADAPTERS = %w[mysql postgresql sqlite3]
8
-
9
- ADAPTERS.each do |adapter|
10
- desc "Run RSpec code examples for #{adapter} adapter"
11
- RSpec::Core::RakeTask.new(adapter => "#{adapter}:adapter")
12
-
13
- namespace adapter do
14
- task :adapter do
15
- ENV['ADAPTER'] = adapter
16
- end
17
- end
18
- end
19
-
20
- task :coverage do
21
- ENV['COVERAGE'] = 'true'
22
- end
23
-
24
- task :adapter do
25
- ENV['ADAPTER'] = nil
26
- end
27
-
28
- Rake::Task[:spec].enhance do
29
- require 'simplecov'
30
- require 'coveralls'
31
-
32
- Coveralls::SimpleCov::Formatter.new.format(SimpleCov.result)
33
- end
34
-
35
- require 'rubocop/rake_task'
36
- RuboCop::RakeTask.new
37
-
38
- task :default => ([:coverage] + ADAPTERS + [:adapter] + [:rubocop])
@@ -1,14 +0,0 @@
1
- mysql:
2
- adapter: mysql
3
- database: delayed_job_test
4
- username: root
5
- encoding: utf8
6
-
7
- postgresql:
8
- adapter: postgresql
9
- database: delayed_job_test
10
- username: postgres
11
-
12
- sqlite3:
13
- adapter: sqlite3
14
- database: ":memory:"
@@ -1,101 +0,0 @@
1
- require 'helper'
2
- require 'delayed/backend/active_record'
3
-
4
- describe Delayed::Backend::ActiveRecord::Job do
5
- it_behaves_like 'a delayed_job backend'
6
-
7
- describe "reserve_with_scope" do
8
- let(:worker) { double(name: "worker01", read_ahead: 1) }
9
- let(:scope) { double(limit: limit, where: double(update_all: nil)) }
10
- let(:limit) { double(job: job) }
11
- let(:job) { double(id: 1) }
12
-
13
- before do
14
- allow(Delayed::Backend::ActiveRecord::Job.connection).to receive(:adapter_name).at_least(:once).and_return(dbms)
15
- end
16
-
17
- context "for a dbms without a specific implementation" do
18
- let(:dbms) { "OtherDB" }
19
-
20
- it "uses the plain sql version" do
21
- expect(Delayed::Backend::ActiveRecord::Job).to receive(:reserve_with_scope_using_default_sql).once
22
- Delayed::Backend::ActiveRecord::Job.reserve_with_scope(scope, worker, Time.now)
23
- end
24
- end
25
- end
26
-
27
- context 'db_time_now' do
28
- after do
29
- Time.zone = nil
30
- ActiveRecord::Base.default_timezone = :local
31
- end
32
-
33
- it 'returns time in current time zone if set' do
34
- Time.zone = 'Eastern Time (US & Canada)'
35
- expect(%(EST EDT)).to include(Delayed::Job.db_time_now.zone)
36
- end
37
-
38
- it 'returns UTC time if that is the AR default' do
39
- Time.zone = nil
40
- ActiveRecord::Base.default_timezone = :utc
41
- expect(Delayed::Backend::ActiveRecord::Job.db_time_now.zone).to eq 'UTC'
42
- end
43
-
44
- it 'returns local time if that is the AR default' do
45
- Time.zone = 'Central Time (US & Canada)'
46
- ActiveRecord::Base.default_timezone = :local
47
- expect(%w[CST CDT]).to include(Delayed::Backend::ActiveRecord::Job.db_time_now.zone)
48
- end
49
- end
50
-
51
- describe 'after_fork' do
52
- it 'calls reconnect on the connection' do
53
- allow(ActiveRecord::Base).to receive(:establish_connection)
54
- Delayed::Backend::ActiveRecord::Job.after_fork
55
- end
56
- end
57
-
58
- describe 'enqueue' do
59
- it 'allows enqueue hook to modify job at DB level' do
60
- later = described_class.db_time_now + 20.minutes
61
- job = Delayed::Backend::ActiveRecord::Job.enqueue :payload_object => EnqueueJobMod.new
62
- expect(Delayed::Backend::ActiveRecord::Job.find(job.id).run_at).to be_within(1).of(later)
63
- end
64
- end
65
-
66
- if ::ActiveRecord::VERSION::MAJOR < 4 || defined?(::ActiveRecord::MassAssignmentSecurity)
67
- context 'ActiveRecord::Base.send(:attr_accessible, nil)' do
68
- before do
69
- Delayed::Backend::ActiveRecord::Job.send(:attr_accessible, nil)
70
- end
71
-
72
- after do
73
- Delayed::Backend::ActiveRecord::Job.send(:attr_accessible, *Delayed::Backend::ActiveRecord::Job.new.attributes.keys)
74
- end
75
-
76
- it 'is still accessible' do
77
- job = Delayed::Backend::ActiveRecord::Job.enqueue :payload_object => EnqueueJobMod.new
78
- expect(Delayed::Backend::ActiveRecord::Job.find(job.id).handler).to_not be_blank
79
- end
80
- end
81
- end
82
-
83
- context 'ActiveRecord::Base.table_name_prefix' do
84
- it "when prefix is not set, use 'delayed_jobs' as table name" do
85
- ::ActiveRecord::Base.table_name_prefix = nil
86
- Delayed::Backend::ActiveRecord::Job.set_delayed_job_table_name
87
-
88
- expect(Delayed::Backend::ActiveRecord::Job.table_name).to eq 'delayed_jobs'
89
- end
90
-
91
- it 'when prefix is set, prepend it before default table name' do
92
- ::ActiveRecord::Base.table_name_prefix = 'custom_'
93
- Delayed::Backend::ActiveRecord::Job.set_delayed_job_table_name
94
-
95
- expect(Delayed::Backend::ActiveRecord::Job.table_name).to eq 'custom_delayed_jobs'
96
-
97
- ::ActiveRecord::Base.table_name_prefix = nil
98
- Delayed::Backend::ActiveRecord::Job.set_delayed_job_table_name
99
- end
100
- end
101
- end
@@ -1,15 +0,0 @@
1
- require 'helper'
2
-
3
- describe ActiveRecord do
4
- it 'loads classes with non-default primary key' do
5
- expect do
6
- YAML.load(Story.create.to_yaml)
7
- end.not_to raise_error
8
- end
9
-
10
- it 'loads classes even if not in default scope' do
11
- expect do
12
- YAML.load(Story.create(:scoped => false).to_yaml)
13
- end.not_to raise_error
14
- end
15
- end
@@ -1,78 +0,0 @@
1
- require 'simplecov'
2
- require 'coveralls'
3
-
4
- SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
5
- SimpleCov::Formatter::HTMLFormatter,
6
- Coveralls::SimpleCov::Formatter
7
- ]
8
-
9
- SimpleCov.start do
10
- add_filter '/spec/'
11
- minimum_coverage(73.33)
12
- end
13
-
14
- require 'logger'
15
- require 'rspec'
16
-
17
- begin
18
- require 'protected_attributes'
19
- rescue LoadError # rubocop:disable HandleExceptions
20
- end
21
- require 'delayed_job_active_record'
22
- require 'delayed/backend/shared_spec'
23
-
24
- Delayed::Worker.logger = Logger.new('/tmp/dj.log')
25
- ENV['RAILS_ENV'] = 'test'
26
-
27
- db_adapter, gemfile = ENV['ADAPTER'], ENV['BUNDLE_GEMFILE']
28
- db_adapter ||= gemfile && gemfile[%r{gemfiles/(.*?)/}] && $1 # rubocop:disable PerlBackrefs
29
- db_adapter ||= 'sqlite3'
30
-
31
- config = YAML.load(File.read('spec/database.yml'))
32
- ActiveRecord::Base.establish_connection config[db_adapter]
33
- ActiveRecord::Base.logger = Delayed::Worker.logger
34
- ActiveRecord::Migration.verbose = false
35
-
36
- ActiveRecord::Schema.define do
37
- create_table :delayed_jobs, :force => true do |table|
38
- table.integer :priority, :default => 0
39
- table.integer :attempts, :default => 0
40
- table.text :handler
41
- table.text :last_error
42
- table.datetime :run_at
43
- table.datetime :locked_at
44
- table.datetime :failed_at
45
- table.string :locked_by
46
- table.string :queue
47
- table.timestamps
48
- end
49
-
50
- add_index :delayed_jobs, [:priority, :run_at], :name => 'delayed_jobs_priority'
51
-
52
- create_table :stories, :primary_key => :story_id, :force => true do |table|
53
- table.string :text
54
- table.boolean :scoped, :default => true
55
- end
56
- end
57
-
58
- # Purely useful for test cases...
59
- class Story < ActiveRecord::Base
60
- if ::ActiveRecord::VERSION::MAJOR < 4 && ActiveRecord::VERSION::MINOR < 2
61
- set_primary_key :story_id
62
- else
63
- self.primary_key = :story_id
64
- end
65
- def tell
66
- text
67
- end
68
-
69
- def whatever(n, _)
70
- tell * n
71
- end
72
- default_scope { where(:scoped => true) }
73
-
74
- handle_asynchronously :whatever
75
- end
76
-
77
- # Add this directory so the ActiveSupport autoloading works
78
- ActiveSupport::Dependencies.autoload_paths << File.dirname(__FILE__)