{"record":{"id":"a0c10797f15e2671","repo":"bensheldon/good_job","slug":"do-not-use-0-for-cleanup-intervals-use-false","errorCode":null,"errorMessage":"Do not use `0` for cleanup intervals. Use `false` to disable, or -1 to always run","messagePattern":"Do not use `0` for cleanup intervals\\. Use `false` to disable, or -1 to always run","errorType":"exception","errorClass":"ArgumentError","httpStatus":null,"severity":"error","filePath":"lib/good_job/cleanup_tracker.rb","lineNumber":12,"sourceCode":"# frozen_string_literal: true\n\nmodule GoodJob # :nodoc:\n  # Tracks thresholds for cleaning up old jobs.\n  class CleanupTracker\n    attr_accessor :cleanup_interval_seconds,\n                  :cleanup_interval_jobs,\n                  :job_count,\n                  :last_at\n\n    def initialize(cleanup_interval_seconds: false, cleanup_interval_jobs: false)\n      raise ArgumentError, \"Do not use `0` for cleanup intervals. Use `false` to disable, or -1 to always run\" if cleanup_interval_seconds == 0 || cleanup_interval_jobs == 0 # rubocop:disable Style/NumericPredicate\n\n      self.cleanup_interval_seconds = cleanup_interval_seconds\n      self.cleanup_interval_jobs = cleanup_interval_jobs\n\n      reset\n    end\n\n    # Increments job count.\n    # @return [Integer]\n    def increment\n      self.job_count += 1\n    end\n\n    # Whether a cleanup should be run.\n    # @return [Boolean]\n    def cleanup?\n      (cleanup_interval_jobs && job_count > cleanup_interval_jobs) ||\n        (cleanup_interval_seconds && last_at < Time.current - cleanup_interval_seconds) ||","sourceCodeStart":1,"sourceCodeEnd":30,"githubUrl":"https://github.com/bensheldon/good_job/blob/5fcde48f8765e69901ffa9c5a06122b19c73875f/lib/good_job/cleanup_tracker.rb#L1-L30","documentation":"Error \"Do not use `0` for cleanup intervals. Use `false` to disable, or -1 to always run\" thrown in bensheldon/good_job.","triggerScenarios":"Thrown at lib/good_job/cleanup_tracker.rb:12 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Do not set cleanup intervals to 0.","Use false to disable the cleanup or -1 to always run it."],"exampleFix":"config.good_job.cleanup_interval_seconds = false","handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"5fcde48f8765e69901ffa9c5a06122b19c73875f","analyzedAt":"2026-08-23T14:55:11.399Z","schemaVersion":2},"datasetVersion":"2026-08-23T16:17:53.355Z"}