Module: SidekiqSimpleDelay

Defined in:
lib/sidekiq_simple_delay.rb,
lib/sidekiq_simple_delay/utils.rb,
lib/sidekiq_simple_delay/version.rb,
lib/sidekiq_simple_delay/delay_worker.rb,
lib/sidekiq_simple_delay/delay_methods.rb,
lib/sidekiq_simple_delay/generic_proxy.rb,
lib/sidekiq_simple_delay/delayed_mailer.rb,
lib/sidekiq_simple_delay/extensions/action_mailer.rb,
lib/sidekiq_simple_delay/extensions/active_record.rb

Overview

Sidekiq delay functionality with some restrictions

Defined Under Namespace

Modules: ActionMailer, ActiveRecord, DelayMethods Classes: Proxy, SimpleDelayedMailer, SimpleDelayedWorker, Utils

Constant Summary collapse

VERSION =
'0.2.1'

Class Method Summary collapse

Class Method Details

.enable_delay!Object

Adds simple_delay class methods to all classes



10
11
12
13
14
15
16
17
18
19
20
21
22
# 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) ⇒ Object

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

Parameters:

  • klass (Class) (defaults to: nil)

    Class to add simple_delay functionality to. Must inherit from ActiveRecord::Base.

Raises:

  • (ArgumentError)


50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# 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) ⇒ Object

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

Parameters:

  • klass (Class) (defaults to: nil)

    Class to add simple_delay functionality to. Must inherit from ActionMailer::Base.

Raises:

  • (ArgumentError)


76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# 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) ⇒ Object

Adds simple_delay class methods to a class

Parameters:

  • klass (Class)

    Class to add simple_delay class methods to

Raises:

  • (ArgumentError)


27
28
29
30
31
32
33
# 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) ⇒ Object

Adds simple_delay instance methods to class

Parameters:

  • klass (Class)

    Class to add simple_delay instance methods to

Raises:

  • (ArgumentError)


38
39
40
41
42
43
44
# 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