module SidekiqScheduler::Utils

Constants

RUFUS_METADATA_KEYS

Public Class Methods

enqueue_with_active_job(config) click to toggle source

Enqueues the job using the ActiveJob.

@param [Hash] config The job configuration

# File lib/sidekiq-scheduler/utils.rb, line 81
def self.enqueue_with_active_job(config)
  options = {
    queue: config['queue']
  }.keep_if { |_, v| !v.nil? }

  initialize_active_job(config['class'], config['args']).enqueue(options)
end
enqueue_with_sidekiq(config) click to toggle source

Enqueues the job using the Sidekiq client.

@param [Hash] config The job configuration

# File lib/sidekiq-scheduler/utils.rb, line 74
def self.enqueue_with_sidekiq(config)
  Sidekiq::Client.push(sanitize_job_config(config))
end
initialize_active_job(klass, args) click to toggle source

Initializes active_job using the passed parameters.

@param [Class] klass The class to initialize @param [Array/Hash] the parameters passed to the klass initializer

@return [Object] instance of the class klass

# File lib/sidekiq-scheduler/utils.rb, line 63
def self.initialize_active_job(klass, args)
  if args.is_a?(Array)
    klass.new(*args)
  else
    klass.new(args)
  end
end
new_rufus_scheduler(options = {}) click to toggle source

Creates a new instance of rufus scheduler.

@return [Rufus::Scheduler] the scheduler instance

# File lib/sidekiq-scheduler/utils.rb, line 101
def self.new_rufus_scheduler(options = {})
  Rufus::Scheduler.new(options).tap do |scheduler|
    scheduler.define_singleton_method(:on_post_trigger) do |job, triggered_time|
      SidekiqScheduler::Utils.update_job_last_time(job.tags[0], triggered_time)
      SidekiqScheduler::Utils.update_job_next_time(job.tags[0], job.next_time)
    end
  end
end
sanitize_job_config(config) click to toggle source

Removes the hash values associated to the rufus metadata keys.

@param [Hash] config The job configuration

@return [Hash] the sanitized job config

# File lib/sidekiq-scheduler/utils.rb, line 94
def self.sanitize_job_config(config)
  config.reject { |k, _| RUFUS_METADATA_KEYS.include?(k) }
end
stringify_keys(object) click to toggle source

Stringify keys belonging to a hash.

Also stringifies nested keys and keys of hashes inside arrays, and sets

@param [Object] object

@return [Object]

# File lib/sidekiq-scheduler/utils.rb, line 15
def self.stringify_keys(object)
  if object.is_a?(Hash)
    Hash[[*object.map { |k, v| [k.to_s, stringify_keys(v) ]} ]]

  elsif object.is_a?(Array) || object.is_a?(Set)
    object.map { |v| stringify_keys(v) }

  else
    object
  end
end
symbolize_keys(object) click to toggle source

Symbolize keys belonging to a hash.

Also symbolizes nested keys and keys of hashes inside arrays, and sets

@param [Object] object

@return [Object]

# File lib/sidekiq-scheduler/utils.rb, line 34
def self.symbolize_keys(object)
  if object.is_a?(Hash)
    Hash[[*object.map { |k, v| [k.to_sym, symbolize_keys(v) ]} ]]

  elsif object.is_a?(Array) || object.is_a?(Set)
    object.map { |v| symbolize_keys(v) }

  else
    object
  end
end
try_to_constantize(klass) click to toggle source

Constantize a given string.

@param [String] klass The string to constantize

@return [Class] the class corresponding to the klass param

# File lib/sidekiq-scheduler/utils.rb, line 51
def self.try_to_constantize(klass)
  klass.is_a?(String) ? klass.constantize : klass
rescue NameError
  klass
end
update_job_last_time(name, last_time) click to toggle source

Pushes job's last execution time

@param [String] name The job's name @param [Time] last_time The job's last execution time

# File lib/sidekiq-scheduler/utils.rb, line 126
def self.update_job_last_time(name, last_time)
  SidekiqScheduler::RedisManager.set_job_last_time(name, last_time) if last_time
end
update_job_next_time(name, next_time) click to toggle source

Pushes job's next time execution

@param [String] name The job's name @param [Time] next_time The job's next time execution

# File lib/sidekiq-scheduler/utils.rb, line 114
def self.update_job_next_time(name, next_time)
  if next_time
    SidekiqScheduler::RedisManager.set_job_next_time(name, next_time)
  else
    SidekiqScheduler::RedisManager.remove_job_next_time(name)
  end
end