Created
September 21, 2016 12:19
-
-
Save brunofrank/184aec329dad5f4ff421952c1789fb5b to your computer and use it in GitHub Desktop.
Recurrent jobs with DJ
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class MyJob | |
include Delayed::ScheduledJob | |
run_every 1.hour | |
end | |
class MyJob2 | |
include Delayed::ScheduledJob | |
run_every 1.day | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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