Module: Resque::Plugins::Aliasing

Defined in:
lib/resque/plugins/aliasing.rb,
lib/resque/plugins/aliasing/version.rb,
lib/resque/plugins/aliasing/aliased_job.rb

Defined Under Namespace

Modules: AliasedJob Classes: UnexpectedConstant

Constant Summary collapse

VERSION =
"0.4.0"

Instance Method Summary collapse

Instance Method Details

#alias_job(klass_name) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
# File 'lib/resque/plugins/aliasing.rb', line 6

def alias_job klass_name
  klass_name = klass_name.name if klass_name.kind_of? Class
  klass = ensure_klass klass_name.to_s

  unless aliased_jobs[klass.name]
    aliased_jobs[klass.name] = 1
    klass.instance_variable_set :@queue, "dummy_queue"
    klass.instance_variable_set :@resque_aliasing_destination, self
    klass.include AliasedJob
  end
end

#aliased_jobsObject



18
19
20
# File 'lib/resque/plugins/aliasing.rb', line 18

def aliased_jobs
  @aliased_jobs ||= {}
end

#ensure_const(parent, const_name, klass) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/resque/plugins/aliasing.rb', line 35

def ensure_const parent, const_name, klass
  full_const_name = const_name
  full_const_name = "#{parent.name}::#{full_const_name}" unless parent == Object

  if parent.const_defined? const_name
    const = parent.const_get const_name
    if full_const_name == const.name
      unless const.kind_of? klass
        raise UnexpectedConstant, "Expected #{full_const_name} to be a #{klass.name}"
      end
      return const
    end
  end

  parent.const_set const_name, klass.new
end

#ensure_klass(klass_name) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
# File 'lib/resque/plugins/aliasing.rb', line 23

def ensure_klass klass_name
  segments = klass_name.split '::'
  demodulized_klass_name = segments.pop

  parent_module = Object
  while segments.size > 0
    parent_module = ensure_const parent_module, segments.shift, Module
  end

  ensure_const parent_module, demodulized_klass_name, Class
end