module Delayer

Constants

VERSION

Attributes

default[RW]
priority[R]

Public Class Methods

StateError(state) click to toggle source
# 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
generate_class(options = {}) click to toggle source

Generate new Delayer class.

Args

options

Hash

expire

processing expire (secs, 0=unlimited)

priority

priorities

default

default priotity

Return

A new class

# File lib/delayer.rb, line 21
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) click to toggle source
# File lib/delayer/extend.rb, line 28
def self.included(klass)
  klass.class_eval do
    extend Extend
  end
end
method_missing(fn, *args, **kwrest, &proc) click to toggle source
# File lib/delayer.rb, line 35
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
new(priority = self.class.instance_eval { @default_priority }, *_args, delay: 0, &proc) click to toggle source
# File lib/delayer/extend.rb, line 34
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

Public Instance Methods

cancel() click to toggle source

Cancel this job

Exception

Delayer::AlreadyExecutedError

if already called run()

Return

self

# File lib/delayer/extend.rb, line 49
def cancel
  @procedure.cancel
  self
end