diff --git a/CHANGELOG.md b/CHANGELOG.md index dd9d705e..f7144026 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ ## [Unreleased] ### Changed - Remove support for Ruby < 2.3 +- Allow use of duration (e.g. `30.minutes`) for interval type scheduling ## [4.5.0] - 2021-09-25 ### Added diff --git a/lib/resque/scheduler.rb b/lib/resque/scheduler.rb index 54ed74fc..5d49ce9d 100644 --- a/lib/resque/scheduler.rb +++ b/lib/resque/scheduler.rb @@ -144,7 +144,7 @@ def load_schedule_job(name, config) interval_defined = false interval_types = %w(cron every) interval_types.each do |interval_type| - next unless !config[interval_type].nil? && !config[interval_type].empty? + next unless !config[interval_type].nil? && !config[interval_type].to_s.empty? args = optionizate_interval_value(config[interval_type]) args = [args, nil, job: true] if args.is_a?(::String) diff --git a/lib/resque/scheduler/server.rb b/lib/resque/scheduler/server.rb index fa299654..3f4883a9 100644 --- a/lib/resque/scheduler/server.rb +++ b/lib/resque/scheduler/server.rb @@ -185,13 +185,13 @@ def schedule_interval(config) def schedule_interval_every(every) every = [*every] - s = 'every: ' << every.first + s = 'every: ' << "#{every.first}#{'s' if every.first.is_a?(Numeric)}" return s unless every.length > 1 s << ' (' meta = every.last.map do |key, value| - "#{key.to_s.tr('_', ' ')} #{value}" + "#{key.to_s.tr('_', ' ')} #{value}#{'s' if value.is_a?(Numeric)}" end s << meta.join(', ') << ')' end diff --git a/test/scheduler_test.rb b/test/scheduler_test.rb index d759edd1..b783a4bd 100644 --- a/test/scheduler_test.rb +++ b/test/scheduler_test.rb @@ -132,6 +132,22 @@ assert job.opts.keys.include?(:first_in) end + test 'load_schedule_job with every fixnum' do + Resque::Scheduler.load_schedule_job( + 'some_ivar_job', + 'every' => 30, + 'class' => 'SomeIvarJob', + 'args' => '/tmp' + ) + + assert_equal(1, Resque::Scheduler.rufus_scheduler.jobs.size) + assert_equal(1, Resque::Scheduler.scheduled_jobs.size) + assert Resque::Scheduler.scheduled_jobs.keys.include?('some_ivar_job') + job = Resque::Scheduler.rufus_scheduler.jobs.first + next_times = job.next_times(2) + assert_equal(30, next_times[1] - next_times[0]) + end + test 'load_schedule_job with cron with options' do Resque::Scheduler.load_schedule_job( 'some_ivar_job',