sidekiq-scheduler 1.2.2 → 1.2.3

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
2
  SHA1:
3
- metadata.gz: 361fb1b313b057028b848c5459f6b78949d9e017
4
- data.tar.gz: 0a12681343204dc62437c57b6865184d9ad3bebe
3
+ metadata.gz: f1853ea52af3b5ac315998b85d0e0bdfe7b4a609
4
+ data.tar.gz: 8d1a8da664bc78daf8c3006e3649ac983ffe5170
5
5
  SHA512:
6
- metadata.gz: 814400614b1fabde47d39503eb586dfcc0e4e881bef9531a3a0b5047015b932a202e3f5c0ea367b9f753c0458adfd4d2d5557cbd607ca4f5cd2e9d8b580e033a
7
- data.tar.gz: ba567b96542baf134f78509f649201772730d79139a76812dea2ca7d5545d014281a5c1d7656dd8688185e1ce9858010fc4e8e8b2c22617eec5e25b808208c87
6
+ metadata.gz: eaf1a2503d7dfad91e180ad3d46124d9b243f0abd16bd5ecdeed1d927a0d1da9069b32387c7a3c86ed3daafe4ddfed637513df34d20aa0ff95e2114bccbbaec8
7
+ data.tar.gz: 2aeaecd846736d06d6100149b87f57562870f74caec307e7054b2ac9fab3d8de0f9eb0390dba0ef66110a4dedc8dc13f6425804bf4d73342e7614aa62f1dd4d0
data/README.md CHANGED
@@ -4,24 +4,32 @@
4
4
  </a>
5
5
  </p>
6
6
 
7
- ## Note
8
-
9
- The master branch and releases from 1.0 are compatible with sidekiq ~> 3, for sidekiq ~> 2 support
10
- use versions ~> 0.
11
-
12
- ## Description
7
+ <p align="center">
8
+ <a href="https://badge.fury.io/rb/sidekiq-scheduler">
9
+ <img src="https://badge.fury.io/rb/sidekiq-scheduler.png" alt="Gem Version">
10
+ </a>
11
+ <a href="https://codeclimate.com/github/moove-it/sidekiq-scheduler">
12
+ <img src="https://codeclimate.com/github/moove-it/sidekiq-scheduler/badges/gpa.svg" alt="Code Climate">
13
+ </a>
14
+ <a href="https://travis-ci.org/moove-it/sidekiq-scheduler">
15
+ <img src="https://api.travis-ci.org/moove-it/sidekiq-scheduler.svg?branch=master" alt="Build Status">
16
+ </a>
17
+ <a href="https://coveralls.io/github/moove-it/sidekiq-scheduler?branch=master">
18
+ <img src="https://coveralls.io/repos/moove-it/sidekiq-scheduler/badge.svg?branch=master&service=github" alt="Coverage Status">
19
+ </a>
20
+ <a href="https://inch-ci.org/github/moove-it/sidekiq-scheduler">
21
+ <img src="https://inch-ci.org/github/moove-it/sidekiq-scheduler.svg?branch=master" alt="Documentation Coverage">
22
+ </a>
23
+ <a href="http://www.rubydoc.info/github/moove-it/sidekiq-scheduler">
24
+ <img src="https://img.shields.io/badge/yard-docs-blue.svg" alt="Documentation">
25
+ </a>
26
+ </p>
13
27
 
