1# frozen_string_literal: true 2 3module Schedulable 4 extend ActiveSupport::Concern 5 6 included do 7 scope :runnable_schedules, -> { active.where("next_run_at < ?", Time.zone.now) } 8 9 before_save :set_next_run_at 10 end 11 12 def schedule_next_run! 13 save! # with set_next_run_at 14 rescue ActiveRecord::RecordInvalid 15 update_column(:next_run_at, nil) # update without validation 16 end 17 18 def set_next_run_at 19 raise NotImplementedError 20 end 21end 22