class SayWhen::Scheduler

Public Instance Methods

extract_data(job) click to toggle source
# File lib/say_when/scheduler.rb, line 81
def extract_data(job)
  job[:data] if job && job.is_a?(Hash)
end
extract_job_class(job) click to toggle source
# File lib/say_when/scheduler.rb, line 65
def extract_job_class(job)
  if job.is_a?(Hash)
    job[:class] || job[:job_class]
  elsif job.is_a?(Class)
    job.name
  elsif job.is_a?(String)
    job
  end
end
extract_job_method(job) click to toggle source
# File lib/say_when/scheduler.rb, line 75
def extract_job_method(job)
  if job.is_a?(Hash)
    job[:method] || job[:job_method]
  end || 'execute'
end
extract_scheduled(job) click to toggle source
# File lib/say_when/scheduler.rb, line 61
def extract_scheduled(job)
  job[:scheduled] if job.is_a?(Hash)
end
job_options(job) click to toggle source
# File lib/say_when/scheduler.rb, line 48
def job_options(job)
  opts = {
    scheduled: extract_scheduled(job),
    job_class: extract_job_class(job),
    job_method: extract_job_method(job),
    data: extract_data(job)
  }
  unless opts[:scheduled] || opts[:job_class]
    raise "No job class or scheduled option: #{job.inspect}\nopts: #{opts.inspect}"
  end
  opts
end
logger() click to toggle source
# File lib/say_when/scheduler.rb, line 93
def logger
  SayWhen.logger
end
schedule(job) click to toggle source

When passing in a job, can be a Hash, String, or Class Hash: { class: ‘<class name>’ } or { job_class: ‘<class name>’ } String: ‘<class name>’ Class: <job class>

# File lib/say_when/scheduler.rb, line 13
def schedule(job)
  storage.create(job)
end
schedule_cron(expression, job) click to toggle source
# File lib/say_when/scheduler.rb, line 17
def schedule_cron(expression, job)
  time_zone = if job.is_a?(Hash)
    job.delete(:time_zone)
  end || 'UTC'
  options = job_options(job)
  options[:trigger_strategy] = :cron
  options[:trigger_options]  = { expression: expression, time_zone: time_zone }
  schedule(options)
end
schedule_in(after, job = {}) click to toggle source
# File lib/say_when/scheduler.rb, line 41
def schedule_in(after, job = {})
  options = job_options(job)
  options[:trigger_strategy] = 'once'
  options[:trigger_options]  = { at: (Time.now + after)}
  schedule(options)
end
schedule_instance(next_at_method = 'next_fire_at', job = {}) click to toggle source
# File lib/say_when/scheduler.rb, line 27
def schedule_instance(next_at_method = 'next_fire_at', job = {})
  options = job_options(job)
  options[:trigger_strategy] = 'instance'
  options[:trigger_options]  = { next_at_method: next_at_method }
  schedule(options)
end
schedule_once(time, job = {}) click to toggle source
# File lib/say_when/scheduler.rb, line 34
def schedule_once(time, job = {})
  options = job_options(job)
  options[:trigger_strategy] = 'once'
  options[:trigger_options]  = { at: time}
  schedule(options)
end
storage() click to toggle source
# File lib/say_when/scheduler.rb, line 89
def storage
  @storage ||= load_strategy(:storage, SayWhen.options[:storage_strategy])
end
storage=(s) click to toggle source
# File lib/say_when/scheduler.rb, line 85
def storage=(s)
  @storage = s
end