Skip to content

Instantly share code, notes, and snippets.

@brunofrank
Created September 21, 2016 12:19
Show Gist options
  • Save brunofrank/184aec329dad5f4ff421952c1789fb5b to your computer and use it in GitHub Desktop.
Save brunofrank/184aec329dad5f4ff421952c1789fb5b to your computer and use it in GitHub Desktop.
Recurrent jobs with DJ
class MyJob
include Delayed::ScheduledJob
run_every 1.hour
end
class MyJob2
include Delayed::ScheduledJob
run_every 1.day
end
module ScheduledJob
def self.included(base)
base.extend(ClassMethods)
end
def perform_with_schedule
perform_without_schedule
Delayed::Job.enqueue self, 0, self.class.schedule.from_now.getutc
end
def register_job
Delayed::Job.enqueue self, 0, self.class.schedule.from_now.getutc
end
module ClassMethods
def method_added(name)
if name.to_s == "perform" && !@redefined
@redefined = true
alias_method_chain :perform, :schedule
end
end
def schedule
@schedule
end
def run_every(time)
if time.kind_of?(Proc)
@schedule = time.call
else
@schedule = time
end
end
def run_every_day_at(time)
hour = Time.parse(time)
if hour > Time.now
@schedule = Time.parse(time) - Time.now
else
@schedule = (Time.parse(time) + 1.day) - Time.now
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment