Module: Delayed::Backend::Base
- Included in:
- Job
- Defined in:
- lib/delayed/backend/base.rb
Defined Under Namespace
Modules: ClassMethods
Constant Summary collapse
- ParseObjectFromYaml =
rubocop:disable Naming/ConstantName
%r{!ruby/\w+:([^\s]+)}
Instance Attribute Summary collapse
-
#error ⇒ Object
Returns the value of attribute error.
Class Method Summary collapse
Instance Method Summary collapse
- #destroy_failed_jobs? ⇒ Boolean
- #fail! ⇒ Object
- #failed? ⇒ Boolean (also: #failed)
- #hook(name, *args) ⇒ Object
- #invoke_job ⇒ Object
- #max_attempts ⇒ Object
- #max_run_time ⇒ Object
- #name ⇒ Object
- #payload_object ⇒ Object
- #payload_object=(object) ⇒ Object
- #priority ⇒ Object
- #priority=(value) ⇒ Object
- #reschedule_at ⇒ Object
-
#unlock ⇒ Object
Unlock this job (note: not saved to DB).
Instance Attribute Details
#error ⇒ Object
Returns the value of attribute error.
104 105 106 |
# File 'lib/delayed/backend/base.rb', line 104 def error @error end |
Class Method Details
.included(base) ⇒ Object
4 5 6 |
# File 'lib/delayed/backend/base.rb', line 4 def self.included(base) base.extend ClassMethods end |
Instance Method Details
#destroy_failed_jobs? ⇒ Boolean
203 204 205 206 207 |
# File 'lib/delayed/backend/base.rb', line 203 def destroy_failed_jobs? payload_object.respond_to?(:destroy_failed_jobs?) ? payload_object.destroy_failed_jobs? : Delayed::Worker.destroy_failed_jobs rescue DeserializationError Delayed::Worker.destroy_failed_jobs end |
#fail! ⇒ Object
209 210 211 212 |
# File 'lib/delayed/backend/base.rb', line 209 def fail! self.failed_at = self.class.db_time_now save! end |
#failed? ⇒ Boolean Also known as: failed
111 112 113 |
# File 'lib/delayed/backend/base.rb', line 111 def failed? !!failed_at end |
#hook(name, *args) ⇒ Object
164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 |
# File 'lib/delayed/backend/base.rb', line 164 def hook(name, *args) if payload_object.respond_to?(name) if name == :enqueue raise ':enqueue hook is no longer supported' end if payload_object.is_a?(Delayed::JobWrapper) warn '[DEPRECATION] Job hook methods (`before`, `after`, `success`, etc) are deprecated. Use ActiveJob callbacks instead.' end method = payload_object.method(name) method.arity.zero? ? method.call : method.call(self, *args) end rescue DeserializationError end |
#invoke_job ⇒ Object
145 146 147 148 149 150 151 152 153 154 155 156 |
# File 'lib/delayed/backend/base.rb', line 145 def invoke_job Delayed::Worker.lifecycle.run_callbacks(:invoke_job, self) do hook :before payload_object.perform hook :success rescue Exception => e # rubocop:disable Lint/RescueException hook :error, e raise e ensure hook :after end end |
#max_attempts ⇒ Object
188 189 190 |
# File 'lib/delayed/backend/base.rb', line 188 def max_attempts payload_object.max_attempts if payload_object.respond_to?(:max_attempts) end |
#max_run_time ⇒ Object
192 193 194 195 196 197 198 199 200 201 |
# File 'lib/delayed/backend/base.rb', line 192 def max_run_time return unless payload_object.respond_to?(:max_run_time) return unless (run_time = payload_object.max_run_time) if run_time > Delayed::Worker.max_run_time Delayed::Worker.max_run_time else run_time end end |
#name ⇒ Object
118 119 120 121 122 123 124 |
# File 'lib/delayed/backend/base.rb', line 118 def name if self.class.name_assignable? super || display_name else display_name # [feat:NameColumn] remove fallback once the "name" column is required. end end |
#payload_object ⇒ Object
139 140 141 142 143 |
# File 'lib/delayed/backend/base.rb', line 139 def payload_object @payload_object ||= YAML.load_dj(handler) rescue TypeError, LoadError, NameError, ArgumentError, SyntaxError, Psych::SyntaxError => e raise DeserializationError, "Job failed to load: #{e.}. Handler: #{handler.inspect}" end |
#payload_object=(object) ⇒ Object
134 135 136 137 |
# File 'lib/delayed/backend/base.rb', line 134 def payload_object=(object) @payload_object = object self.handler = YAML.dump_dj(object) end |
#priority ⇒ Object
126 127 128 |
# File 'lib/delayed/backend/base.rb', line 126 def priority Priority.new(super) end |
#priority=(value) ⇒ Object
130 131 132 |
# File 'lib/delayed/backend/base.rb', line 130 def priority=(value) super(Priority.new(value)) end |
#reschedule_at ⇒ Object
180 181 182 183 184 185 186 |
# File 'lib/delayed/backend/base.rb', line 180 def reschedule_at if payload_object.respond_to?(:reschedule_at) payload_object.reschedule_at(self.class.db_time_now, attempts) else self.class.db_time_now + (attempts**4) + 5 end end |
#unlock ⇒ Object
Unlock this job (note: not saved to DB)
159 160 161 162 |
# File 'lib/delayed/backend/base.rb', line 159 def unlock self.locked_at = nil self.locked_by = nil end |