sidekiq-scheduler 1.2.2 → 1.2.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: 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