Class: MultiBackgroundJob::UniqueJob

Inherits:
Object
  • Object
show all
Defined in:
lib/multi_background_job/unique_job.rb

Constant Summary collapse

VALID_OPTIONS =
{
  across: i[queue systemwide],
  timeout: 604800, # 1 week
  unlock_policy: i[success start],
}.freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(across: :queue, timeout: nil, unlock_policy: :success, lock: nil) ⇒ UniqueJob

Returns a new instance of UniqueJob.

Parameters:

  • [Symbol] (Hash)

    a customizable set of options

  • [Integer] (Hash)

    a customizable set of options



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/multi_background_job/unique_job.rb', line 23

def initialize(across: :queue, timeout: nil, unlock_policy: :success, lock: nil)
  unless VALID_OPTIONS[:across].include?(across.to_sym)
    raise Error, format('Invalid `across: %<given>p` option. Only %<expected>p are allowed.',
      given: across,
      expected: VALID_OPTIONS[:across])
  end
  unless VALID_OPTIONS[:unlock_policy].include?(unlock_policy.to_sym)
    raise Error, format('Invalid `unlock_policy: %<given>p` option. Only %<expected>p are allowed.',
      given: unlock_policy,
      expected: VALID_OPTIONS[:unlock_policy])
  end
  timeout = VALID_OPTIONS[:timeout] if timeout.to_i <= 0

  @across = across.to_sym
  @timeout = timeout.to_i
  @unlock_policy = unlock_policy.to_sym
  @lock = lock if lock.is_a?(MultiBackgroundJob::Lock)
end

Instance Attribute Details

#acrossObject (readonly)

Returns the value of attribute across.



13
14
15
# File 'lib/multi_background_job/unique_job.rb', line 13

def across
  @across
end

#lockObject

Returns the value of attribute lock.



13
14
15
# File 'lib/multi_background_job/unique_job.rb', line 13

def lock
  @lock
end

#timeoutObject (readonly)

Returns the value of attribute timeout.



13
14
15
# File 'lib/multi_background_job/unique_job.rb', line 13

def timeout
  @timeout
end

#unlock_policyObject (readonly)

Returns the value of attribute unlock_policy.



13
14
15
# File 'lib/multi_background_job/unique_job.rb', line 13

def unlock_policy
  @unlock_policy
end

Class Method Details

.coerce(value) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
# File 'lib/multi_background_job/unique_job.rb', line 42

def self.coerce(value)
  return unless value.is_a?(Hash)

  new(
    across: (value['across'] || value[:across] || :queue).to_sym,
    timeout: (value['timeout'] || value[:timeout] || nil),
    unlock_policy: (value['unlock_policy'] || value[:unlock_policy] || :success).to_sym,
  ).tap do |instance|
    instance.lock = value['lock'] || value[:lock]
  end
end

Instance Method Details

#eql?(other) ⇒ Boolean Also known as: ==

Returns:

  • (Boolean)


68
69
70
71
72
# File 'lib/multi_background_job/unique_job.rb', line 68

def eql?(other)
  return false unless other.is_a?(self.class)

  [across, timeout, unlock_policy] == [other.across, other.timeout, other.unlock_policy]
end

#to_hashObject



58
59
60
61
62
63
64
65
66
# File 'lib/multi_background_job/unique_job.rb', line 58

def to_hash
  {
    'across' => (across.to_s if across),
    'timeout' => timeout,
    'unlock_policy' => (unlock_policy.to_s if unlock_policy),
  }.tap do |hash|
    hash['lock'] = lock.to_hash if lock
  end
end

#ttlObject



54
55
56
# File 'lib/multi_background_job/unique_job.rb', line 54

def ttl
  Time.now.to_f + timeout
end