Class: GoodJob::Setting

Inherits:
BaseRecord
  • Object
show all
Defined in:
app/models/good_job/setting.rb

Constant Summary collapse

CRON_KEYS_ENABLED =
"cron_keys_enabled"
CRON_KEYS_DISABLED =
"cron_keys_disabled"
PAUSES =
"pauses"

Class Method Summary collapse

Methods inherited from BaseRecord

bind_value, migrated?, migration_pending_warning!, with_logger_silenced

Class Method Details

.cron_key_disable(key) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'app/models/good_job/setting.rb', line 37

def self.cron_key_disable(key)
  enabled_setting = GoodJob::Setting.find_by(key: CRON_KEYS_ENABLED)
  key_string = key.to_s
  if enabled_setting&.value&.include?(key_string)
    enabled_setting.value.delete(key_string)
    enabled_setting.save!
  end

  disabled_setting = find_or_initialize_by(key: CRON_KEYS_DISABLED) do |record|
    record.value = []
  end
  disabled_setting.value << key unless disabled_setting.value.include?(key_string)
  disabled_setting.save!
end

.cron_key_enable(key) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'app/models/good_job/setting.rb', line 22

def self.cron_key_enable(key)
  key_string = key.to_s
  enabled_setting = find_or_initialize_by(key: CRON_KEYS_ENABLED) do |record|
    record.value = []
  end
  enabled_setting.value << key unless enabled_setting.value.include?(key_string)
  enabled_setting.save!

  disabled_setting = GoodJob::Setting.find_by(key: CRON_KEYS_DISABLED)
  return unless disabled_setting&.value&.include?(key_string)

  disabled_setting.value.delete(key_string)
  disabled_setting.save!
end

.cron_key_enabled?(key, default: true) ⇒ Boolean

Returns:

  • (Boolean)


12
13
14
15
16
17
18
19
20
# File 'app/models/good_job/setting.rb', line 12

def self.cron_key_enabled?(key, default: true)
  if default
    cron_disabled = find_by(key: CRON_KEYS_DISABLED)&.value || []
    cron_disabled.exclude?(key.to_s)
  else
    cron_enabled = find_by(key: CRON_KEYS_ENABLED)&.value || []
    cron_enabled.include?(key.to_s)
  end
end

.pause(queue: nil, job_class: nil, label: nil) ⇒ Object

Raises:

  • (ArgumentError)


52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'app/models/good_job/setting.rb', line 52

def self.pause(queue: nil, job_class: nil, label: nil)
  raise ArgumentError, "Must provide exactly one of queue, job_class, or label" unless [queue, job_class, label].one?(&:present?)

  setting = find_or_initialize_by(key: PAUSES) do |record|
    record.value = { "queues" => [], "job_classes" => [], "labels" => [] }
  end

  if queue
    setting.value["queues"] ||= []
    setting.value["queues"] << queue.to_s unless setting.value["queues"].include?(queue.to_s)
  elsif job_class
    setting.value["job_classes"] ||= []
    setting.value["job_classes"] << job_class.to_s unless setting.value["job_classes"].include?(job_class.to_s)
  else
    setting.value["labels"] ||= []
    setting.value["labels"] << label.to_s unless setting.value["labels"].include?(label.to_s)
  end
  setting.save!
end

.paused(type = nil) ⇒ Object



108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# File 'app/models/good_job/setting.rb', line 108

def self.paused(type = nil)
  setting = find_by(key: PAUSES)
  pauses = setting&.value&.deep_dup || { "queues" => [], "job_classes" => [], "labels" => [] }
  pauses = pauses.with_indifferent_access

  case type
  when :queues
    pauses["queues"]
  when :job_classes
    pauses["job_classes"]
  when :labels
    pauses["labels"]
  else
    {
      queues: pauses["queues"] || [],
      job_classes: pauses["job_classes"] || [],
      labels: pauses["labels"] || [],
    }
  end
end

.paused?(queue: nil, job_class: nil, label: nil) ⇒ Boolean

Returns:

  • (Boolean)

Raises:

  • (ArgumentError)


94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'app/models/good_job/setting.rb', line 94

def self.paused?(queue: nil, job_class: nil, label: nil)
  raise ArgumentError, "Must provide at most one of queue, job_class, or label" if [queue, job_class, label].many?(&:present?)

  if queue
    queue.in? paused(:queues)
  elsif job_class
    job_class.in? paused(:job_classes)
  elsif label
    label.in? paused(:labels)
  else
    paused.values.any?(&:any?)
  end
end

.unpause(queue: nil, job_class: nil, label: nil) ⇒ Object

Raises:

  • (ArgumentError)


72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'app/models/good_job/setting.rb', line 72

def self.unpause(queue: nil, job_class: nil, label: nil)
  raise ArgumentError, "Must provide exactly one of queue, job_class, or label" unless [queue, job_class, label].one?(&:present?)

  setting = find_by(key: PAUSES)
  return unless setting

  if queue
    return unless setting.value["queues"]&.include?(queue.to_s)

    setting.value["queues"].delete(queue.to_s)
  elsif job_class
    return unless setting.value["job_classes"]&.include?(job_class.to_s)

    setting.value["job_classes"].delete(job_class.to_s)
  else
    return unless setting.value["labels"]&.include?(label.to_s)

    setting.value["labels"].delete(label.to_s)
  end
  setting.save!
end