class Procrastinator::Scheduler::UpdateProxy
Provides a more natural syntax for rescheduling tasks
@see Scheduler#reschedule
Public Class Methods
new(config, identifier:)
click to toggle source
# File lib/procrastinator/scheduler.rb, line 78 def initialize(config, identifier:) identifier[:data] = YAML.dump(identifier[:data]) if identifier[:data] @config = config @identifier = identifier end
Public Instance Methods
to(run_at: nil, expire_at: nil)
click to toggle source
# File lib/procrastinator/scheduler.rb, line 85 def to(run_at: nil, expire_at: nil) task = fetch_task(@identifier) verify_time_provided(run_at, expire_at) validate_run_at(run_at, task[:expire_at], expire_at) new_data = { attempts: 0, last_error: nil, last_error_at: nil } new_data = new_data.merge(run_at: run_at.to_i, initial_run_at: run_at.to_i) if run_at new_data = new_data.merge(expire_at: expire_at.to_i) if expire_at @config.loader.update(task[:id], new_data) end
Also aliased as: at
Private Instance Methods
fetch_task(identifier)
click to toggle source
# File lib/procrastinator/scheduler.rb, line 123 def fetch_task(identifier) tasks = @config.loader.read(identifier) raise "no task found matching #{ identifier }" if tasks.nil? || tasks.empty? raise "too many (#{ tasks.size }) tasks match #{ identifier }. Found: #{ tasks }" if tasks.size > 1 tasks.first end
validate_run_at(run_at, saved_expire_at, expire_at)
click to toggle source
# File lib/procrastinator/scheduler.rb, line 111 def validate_run_at(run_at, saved_expire_at, expire_at) return unless run_at after_new_expire = expire_at && run_at.to_i > expire_at.to_i raise "given run_at (#{ run_at }) is later than given expire_at (#{ expire_at })" if after_new_expire after_old_expire = saved_expire_at && run_at.to_i > saved_expire_at raise "given run_at (#{ run_at }) is later than saved expire_at (#{ saved_expire_at })" if after_old_expire end
verify_time_provided(run_at, expire_at)
click to toggle source
# File lib/procrastinator/scheduler.rb, line 107 def verify_time_provided(run_at, expire_at) raise ArgumentError, 'you must provide at least :run_at or :expire_at' if run_at.nil? && expire_at.nil? end