class SidekiqRobustJob::Repository

Attributes

clock[R]
jobs_database[R]

Public Class Methods

new(jobs_database:, clock:) click to toggle source
# File lib/sidekiq_robust_job/repository.rb, line 6
def initialize(jobs_database:, clock:)
  @jobs_database = jobs_database
  @clock = clock
end

Public Instance Methods

build(attributes) click to toggle source
# File lib/sidekiq_robust_job/repository.rb, line 27
def build(attributes)
  jobs_database.new(attributes)
end
create(attributes) click to toggle source
# File lib/sidekiq_robust_job/repository.rb, line 23
def create(attributes)
  jobs_database.create!(attributes)
end
drop_unprocessed_jobs_by_digest(dropped_by_job_id:, digest:, exclude_id:) click to toggle source
# File lib/sidekiq_robust_job/repository.rb, line 45
def drop_unprocessed_jobs_by_digest(dropped_by_job_id:, digest:, exclude_id:)
  transaction do
    unprocessed_for_digest(digest, exclude_id: exclude_id).lock!.find_each do |job|
      job.drop(dropped_by_job_id: dropped_by_job_id)
      save(job)
    end
  end
end
find(id) click to toggle source
# File lib/sidekiq_robust_job/repository.rb, line 15
def find(id)
  jobs_database.find(id)
end
missed_jobs(missed_job_policy:) click to toggle source
# File lib/sidekiq_robust_job/repository.rb, line 31
def missed_jobs(missed_job_policy:)
  jobs_database
    .where(completed_at: nil, dropped_at: nil, failed_at: nil)
    .select { |potentially_missed_job| missed_job_policy.call(potentially_missed_job) }
end
save(record) click to toggle source
# File lib/sidekiq_robust_job/repository.rb, line 19
def save(record)
  record.save! if record.changed?
end
transaction() { || ... } click to toggle source
# File lib/sidekiq_robust_job/repository.rb, line 11
def transaction
  jobs_database.transaction { yield }
end
unprocessed_for_digest(digest, exclude_id:) click to toggle source
# File lib/sidekiq_robust_job/repository.rb, line 37
def unprocessed_for_digest(digest, exclude_id:)
  jobs_database
    .where(digest: digest)
    .where(completed_at: nil)
    .where(dropped_at: nil)
    .where.not(id: exclude_id)
end