action_webhook 1.0.0 → 1.1.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: 7077d23d4f22c68b2a33a9cc9ee6e6ad911d9c9ee23a2a861bb93837c69910e7
4
- data.tar.gz: 124749c8b109502308684d10e5a05791f99f35f26a0d01bdc1b3d11fd3ff43d3
3
+ metadata.gz: 2063e93683fe64ce519f241843f17e33da9f29d671b965af97c0f97540a98ecc
4
+ data.tar.gz: 1f591bf9cfb727d9ab6e750338b708e4e24df2e782ea3f1a5096277f4311474d
5
5
  SHA512:
6
- metadata.gz: c3be33f1a7a4528062882ea98e05caa9d61ef413bc72e4fba03788a7862e52b891f91897389e513f712fddaab7f7b5b68f4367b091f148df897a0548b25db556
7
- data.tar.gz: 41d39d74c5ce2854375b1397552b687d64d9f3ad991eade8b92627b2f5efed8744de3fa092fe72926a244e50244a4363174b1ba91ad537bc0f485c94552d8a5c
6
+ metadata.gz: 14ed8242d705d62f573fd884e83bc70479ed4397c4bb3fffd75fd178bdc929fe5d981c395abb99ab7d647c7f1aec3aeaf1685784b3d521e3e62ed2e073ee8c1c
7
+ data.tar.gz: 45c7362968926262d79f6dedb16f2391d30a2b64980e3a5d0116558360ee63fe416b54f33a17012b82e5b50d8a465a58d5f91e1b6fa1f05e185959a2ce547230
@@ -81,12 +81,21 @@ module ActionWebhook
81
81
  @attempts += 1
82
82
  response = process_webhook
83
83
 
84
- if response.all? { |r| r[:success] }
85
- invoke_callback(self.class.after_deliver_callback, response)
86
- elsif @attempts < self.class.max_retries
87
- retry_with_backoff
88
- else
89
- invoke_callback(self.class.after_retries_exhausted_callback, response)
84
+ # Separate successful and failed responses
85
+ successful_responses = response.select { |r| r[:success] }
86
+ failed_responses = response.reject { |r| r[:success] }
87
+
88
+ # Invoke success callback for successful deliveries
89
+ invoke_callback(self.class.after_deliver_callback, successful_responses) if successful_responses.any?
90
+
91
+ # Handle failed responses
92
+ if failed_responses.any? && @attempts < self.class.max_retries
93
+ # Extract failed webhook details for retry
94
+ failed_webhook_details = failed_responses.map { |r| @webhook_details.find { |detail| detail[:url] == r[:url] } }.compact
95
+ retry_with_backoff(failed_webhook_details)
96
+ elsif failed_responses.any?
97
+ # All retries exhausted for failed URLs
98
+ invoke_callback(self.class.after_retries_exhausted_callback, failed_responses)
90
99
  end
91
100
 
92
101
  response
@@ -318,13 +327,19 @@ module ActionWebhook
318
327
  end
319
328
  end
320
329
 
321
- def retry_with_backoff
330
+ def retry_with_backoff(failed_webhook_details = nil)
331
+ # Use failed webhook details if provided, otherwise retry all
332
+ retry_details = failed_webhook_details || @webhook_details
333
+
322
334
  delay = calculate_backoff_delay
323
- logger.info("Scheduling webhook retry #{@attempts + 1}/#{self.class.max_retries} in #{delay} seconds")
335
+ logger.info("Scheduling webhook retry #{@attempts + 1}/#{self.class.max_retries} for #{retry_details.size} URLs in #{delay} seconds")
324
336
 
325
337
  job_class = resolve_job_class
326
338
  serialized_webhook = serialize
327
339
 
340
+ # Update the webhook details to only include failed URLs
341
+ serialized_webhook["webhook_details"] = retry_details
342
+
328
343
  enqueue_retry_job(job_class, serialized_webhook, delay)
329
344
  end
330
345
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ActionWebhook
4
- VERSION = "1.0.0"
4
+ VERSION = "1.1.0"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: action_webhook
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vinay Uttam Vemparala