14
28
  sidekiq-scheduler is an extension to [Sidekiq](http://github.com/mperham/sidekiq)
15
29
  that adds support for running scheduled.
16
30
 
17
31
  Scheduled jobs are like cron jobs, recurring on a regular basis.
18
32
 
19
- ### Documentation
20
-
21
- This README covers what most people need to know. If you're looking for
22
- details on individual methods, you might want to try the [rdoc](http://rdoc.info/github/moove-it/sidekiq-scheduler/master/frames).
23
-
24
-
25
33
  ## Installation
26
34
 
27
35
  Add this to your Gemfile:
@@ -41,7 +49,7 @@ and the execute:
41
49
  sidekiq -r created_file_path.rb
42
50
  ```
43
51
 
44
- Look at [Loading the schedule][https://github.com/moove-it/sidekiq-scheduler/tree/0.x#loading-the-schedule]
52
+ Look at [Loading the schedule](https://github.com/moove-it/sidekiq-scheduler/#loading-the-schedule)
45
53
  for information on how to load your schedule.
46
54
 
47
55
  You can add sidekiq-scheduler configuration options to sidekiq.yml config file.
@@ -49,6 +57,30 @@ Available options are:
49
57
 
50
58
  :schedule: <the schedule to be run>
51
59
  :dynamic: <if true the schedule can be modified in runtime>
60
+ :enabled: <disables scheduler if true [true by default]>
61
+
62
+ ## Manage tasks from Unicorn/Rails server
63
+
64
+ For example, if you want start sidekiq-scheduler only from Unicorn/Rails, but not from Sidekiq you can write something like this in initializer:
65
+
66
+ ```ruby
67
+ # config/initializers/sidekiq_scheduler.rb
68
+ require 'sidekiq/scheduler'
69
+
70
+ puts "Sidekiq.server? is #{Sidekiq.server?.inspect}"
71
+ puts "defined?(Rails::Server) is #{defined?(Rails::Server).inspect}"
72
+ puts "defined?(Unicorn) is #{defined?(Unicorn).inspect}"
73
+
74
+ if Rails.env == 'production' && (defined?(Rails::Server) || defined?(Unicorn))
75
+ Sidekiq.schedule = YAML
76
+ .load_file(File.expand_path('../../../config/scheduler.yml', __FILE__))
77
+ Sidekiq::Scheduler.reload_schedule!
78
+ else
79
+ Sidekiq::Scheduler.enabled = false
80
+ puts "Sidekiq::Scheduler.enabled is #{Sidekiq::Scheduler.enabled.inspect}"
81
+ end
82
+ ```
83
+
52
84
 
53
85
  ## Scheduled Jobs (Recurring Jobs)
54
86
 
data/Rakefile CHANGED
@@ -20,9 +20,6 @@ RDoc::Task.new(:rdoc) do |rdoc|
20
20
  rdoc.rdoc_files.include('lib/**/*.rb')
21
21
  end
22
22
 
23
-
24
-
25
-
26
23
  Bundler::GemHelper.install_tasks
27
24
 
28
25
  require 'rake/testtask'
@@ -34,5 +31,4 @@ Rake::TestTask.new(:test) do |t|
34
31
  t.verbose = false
35
32
  end
36
33
 
37
-
38
- task :default => :test
34
+ task default: :test
@@ -7,9 +7,10 @@ Sidekiq.configure_server do |config|
7
7
 
8
8
  config.on(:startup) do
9
9
  scheduler_options = {
10
- :scheduler => config.options.fetch(:scheduler, true),
11
- :dynamic => config.options.fetch(:dynamic, false),
12
- :schedule => config.options.fetch(:schedule, nil)
10
+ scheduler: config.options.fetch(:scheduler, true),
11
+ dynamic: config.options.fetch(:dynamic, false),
12
+ enabled: config.options.fetch(:enabled, true),
13
+ schedule: config.options.fetch(:schedule, nil)
13
14
  }
14
15
 
15
16
  schedule_manager = SidekiqScheduler::Manager.new(scheduler_options)
@@ -21,4 +22,5 @@ Sidekiq.configure_server do |config|
21
22
  config.options[:schedule_manager].stop
22
23
  end
23
24
 
24
- end
25
+ end
26
+
@@ -1,35 +1,54 @@
1
1
  Capistrano::Configuration.instance.load do
2
- before "deploy", "sidekiq_scheduler:quiet"
3
- after "deploy:stop", "sidekiq_scheduler:stop"
4
- after "deploy:start", "sidekiq_scheduler:start"
5
- after "deploy:restart", "sidekiq_scheduler:restart"
2
+ before 'deploy', 'sidekiq_scheduler:quiet'
3
+ after 'deploy:stop', 'sidekiq_scheduler:stop'
4
+ after 'deploy:start', 'sidekiq_scheduler:start'
5
+ after 'deploy:restart', 'sidekiq_scheduler:restart'
6
6
 
7
7
  _cset(:sidekiq_timeout) { 10 }
8
8
  _cset(:sidekiq_role) { :app }
9
9
 
10
10
  namespace :sidekiq_scheduler do
11
11
 
12
- desc "Quiet sidekiq-scheduler with sidekiq (stop accepting new work)"
13
- task :quiet, :roles => lambda { fetch(:sidekiq_role) } do
14
- run "cd #{current_path} && if [ -f #{current_path}/tmp/pids/sidekiq.pid ]; then #{fetch(:bundle_cmd, "bundle")} exec sidekiqctl quiet #{current_path}/tmp/pids/sidekiq.pid ; fi"
12
+ desc 'Quiet sidekiq-scheduler with sidekiq (stop accepting new work)'
13
+ task :quiet, roles: lambda { fetch(:sidekiq_role) } do
14
+ bundle_cmd = fetch(:bundle_cmd, 'bundle')
15
+ pid_file = "#{current_path}/tmp/pids/sidekiq.pid"
16
+ quiet_cmd = "#{bundle_cmd} exec sidekiqctl quiet #{pid_file}"
17
+
18
+ run "cd #{current_path} && if [ -f #{pid_file} ]; then #{quiet_cmd} ; fi"
15
19
  end
16
20
 
17
- desc "Stop sidekiq-scheduler with sidekiq"
18
- task :stop, :roles => lambda { fetch(:sidekiq_role) } do
19
- run "cd #{current_path} && if [ -f #{current_path}/tmp/pids/sidekiq.pid ]; then #{fetch(:bundle_cmd, "bundle")} exec sidekiqctl stop #{current_path}/tmp/pids/sidekiq.pid #{fetch :sidekiq_timeout} ; fi"
21
+ desc 'Stop sidekiq-scheduler with sidekiq'
22
+ task :stop, roles: lambda { fetch(:sidekiq_role) } do
23
+ bundle_cmd = fetch(:bundle_cmd, 'bundle')
24
+ pid_file = "#{current_path}/tmp/pids/sidekiq.pid"
25
+ timeout = fetch(:sidekiq_timeout)
26
+ stop_cmd = "#{bundle_cmd} exec sidekiqctl stop #{pid_file} #{timeout}"
27
+
28
+ run "cd #{current_path} && if [ -f #{pid_file} ]; then #{stop_cmd} ; fi"
20
29
  end
21
30
 
22
- desc "Start sidekiq-scheduler with sidekiq"
23
- task :start, :roles => lambda { fetch(:sidekiq_role) } do
24
- rails_env = fetch(:rails_env, "production")
25
- run "cd #{current_path} ; nohup #{fetch(:bundle_cmd, "bundle")} exec sidekiq-scheduler -e #{rails_env} -C #{current_path}/config/sidekiq.yml -P #{current_path}/tmp/pids/sidekiq.pid >> #{current_path}/log/sidekiq.log 2>&1 &", :pty => false
31
+ desc 'Start sidekiq-scheduler with sidekiq'
32
+ task :start, roles: lambda { fetch(:sidekiq_role) } do
33
+ rails_env = fetch(:rails_env, 'production')
34
+ bundle_cmd = fetch(:bundle_cmd, 'bundle')
35
+ log_file = "#{current_path}/log/sidekiq.log 2>&1 &"
36
+ pid_file = "#{current_path}/tmp/pids/sidekiq.pid"
37
+ start_cmd = "#{bundle_cmd} exec sidekiq-scheduler start "
38
+ start_cmd += "-e #{rails_env} "
39
+ start_cmd += "-C #{current_path}/config/sidekiq.yml "
40
+ start_cmd += "-P #{pid_file} "
41
+ exec_cmd = "nohup #{start_cmd}"
42
+
43
+ run "cd #{current_path} ; nohup #{exec_cmd} >> #{log_file}", pty: false
26
44
  end
27
45
 
28
- desc "Restart sidekiq-scheduler with sidekiq"
29
- task :restart, :roles => lambda { fetch(:sidekiq_role) } do
46
+ desc 'Restart sidekiq-scheduler with sidekiq'
47
+ task :restart, roles: lambda { fetch(:sidekiq_role) } do
30
48
  stop
31
49
  start
32
50
  end
33
51
 
34
52
  end
35
- end
53
+ end
54
+
@@ -19,6 +19,7 @@ module SidekiqScheduler
19
19
  def initialize(options={})
20
20
  @enabled = options[:scheduler]
21
21
 
22
+ Sidekiq::Scheduler.enabled = options[:enabled]
22
23
  Sidekiq::Scheduler.dynamic = options[:dynamic] || false
23
24
  Sidekiq.schedule = options[:schedule] if options[:schedule]
24
25
  end
@@ -30,9 +31,9 @@ module SidekiqScheduler
30
31
  def start
31
32
  # Load the schedule into rufus
32
33
  # If dynamic is set, load that schedule otherwise use normal load
33
- if @enabled && Sidekiq::Scheduler.dynamic
34
+ if @enabled && Sidekiq::Scheduler.dynamic && Sidekiq::Scheduler.enabled
34
35
  Sidekiq::Scheduler.reload_schedule!
35
- elsif @enabled
36
+ elsif @enabled && Sidekiq::Scheduler.enabled
36
37
  Sidekiq::Scheduler.load_schedule!
37
38
  end
38
39
  end
@@ -1,5 +1,5 @@
1
1
  module SidekiqScheduler
2
2
 
3
- VERSION = '1.2.2'
3
+ VERSION = '1.2.3'
4
4
 
5
5
  end
@@ -16,7 +16,10 @@ module Sidekiq
16
16
 
17
17
  class << self
18
18
 
19
- # If set, will try to update the schedule in the loop
19
+ # Set to enable or disable the scheduler.
20
+ attr_accessor :enabled
21
+
22
+ # Set to update the schedule in runtime in a given time period.
20
23
  attr_accessor :dynamic
21
24
 
22
25
  end
@@ -30,7 +33,7 @@ module Sidekiq
30
33
  if self.rufus_scheduler
31
34
  logger.info "Scheduling Info\tLast Run"
32
35
  scheduler_jobs = self.rufus_scheduler.all_jobs
33
- scheduler_jobs.each do |k, v|
36
+ scheduler_jobs.each do |_, v|
34
37
  logger.info "#{v.t}\t#{v.last}\t"
35
38
  end
36
39
  end
@@ -39,22 +42,26 @@ module Sidekiq
39
42
  # Pulls the schedule from Sidekiq.schedule and loads it into the
40
43
  # rufus scheduler instance
41
44
  def self.load_schedule!
42
- logger.info 'Loading Schedule'
45
+ if enabled
46
+ logger.info 'Loading Schedule'
43
47
 
44
- # Need to load the schedule from redis for the first time if dynamic
45
- Sidekiq.reload_schedule! if dynamic
48
+ # Need to load the schedule from redis for the first time if dynamic
49
+ Sidekiq.reload_schedule! if dynamic
46
50
 
47
- logger.info 'Schedule empty! Set Sidekiq.schedule' if Sidekiq.schedule.empty?
51
+ logger.info 'Schedule empty! Set Sidekiq.schedule' if Sidekiq.schedule.empty?
48
52
 
49
- @@scheduled_jobs = {}
53
+ @@scheduled_jobs = {}
50
54
 
51
- Sidekiq.schedule.each do |name, config|
52
- self.load_schedule_job(name, config)
53
- end
55
+ Sidekiq.schedule.each do |name, config|
56
+ self.load_schedule_job(name, config)
57
+ end
54
58
 
55
- Sidekiq.redis { |r| r.del(:schedules_changed) }
59
+ Sidekiq.redis { |r| r.del(:schedules_changed) }
56
60
 
57
- logger.info 'Schedules Loaded'
61
+ logger.info 'Schedules Loaded'
62
+ else
63
+ logger.info 'SidekiqScheduler is disabled'
64
+ end
58
65
  end
59
66
 
60
67
  # modify interval type value to value with options if options available
@@ -110,13 +117,13 @@ module Sidekiq
110
117
  # Returns true if the given schedule config hash matches the current
111
118
  # ENV['RAILS_ENV']
112
119
  def self.rails_env_matches?(config)
113
- config['rails_env'] && ENV['RAILS_ENV'] && config['rails_env'].gsub(/\s/,'').split(',').include?(ENV['RAILS_ENV'])
120
+ config['rails_env'] && ENV['RAILS_ENV'] && config['rails_env'].gsub(/\s/, '').split(',').include?(ENV['RAILS_ENV'])
114
121
  end
115
122
 
116
123
  def self.handle_errors
117
124
  begin
118
125
  yield
119
- rescue Exception => e
126
+ rescue StandardError => e
120
127
  logger.info "#{e.class.name}: #{e.message}"
121
128
  end
122
129
  end
@@ -157,9 +164,13 @@ module Sidekiq
157
164
  end
158
165
 
159
166
  def self.reload_schedule!
160
- logger.info 'Reloading Schedule'
161
- self.clear_schedule!
162
- self.load_schedule!
167
+ if enabled
168
+ logger.info 'Reloading Schedule'
169
+ self.clear_schedule!
170
+ self.load_schedule!
171
+ else
172
+ logger.info 'SidekiqScheduler is disabled'
173
+ end
163
174
  end
164
175
 
165
176
  def self.update_schedule
@@ -4,6 +4,7 @@ class ManagerTest < Minitest::Test
4
4
  describe 'Sidekiq::Scheduler' do
5
5
 
6
6
  before do
7
+ Sidekiq::Scheduler.enabled = true
7
8
  Sidekiq::Scheduler.dynamic = false
8
9
  Sidekiq.redis { |r| r.del(:schedules) }
9
10
  Sidekiq.redis { |r| r.del(:schedules_changed) }
@@ -11,6 +12,23 @@ class ManagerTest < Minitest::Test
11
12
  Sidekiq::Scheduler.send(:class_variable_set, :@@scheduled_jobs, {})
12
13
  end
13
14
 
15
+ it 'sidekiq-scheduler enabled option is working' do
16
+ Sidekiq::Scheduler.enabled = false
17
+ assert_equal(0, Sidekiq::Scheduler.rufus_scheduler.jobs.size)
18
+ Sidekiq.schedule = {
19
+ :some_ivar_job => {
20
+ 'cron' => '* * * * *',
21
+ 'class' => 'SomeIvarJob',
22
+ 'args' => '/tmp'
23
+ }
24
+ }
25
+
26
+ Sidekiq::Scheduler.load_schedule!
27
+
28
+ assert_equal(0, Sidekiq::Scheduler.rufus_scheduler.jobs.size)
29
+ refute Sidekiq::Scheduler.scheduled_jobs.include?(:some_ivar_job)
30
+ end
31
+
14
32
  it 'enqueue constantizes' do
15
33
  # The job should be loaded, since a missing rails_env means ALL envs.
16
34
  ENV['RAILS_ENV'] = 'production'
@@ -170,7 +188,7 @@ class ManagerTest < Minitest::Test
170
188
  }
171
189
  )
172
190
 
173
- assert_equal(1, Sidekiq::Scheduler.rufus_scheduler.all_jobs.size)
191
+ assert_equal(1, Sidekiq::Scheduler.rufus_scheduler.jobs.size)
174
192
  assert_equal(1, Sidekiq::Scheduler.scheduled_jobs.size)
175
193
  assert Sidekiq::Scheduler.scheduled_jobs.keys.include?('some_ivar_job')
176
194
  end
@@ -185,7 +203,7 @@ class ManagerTest < Minitest::Test
185
203
  }
186
204
  )
187
205
 
188
- assert_equal(1, Sidekiq::Scheduler.rufus_scheduler.all_jobs.size)
206
+ assert_equal(1, Sidekiq::Scheduler.rufus_scheduler.jobs.size)
189
207
  assert_equal(1, Sidekiq::Scheduler.scheduled_jobs.size)
190
208
  assert Sidekiq::Scheduler.scheduled_jobs.keys.include?('some_ivar_job')
191
209
  end
@@ -34,18 +34,18 @@ class WebTest < MiniTest::Test
34
34
  it 'shows schedule' do
35
35
  get '/recurring-jobs'
36
36
 
37
- assert_match /Foo Job/, last_response.body
38
- assert_match /FooClass/, last_response.body
39
- assert_match /0 \* \* \* \* US\/Eastern/, last_response.body
40
- assert_match /default/, last_response.body
41
- assert_match /\[42\]/, last_response.body
42
- assert_match /Does foo things\./, last_response.body
43
-
44
- assert_match /Bar Job/, last_response.body
45
- assert_match /BarClass/, last_response.body
46
- assert_match /1h/, last_response.body
47
- assert_match /special/, last_response.body
48
- assert_match /\[\"foo\", \"bar\"\]/, last_response.body
37
+ assert_match(/Foo Job/, last_response.body)
38
+ assert_match(/FooClass/, last_response.body)
39
+ assert_match(/0 \* \* \* \* US\/Eastern/, last_response.body)
40
+ assert_match(/default/, last_response.body)
41
+ assert_match(/\[42\]/, last_response.body)
42
+ assert_match(/Does foo things\./, last_response.body)
43
+
44
+ assert_match(/Bar Job/, last_response.body)
45
+ assert_match(/BarClass/, last_response.body)
46
+ assert_match(/1h/, last_response.body)
47
+ assert_match(/special/, last_response.body)
48
+ assert_match(/\[\"foo\", \"bar\"\]/, last_response.body)
49
49
  end
50
50
  end
51
- end
51
+ end
@@ -3,118 +3,78 @@ require 'test_helper'
3
3
  class ScheduleTest < Minitest::Test
4
4
 
5
5
  describe 'SidekiqScheduler::Schedule' do
6
+
7
+ def build_cron_hash
8
+ {
9
+ 'cron' => '* * * * *',
10
+ 'class' => 'SomeIvarJob',
11
+ 'args' => '/tmp/75'
12
+ }
13
+ end
14
+
15
+ def only_cron_and_args
16
+ -> (key, _) { %w(cron args).include?(key) }
17
+ end
18
+
19
+ def job_from_redis(job_id)
20
+ MultiJson.decode(job_from_redis_without_decoding(job_id))
21
+ end
22
+
23
+ def job_from_redis_without_decoding(job_id)
24
+ Sidekiq.redis { |redis|
25
+ redis.hget(:schedules, job_id)
26
+ }
27
+ end
28
+
29
+ let(:cron_hash) { build_cron_hash }
30
+ let(:job_id) { 'my_ivar_job' }
31
+ let(:job_class_id) { 'SomeIvarJob' }
32
+
6
33
  it 'schedule= sets the schedule' do
7
34
  Sidekiq::Scheduler.dynamic = true
8
- Sidekiq.schedule = {
9
- 'my_ivar_job' => {
10
- 'cron' => '* * * * *',
11
- 'class' => 'SomeIvarJob',
12
- 'args' => '/tmp/75'
13
- }
14
- }
15
35
 
16
- assert_equal(
17
- {
18
- 'cron' => '* * * * *',
19
- 'class' => 'SomeIvarJob',
20
- 'args' => '/tmp/75'
21
- },
22
- MultiJson.decode(Sidekiq.redis { |r|
23
- r.hget(:schedules, 'my_ivar_job')
24
- })
25
- )
36
+ Sidekiq.schedule = {job_id => cron_hash}
37
+
38
+ assert_equal(cron_hash, job_from_redis(job_id))
26
39
  end
27
40
 
28
41
  it "schedule= uses job name as 'class' argument if it's missing" do
29
42
  Sidekiq::Scheduler.dynamic = true
30
- Sidekiq.schedule = {
31
- 'SomeIvarJob' => {
32
- 'cron' => '* * * * *',
33
- 'args' => '/tmp/75'
34
- }
35
- }
36
43
 
37
- assert_equal(
38
- {
39
- 'cron' => '* * * * *',
40
- 'class' => 'SomeIvarJob',
41
- 'args' => '/tmp/75'
42
- },
43
- MultiJson.decode(Sidekiq.redis { |r| r.hget(:schedules, 'SomeIvarJob') })
44
- )
45
- assert_equal('SomeIvarJob', Sidekiq.schedule['SomeIvarJob']['class'])
44
+ Sidekiq.schedule = {job_class_id => cron_hash.select(&only_cron_and_args)}
45
+
46
+ assert_equal(cron_hash, job_from_redis(job_class_id))
47
+ assert_equal(job_class_id, Sidekiq.schedule[job_class_id]['class'])
46
48
  end
47
49
 
48
50
  it 'schedule= does not mutate argument' do
49
- schedule = {
50
- 'SomeIvarJob' => {
51
- 'cron' => '* * * * *',
52
- 'args' => '/tmp/75'
53
- }
54
- }
51
+ schedule = {job_class_id => cron_hash.select(&only_cron_and_args)}
52
+
55
53
  Sidekiq.schedule = schedule
56
- assert !schedule['SomeIvarJob'].key?('class')
54
+
55
+ assert !schedule[job_class_id].key?('class')
57
56
  end
58
57
 
59
58
  it 'set_schedule can set an individual schedule' do
60
- Sidekiq.set_schedule(
61
- 'some_ivar_job',
62
- {
63
- 'cron' => '* * * * *',
64
- 'class' => 'SomeIvarJob',
65
- 'args' => '/tmp/22'
66
- }
67
- )
68
- assert_equal(
69
- {
70
- 'cron' => '* * * * *',
71
- 'class' => 'SomeIvarJob',
72
- 'args' => '/tmp/22'
73
- },
74
- MultiJson.decode(Sidekiq.redis { |r| r.hget(:schedules, 'some_ivar_job') })
75
- )
76
- assert Sidekiq.redis { |r| r.sismember(:schedules_changed, 'some_ivar_job') }
59
+ Sidekiq.set_schedule(job_id, cron_hash)
60
+
61
+ assert_equal(cron_hash, job_from_redis(job_id))
62
+ assert Sidekiq.redis { |r| r.sismember(:schedules_changed, job_id) }
77
63
  end
78
64
 
79
65
  it 'get_schedule returns a schedule' do
80
- Sidekiq.redis { |r| r.hset(
81
- :schedules,
82
- 'some_ivar_job2',
83
- MultiJson.encode(
84
- {
85
- 'cron' => '* * * * *',
86
- 'class' => 'SomeIvarJob',
87
- 'args' => '/tmp/33'
88
- }
89
- )
90
- ) }
91
- assert_equal(
92
- {
93
- 'cron' => '* * * * *',
94
- 'class' => 'SomeIvarJob',
95
- 'args' => '/tmp/33'
96
- },
97
- Sidekiq.get_schedule('some_ivar_job2')
98
- )
66
+ Sidekiq.redis { |r| r.hset(:schedules, job_id, MultiJson.encode(cron_hash)) }
67
+
68
+ assert_equal(cron_hash, Sidekiq.get_schedule(job_id))
99
69
  end
100
70
 
101
71
  it 'remove_schedule removes a schedule' do
102
- Sidekiq.redis do |r|
103
- r.hset(
104
- :schedules,
105
- 'some_ivar_job3',
106
- MultiJson.encode(
107
- {
108
- 'cron' => '* * * * *',
109
- 'class' => 'SomeIvarJob',
110
- 'args' => '/tmp/44'
111
- }
112
- )
113
- )
114
- end
115
- Sidekiq.remove_schedule('some_ivar_job3')
116
- assert_equal nil, Sidekiq.redis{ |r| r.hget(:schedules, 'some_ivar_job3') }
117
- assert Sidekiq.redis{ |r| r.sismember(:schedules_changed, 'some_ivar_job3') }
72
+ Sidekiq.redis { |r| r.hset(:schedules, job_id, MultiJson.encode(cron_hash)) }
73
+
74
+ Sidekiq.remove_schedule(job_id)
75
+
76
+ assert_equal nil, job_from_redis_without_decoding(job_id)
77
+ assert Sidekiq.redis{ |r| r.sismember(:schedules_changed, job_id) }
118
78
  end
119
79
  end
120
- end
80
+ end
@@ -1,6 +1,9 @@
1
1
  require 'simplecov'
2
2
  SimpleCov.start
3
3
 
4
+ require 'coveralls'
5
+ Coveralls.wear!
6
+
4
7
  require 'minitest/autorun'
5
8
  require 'minitest/pride'
6
9
  require 'minitest/autorun'
@@ -36,15 +39,15 @@ end
36
39
 
37
40
  class SomeJob
38
41
  include Sidekiq::Worker
39
- def self.perform(repo_id, path)
42
+ def self.perform(_, _)
40
43
  end
41
44
  end
42
45
 
43
46
  class SomeIvarJob < SomeJob
44
- sidekiq_options :queue => :ivar
47
+ sidekiq_options queue: :ivar
45
48
  end
46
49
 
47
50
  class SomeRealClass
48
51
  include Sidekiq::Worker
49
- sidekiq_options :queue => :some_real_queue
50
- end
52
+ sidekiq_options queue: :some_real_queue
53
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq-scheduler
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.2
4
+ version: 1.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Morton Jonuschat
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-10-19 00:00:00.000000000 Z
12
+ date: 2015-11-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sidekiq
@@ -45,14 +45,14 @@ dependencies:
45
45
  requirements:
46
46
  - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: '3'
48
+ version: 3.1.7
49
49
  type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - "~>"
54
54
  - !ruby/object:Gem::Version
55
- version: '3'
55
+ version: 3.1.7
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: multi_json
58
58
  requirement: !ruby/object:Gem::Requirement
@@ -151,6 +151,20 @@ dependencies:
151
151
  - - "~>"
152
152
  - !ruby/object:Gem::Version
153
153
  version: '0'
154
+ - !ruby/object:Gem::Dependency
155
+ name: coveralls
156
+ requirement: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ type: :development
162
+ prerelease: false
163
+ version_requirements: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - ">="
166
+ - !ruby/object:Gem::Version
167
+ version: '0'
154
168
  - !ruby/object:Gem::Dependency
155
169
  name: rack-test
156
170
  requirement: !ruby/object:Gem::Requirement
@@ -197,7 +211,6 @@ files:
197
211
  - lib/sidekiq-scheduler/version.rb
198
212
  - lib/sidekiq-scheduler/web.rb
199
213
  - lib/sidekiq/scheduler.rb
200
- - lib/tasks/sidekiq-scheduler_tasks.rake
201
214
  - test/config.yml
202
215
  - test/fake_env.rb
203
216
  - test/lib/sidekiq/scheduler_test.rb
@@ -1,4 +0,0 @@
1
- # desc "Explaining what the task does"
2
- # task :sidekiq-scheduler do
3
- # # Task goes here
4
- # end