Sha256: 4735a835fdd985a25480d33bf747efe4710262d4afa8fb7c478d564f97d2ff4c

Contents?: true

Size: 803 Bytes

Versions: 52

Compression:

Stored size: 803 Bytes

Contents

class QueuedTask < ApplicationRecord
  serialize :data, Hash

  scope :locked, -> { where(locked: true) }
  scope :not_locked, -> { where('locked = 0 OR locked IS NULL') }

  validates :klass, presence: true

  def lock!
    update_attribute :locked, true
  end

  def unlock!
    update_attribute :locked, false
  end

  def run!
    klass.constantize.new(data).run!
  end

  def self.queue(klass, data)
    create!(klass: klass, data: data)
  end

  def self.queue_unless_already_queued(klass, data)
    if where(klass: klass.to_s).where('data = ?', data.to_yaml).empty?
      self.queue(klass.to_s, data)
    end
  end

  def dequeue!
    destroy
  end

  def process!
    lock!

    begin
      run!
      dequeue!
    rescue
      raise
    ensure
      unlock! unless destroyed?
    end
  end
end

Version data entries

52 entries across 52 versions & 1 rubygems

Version Path
udongo-7.9.0 app/models/queued_task.rb
udongo-7.8.1 app/models/queued_task.rb
udongo-7.8.0 app/models/queued_task.rb
udongo-7.7.2 app/models/queued_task.rb
udongo-7.7.1 app/models/queued_task.rb
udongo-7.7.0 app/models/queued_task.rb
udongo-7.6.2 app/models/queued_task.rb
udongo-7.6.1 app/models/queued_task.rb
udongo-7.6.0 app/models/queued_task.rb
udongo-7.5.1 app/models/queued_task.rb
udongo-7.5.0 app/models/queued_task.rb
udongo-7.4.2 app/models/queued_task.rb
udongo-7.4.1 app/models/queued_task.rb
udongo-7.4.0 app/models/queued_task.rb
udongo-7.3.5 app/models/queued_task.rb
udongo-7.3.4 app/models/queued_task.rb
udongo-7.3.3 app/models/queued_task.rb
udongo-7.3.2 app/models/queued_task.rb
udongo-7.3.1 app/models/queued_task.rb
udongo-7.2.1 app/models/queued_task.rb