Module: Delayer

Defined in:
lib/delayer.rb,
lib/delayer/error.rb,
lib/delayer/extend.rb,
lib/delayer/version.rb,
lib/delayer/procedure.rb,
lib/delayer/delayed_procedure.rb

Defined Under Namespace

Modules: Extend Classes: AlreadyCanceledError, AlreadyExecutedError, AlreadyRunningError, Bucket, DelayedProcedure, Error, InvalidPriorityError, NoLowerLevelError, Procedure, RecursiveError, RemainJobsError, TooLate

Constant Summary collapse

VERSION =
'1.2.0'

Class Attribute Summary collapse

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Class Attribute Details

.defaultObject

Returns the value of attribute default.



11
12
13
# File 'lib/delayer.rb', line 11

def default
  @default
end

Instance Attribute Details

#priorityObject (readonly)

Returns the value of attribute priority.



4
5
6
# File 'lib/delayer/extend.rb', line 4

def priority
  @priority
end

Class Method Details

.generate_class(options = {}) ⇒ Object

Generate new Delayer class.

Args

options

Hash

expire

processing expire (secs, 0=unlimited)

priority

priorities

default

default priotity

Return

A new class



22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/delayer.rb', line 22

def generate_class(options = {})
  Class.new do
    include ::Delayer
    @expire = options[:expire] || 0
    if options.has_key?(:priority)
      @priorities = options[:priority].to_a.freeze
      @default_priority = options[:default]
    else
      @priorities = [:normal]
      @default_priority = :normal
    end
  end
end

.included(klass) ⇒ Object



26
27
28
29
30
# File 'lib/delayer/extend.rb', line 26

def self.included(klass)
  klass.class_eval do
    extend Extend
  end
end

.method_missing(fn, *args, **kwrest, &proc) ⇒ Object



36
37
38
39
40
41
42
# File 'lib/delayer.rb', line 36

def method_missing(fn, *args, **kwrest, &proc)
  if kwrest.empty?
    (@default ||= generate_class).__send__(fn, *args, &proc)
  else
    (@default ||= generate_class).__send__(fn, *args, **kwrest, &proc)
  end
end

.StateError(state) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/delayer/error.rb', line 15

def self.StateError(state)
  case state
  when :run
    AlreadyRunningError
  when :done
    AlreadyExecutedError
  when :cancel
    AlreadyCanceledError
  else
    TooLate
  end
end

Instance Method Details

#cancelObject

Cancel this job

Exception

Delayer::AlreadyExecutedError

if already called run()

Return

self



47
48
49
50
# File 'lib/delayer/extend.rb', line 47

def cancel
  @procedure.cancel
  self
end

#initialize(priority = self.class.instance_eval { @default_priority }, *_args, delay: 0, &proc) ⇒ Object



32
33
34
35
36
37
38
39
40
# File 'lib/delayer/extend.rb', line 32

def initialize(priority = self.class.instance_eval { @default_priority }, *_args, delay: 0, &proc)
  self.class.validate_priority priority
  @priority = priority
  if delay == 0
    @procedure = Procedure.new(self, &proc)
  else
    @procedure = DelayedProcedure.new(self, delay: delay, &proc)
  end
end