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

at(run_at: nil, expire_at: nil)
Alias for: to
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