diff options
Diffstat (limited to 'activejob/lib/active_job/queue_priority.rb')
-rw-r--r-- | activejob/lib/active_job/queue_priority.rb | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/activejob/lib/active_job/queue_priority.rb b/activejob/lib/active_job/queue_priority.rb new file mode 100644 index 0000000000..063bccdb01 --- /dev/null +++ b/activejob/lib/active_job/queue_priority.rb @@ -0,0 +1,43 @@ +# frozen_string_literal: true + +module ActiveJob + module QueuePriority + extend ActiveSupport::Concern + + # Includes the ability to override the default queue priority. + module ClassMethods + mattr_accessor :default_priority + + # Specifies the priority of the queue to create the job with. + # + # class PublishToFeedJob < ActiveJob::Base + # queue_with_priority 50 + # + # def perform(post) + # post.to_feed! + # end + # end + # + # Specify either an argument or a block. + def queue_with_priority(priority = nil, &block) + if block_given? + self.priority = block + else + self.priority = priority + end + end + end + + included do + class_attribute :priority, instance_accessor: false, default: default_priority + end + + # Returns the priority that the job will be created with + def priority + if @priority.is_a?(Proc) + @priority = instance_exec(&@priority) + end + @priority + end + end +end |