Sha256: a61cc4f80495b84b5688ba89503514461a90c669d7eb2457ee7eab5c61874de0

Contents?: true

Size: 1.11 KB

Versions: 4

Compression:

Stored size: 1.11 KB

Contents

require 'json'

module Quebert
  class Job
    attr_reader :args
    
    NotImplemented = Class.new(StandardError)
    
    Action  = Class.new(Exception)
    
    Bury    = Class.new(Action)
    Delete  = Class.new(Action)
    Release = Class.new(Action)
    
    def initialize(args=[])
      @args = args.dup.freeze
    end
    
    def perform(*args)
      raise NotImplemented
    end
    
    def self.enqueue(*args)
      backend.put(self, *args)
    end
    
    def to_json
      self.class.to_json(self)
    end
    
    def self.to_json(job, *args)
      args, job = job.args, job.class if job.respond_to?(:args)
      JSON.generate('job' => job.name, 'args' => args)
    end
    
    def self.from_json(json)
      if data = JSON.parse(json)
        Support.constantize(data['job']).new(data['args'])
      end
    end
    
    def self.backend=(backend)
      @backend = backend
    end
    def self.backend
      @backend || Quebert.configuration.backend
    end
    
  protected
    def delete!
      raise Delete
    end
    
    def release!
      raise Release
    end
    
    def bury!
      raise Bury
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
quebert-0.0.4 lib/quebert/job.rb
quebert-0.0.3 lib/quebert/job.rb
quebert-0.0.1 lib/quebert/job.rb
quebert-0.0.0 lib/quebert/job.rb