48 lines
1.3 KiB
Ruby
48 lines
1.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module WorkerAttributes
|
|
extend ActiveSupport::Concern
|
|
|
|
class_methods do
|
|
def feature_category(value)
|
|
raise "Invalid category. Use `feature_category_not_owned!` to mark a worker as not owned" if value == :not_owned
|
|
|
|
worker_attributes[:feature_category] = value
|
|
end
|
|
|
|
# Special case: mark this work as not associated with a feature category
|
|
# this should be used for cross-cutting concerns, such as mailer workers.
|
|
def feature_category_not_owned!
|
|
worker_attributes[:feature_category] = :not_owned
|
|
end
|
|
|
|
def get_feature_category
|
|
get_worker_attribute(:feature_category)
|
|
end
|
|
|
|
def feature_category_not_owned?
|
|
get_worker_attribute(:feature_category) == :not_owned
|
|
end
|
|
|
|
protected
|
|
|
|
# Returns a worker attribute declared on this class or its parent class.
|
|
# This approach allows declared attributes to be inherited by
|
|
# child classes.
|
|
def get_worker_attribute(name)
|
|
worker_attributes[name] || superclass_worker_attributes(name)
|
|
end
|
|
|
|
private
|
|
|
|
def worker_attributes
|
|
@attributes ||= {}
|
|
end
|
|
|
|
def superclass_worker_attributes(name)
|
|
return unless superclass.include? WorkerAttributes
|
|
|
|
superclass.get_worker_attribute(name)
|
|
end
|
|
end
|
|
end
|