module SidekiqSimpleDelay

Sidekiq delay functionality with some restrictions

Constants

VERSION

Public Class Methods

enable_delay!() click to toggle source

Adds simple_delay class methods to all classes

# File lib/sidekiq_simple_delay.rb, line 10
def enable_delay!
  enable_delay_instance!(Module)

  return unless defined?(::ActiveSupport)

  ActiveSupport.on_load(:active_record) do
    SidekiqSimpleDelay.enable_delay_active_record!
  end

  ActiveSupport.on_load(:action_mailer) do
    SidekiqSimpleDelay.enable_delay_application_mailer!
  end
end
enable_delay_active_record!(klass = nil) click to toggle source

Adds simple_delay functionality to ActiveRecord objects. Attempts to add to {ApplicationRecord} first, the falls back to adding to {ActiveRecord::Base}.

@param klass [Class] Class to add simple_delay functionality to. Must inherit from {ActiveRecord::Base}.

# File lib/sidekiq_simple_delay.rb, line 50
def enable_delay_active_record!(klass = nil)
  klass =
    if !klass.nil?
      klass
    elsif defined?(::ApplicationRecord)
      ::ApplicationRecord
    elsif defined?(::ActiveRecord::Base)
      ::ActiveRecord::Base
    end

  raise ArgumentError, 'klass must be supplied' if klass.nil?
  raise ArgumentError, 'klass must be a class' unless klass.class.is_a?(Class)
  raise ArgumentError, 'klass must inherit from ActiveRecord::Base' unless klass.ancestors.any? { |c| c.name == 'ActiveRecord::Base' }

  ar_file = 'sidekiq_simple_delay/extensions/active_record'
  require ar_file unless defined? SidekiqSimpleDelay::ActiveRecord

  return if klass.included_modules.include?(SidekiqSimpleDelay::ActiveRecord)

  klass.__send__(:include, SidekiqSimpleDelay::ActiveRecord)
end
enable_delay_application_mailer!(klass = nil) click to toggle source

Adds simple_delay functionality to ActionMailer objects. Attempts to add to {ApplicationMailer} first, the falls back to adding to {ActionMailer::Base}.

@param klass [Class] Class to add simple_delay functionality to. Must inherit from {ActionMailer::Base}.

# File lib/sidekiq_simple_delay.rb, line 76
def enable_delay_application_mailer!(klass = nil)
  klass =
    if !klass.nil?
      klass
    elsif defined?(::ApplicationMailer)
      ::ApplicationMailer
    elsif defined?(::ActionMailer::Base)
      ::ActionMailer::Base
    end

  raise ArgumentError, 'klass must be supplied' if klass.nil?
  raise ArgumentError, 'klass must be a class' unless klass.class.is_a?(Class)
  raise ArgumentError, 'klass must inherit from ActionMailer::Base' unless klass.ancestors.any? { |c| c.name == 'ActionMailer::Base' }

  ar_file = 'sidekiq_simple_delay/extensions/action_mailer'
  require ar_file unless defined? SidekiqSimpleDelay::ActionMailer

  return if klass.included_modules.include?(SidekiqSimpleDelay::ActionMailer)

  klass.__send__(:include, SidekiqSimpleDelay::ActionMailer)
end
enable_delay_class!(klass) click to toggle source

Adds simple_delay class methods to a class

@param klass [Class] Class to add simple_delay class methods to

# File lib/sidekiq_simple_delay.rb, line 27
def enable_delay_class!(klass)
  raise ArgumentError, 'klass must be a Class' unless klass.class.is_a?(Class)

  return if klass.singleton_class.included_modules.include?(SidekiqSimpleDelay::DelayMethods)

  klass.__send__(:extend, SidekiqSimpleDelay::DelayMethods)
end
enable_delay_instance!(klass) click to toggle source

Adds simple_delay instance methods to class

@param klass [Class] Class to add simple_delay instance methods to

# File lib/sidekiq_simple_delay.rb, line 38
def enable_delay_instance!(klass)
  raise ArgumentError, 'klass must be a Class' unless klass.class.is_a?(Class)

  return if klass.included_modules.include?(SidekiqSimpleDelay::DelayMethods)

  klass.__send__(:include, SidekiqSimpleDelay::DelayMethods)
end