Module: RabbitJobs::Job

Extended by:
Helpers, Job, Logger
Included in:
Job
Defined in:
lib/rabbit_jobs/job.rb

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Helpers

constantize, symbolize_keys!

Methods included from Logger

log, log!

Class Method Details

.included(base) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/rabbit_jobs/job.rb', line 10

def self.included(base)
  include RabbitJobs::Logger
  base.extend (ClassMethods)

  def initialize(*perform_params)
    self.params = *perform_params
    self.opts = {}
  end

  attr_accessor :params, :opts, :child_pid

  def run_perform
    if @child_pid = fork
      srand # Reseeding
      log "Forked #{@child_pid} at #{Time.now} to process #{self.class}.perform(#{ params.map(&:inspect).join(', ') })"
      Process.wait(@child_pid)
      yield if block_given?
    else
      begin
        # log 'before perform'
        self.class.perform(*params)
        # log 'after perform'
      rescue
        puts $!.inspect
      end
      exit!
    end
  end

  def payload
    {'class' => self.class.to_s, 'opts' => (self.opts || {}), 'params' => params}.to_json
    # ([self.class.to_s] + params).to_json
  end

  def expires_in
    self.class.rj_expires_in
  end

  def expires?
    !!self.expires_in
  end

  def expired?
    if self.opts['expires_at']
      Time.now > Time.new(opts['expires_at'])
    elsif expires? && opts['created_at']
      Time.now > (Time.new(opts['created_at']) + expires_in)
    else
      false
    end
  end
end

.parse(payload) ⇒ Object



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/rabbit_jobs/job.rb', line 72

def self.parse(payload)
  begin
    encoded = JSON.parse(payload)
    job_klass = constantize(encoded['class'])
    job = job_klass.new(*encoded['params'])
    job.opts = encoded['opts']
    job
  rescue
    log "JOB INIT ERROR at #{Time.now.to_s}:"
    log $!.inspect
    log $!.backtrace
    log "message: #{payload.inspect}"
    # Mailer.send(klass_name, params, $!)
    # raise $!
  end
end

Instance Method Details

#expired?Boolean

Returns:

  • (Boolean)


52
53
54
55
56
57
58
59
60
# File 'lib/rabbit_jobs/job.rb', line 52

def expired?
  if self.opts['expires_at']
    Time.now > Time.new(opts['expires_at'])
  elsif expires? && opts['created_at']
    Time.now > (Time.new(opts['created_at']) + expires_in)
  else
    false
  end
end

#expires?Boolean

Returns:

  • (Boolean)


48
49
50
# File 'lib/rabbit_jobs/job.rb', line 48

def expires?
  !!self.expires_in
end

#expires_inObject



44
45
46
# File 'lib/rabbit_jobs/job.rb', line 44

def expires_in
  self.class.rj_expires_in
end

#initialize(*perform_params) ⇒ Object



14
15
16
17
# File 'lib/rabbit_jobs/job.rb', line 14

def initialize(*perform_params)
  self.params = *perform_params
  self.opts = {}
end

#payloadObject



39
40
41
42
# File 'lib/rabbit_jobs/job.rb', line 39

def payload
  {'class' => self.class.to_s, 'opts' => (self.opts || {}), 'params' => params}.to_json
  # ([self.class.to_s] + params).to_json
end

#run_performObject



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/rabbit_jobs/job.rb', line 21

def run_perform
  if @child_pid = fork
    srand # Reseeding
    log "Forked #{@child_pid} at #{Time.now} to process #{self.class}.perform(#{ params.map(&:inspect).join(', ') })"
    Process.wait(@child_pid)
    yield if block_given?
  else
    begin
      # log 'before perform'
      self.class.perform(*params)
      # log 'after perform'
    rescue
      puts $!.inspect
    end
    exit!
  end
end