sidekiq-amigo 1.6.2 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d5224634ebf95a2fcaefc764d07114cc77b2feed22a15e736eec934d8eba84b0
4
- data.tar.gz: 2e49a507f4e6d47e7ce25b676293738591807bc47dadf47e1fdbcb634d5a9df5
3
+ metadata.gz: a32299bc84d87b6c497414b4fcb6b89278e2993543eff1ba07bcf1a9fb75c59f
4
+ data.tar.gz: 27acf41f1e0235536da93d7dfd0b2a5ad1f65e4e993f428967e8072e7213f83f
5
5
  SHA512:
6
- metadata.gz: fa9617859526003317496d860e07119a11e8d0d58e66382360078a74463760b78da8516d215a0922fd40ee5bcc4d5e35421be2aa393df1f0a0709c941c367560
7
- data.tar.gz: 99876ed52f35b972bdc1a68a507c29b87f6a0aa5db6c2ae7738e203da8c66cb5dd01a4c2489fd4a923f117e84af308ea121f2be40ea95e5a3426485da114f216
6
+ metadata.gz: 47e75ba71d67411a80e7d5ae20f06c0b3bb4e0fb056356e63fb47ec3cd84cdb72f0deb6e2bd00f5cc0cd091267dc30725e4607ae018b7f29a31093c4c9e82ebd
7
+ data.tar.gz: 761f7febdba270fe365f39cb740f734615118bd8c160485ac9296119f00124458f1970e159dbdd0ed8a6fbecd4c66df8bfe07f86803a14e2982e738fbe69115c
data/lib/amigo/retry.rb CHANGED
@@ -17,18 +17,29 @@ require "sidekiq/api"
17
17
  # end
18
18
  module Amigo
19
19
  module Retry
20
- class Error < StandardError; end
20
+ class Error < StandardError
21
+ protected def exc_or_msg(timing_msg, obj)
22
+ return timing_msg if obj.nil?
23
+ return obj.to_s unless obj.is_a?(Exception)
24
+ return "#{timing_msg} (#{obj.class}: #{obj.message})"
25
+ end
26
+
27
+ protected def exc?(ex)
28
+ return ex.is_a?(Exception) ? ex : nil
29
+ end
30
+ end
21
31
 
22
32
  # Raise this class, or a subclass of it, to schedule a later retry,
23
33
  # rather than using an error to trigger Sidekiq's default retry behavior.
24
34
  # The benefit here is that it allows a consistent, customizable behavior,
25
35
  # so is better for 'expected' errors like rate limiting.
26
36
  class Retry < Error
27
- attr_accessor :interval_or_timestamp
37
+ attr_accessor :interval_or_timestamp, :wrapped
28
38
 
29
39
  def initialize(interval_or_timestamp, msg=nil)
30
40
  @interval_or_timestamp = interval_or_timestamp
31
- super(msg || "retry job in #{interval_or_timestamp}")
41
+ @wrapped = exc?(msg)
42
+ super(exc_or_msg("retry job in #{interval_or_timestamp.to_i}s", msg))
32
43
  end
33
44
  end
34
45
 
@@ -37,18 +48,25 @@ module Amigo
37
48
  # This allows jobs to hard-fail when there is something like a total outage,
38
49
  # rather than retrying.
39
50
  class Die < Error
51
+ attr_accessor :wrapped
52
+
53
+ def initialize(msg=nil)
54
+ @wrapped = exc?(msg)
55
+ super(exc_or_msg("kill job", msg))
56
+ end
40
57
  end
41
58
 
42
59
  # Raise this class, or a subclass of it, to:
43
60
  # - Use +Retry+ exception semantics while the current attempt is <= +attempts+, or
44
61
  # - Use +Die+ exception semantics if the current attempt is > +attempts+.
45
62
  class OrDie < Error
46
- attr_reader :attempts, :interval_or_timestamp
63
+ attr_reader :attempts, :interval_or_timestamp, :wrapped
47
64
 
48
65
  def initialize(attempts, interval_or_timestamp, msg=nil)
66
+ @wrapped = exc?(msg)
49
67
  @attempts = attempts
50
68
  @interval_or_timestamp = interval_or_timestamp
51
- super(msg || "retry every #{interval_or_timestamp} up to #{attempts} times")
69
+ super(exc_or_msg("retry every #{interval_or_timestamp.to_i}s up to #{attempts} times", msg))
52
70
  end
53
71
  end
54
72
 
@@ -56,6 +74,12 @@ module Amigo
56
74
  # from deep in a job and they want to jump out of the whole thing.
57
75
  # Usually you should log before raising this!
58
76
  class Quit < Error
77
+ attr_accessor :wrapped
78
+
79
+ def initialize(msg=nil)
80
+ @wrapped = exc?(msg)
81
+ super(exc_or_msg("quit job", msg))
82
+ end
59
83
  end
60
84
 
61
85
  class ServerMiddleware
@@ -101,7 +101,8 @@ module Amigo
101
101
  def match_expected_events
102
102
  @expected_events.each do |expected_event, expected_payload|
103
103
  match = @recorded_events.find do |recorded|
104
- recorded.name == expected_event && self.payloads_match?(expected_payload, recorded.payload)
104
+ self.event_names_match?(expected_event, recorded.name) &&
105
+ self.payloads_match?(expected_payload, recorded.payload)
105
106
  end
106
107
 
107
108
  if match
@@ -112,9 +113,15 @@ module Amigo
112
113
  end
113
114
  end
114
115
 
115
- def payloads_match?(expected, recorded)
116
- return expected.matches?(recorded) if expected.respond_to?(:matches?)
117
- return expected.nil? || expected.empty? || expected == recorded
116
+ def event_names_match?(expected, actual)
117
+ return expected.matches?(actual) if expected.respond_to?(:matches?)
118
+ return expected.match?(actual) if expected.respond_to?(:match?)
119
+ return expected == actual
120
+ end
121
+
122
+ def payloads_match?(expected, actual)
123
+ return expected.matches?(actual) if expected.respond_to?(:matches?)
124
+ return expected.nil? || expected.empty? || expected == actual
118
125
  end
119
126
 
120
127
  def add_matched(event, payload)
data/lib/amigo/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Amigo
4
- VERSION = "1.6.2"
4
+ VERSION = "1.8.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq-amigo
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.2
4
+ version: 1.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lithic Technology
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-03-16 00:00:00.000000000 Z
11
+ date: 2024-04-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sidekiq
@@ -200,7 +200,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
200
200
  requirements:
201
201
  - - ">="
202
202
  - !ruby/object:Gem::Version
203
- version: 2.7.0
203
+ version: 3.0.0
204
204
  required_rubygems_version: !ruby/object:Gem::Requirement
205
205
  requirements:
206
206
  - - ">="