cloudtasker 0.12.rc8 → 0.12.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: 6ac7405c882f6cc73a1d18d5f0ffd4aaf1032d2b22973b03ac0c05b579321d47
4
- data.tar.gz: ab4e12890ba7f1cf2f8cfde952a532f8563998352ba3c0ba348f8253c0f562b4
3
+ metadata.gz: c1ddbb417da7795762b05246c8f6c66331632e28fb1dc4aac95882eb1d592a91
4
+ data.tar.gz: 4e392625eab9dd00201fe9b4f0590137afb1887472a0a0c1e3df88d836743f51
5
5
  SHA512:
6
- metadata.gz: 99a740769048aa11f4a7b2a3710ed98973c44c7d9fa5e059b37027f408d10e5c731cd01e28bbf7e0e2cc4df49290384fdbc073d4a7869d511af661d8c5363e1b
7
- data.tar.gz: 4214ca35db358f7f027cad6fe0e36353034789c3969726484c2af50cc019a34ce03840718609aa6941ab5a8d1d6b312f174d884a9c88a2e112c4219f6e1a26d8
6
+ metadata.gz: 7b75bac785eb416cc982d95dc4144c3accc4b1e9dde1256ba163a7cfc3adef7fde5f1f91af06e81b143b7a97d83a3a2e7269b3f6ae98b3e603496f3e10149581
7
+ data.tar.gz: 1452b8478277be45e391856c05c333c597f8dc33bbbef5416c9b154f56db0f73f8400be1220ee4bb1b349709e46cc66909c72c853c768284c1946bdf34fa394a
data/CHANGELOG.md CHANGED
@@ -1,20 +1,26 @@
1
1
  # Changelog
2
2
 
3
- ## Latest RC [v0.12.rc8](https://github.com/keypup-io/cloudtasker/tree/v0.12.rc8) (2021-04-06)
3
+ ## [v0.12.0](https://github.com/keypup-io/cloudtasker/tree/v0.12.0) (2021-08-19)
4
4
 
5
- [Full Changelog](https://github.com/keypup-io/cloudtasker/compare/v0.11.0...v0.12.rc8)
5
+ [Full Changelog](https://github.com/keypup-io/cloudtasker/compare/v0.11.0...v0.12.0)
6
6
 
7
7
  **Improvements:**
8
8
  - ActiveJob: do not double log errors (ActiveJob has its own error logging)
9
+ - Batch callbacks: Retry jobs when completion callback fails
10
+ - Batch state: use native Redis hashes to store batch state instead of a serialized hash in a string key
11
+ - Batch progress: restrict calculation to direct children by default. Allow depth to be specified. Calculating progress using all tree jobs created significant delays on large batches.
12
+ - Batch redis usage: cleanup batches as they get completed or become dead to avoid excessive redis usage with large batches.
13
+ - Batch expansion: Inject `parent_batch` in jobs. Can be used to expand the parent batch the job is in.
9
14
  - Configuration: allow configuration of Cloud Tasks `dispatch deadline` at global and worker level
15
+ - Configuration: allow specifying global `on_error` and `on_dead` callbacks for error reporting
10
16
  - Cron jobs: Use Redis Sets instead of key pattern matching for resource listing
11
17
  - Error logging: Use worker logger so as to include context (job args etc.)
12
18
  - Error logging: Do not log exception and stack trace separately, combine them instead.
13
- - Batch callbacks: Retry jobs when completion callback fails
14
- - Batch state: use native Redis hashes to store batch state instead of a serialized hash in a string key
15
- - Batch progress: restrict calculation to direct children by default. Allow depth to be specified. Calculating progress using all tree jobs created significant delays on large batches.
16
19
  - Local server: Use Redis Sets instead of key pattern matching for resource listing
20
+ - Local server: Guard against nil tasks to prevent job daemon failures
21
+ - Performance: remove use of redis locks and rely on atomic transactions instead for Batch and Unique Job.
17
22
  - Worker: raise DeadWorkerError instead of MissingWorkerArgumentsError when arguments are missing. This is more consistent with what middlewares expect.
23
+ - Worker redis usage: delete redis payload storage once the job is successful or dead instead of expiring the key.
18
24
 
19
25
  **Fixed bugs:**
20
26
  - Retries: Enforce job retry limit on job processing. There was an edge case where jobs could be retried indefinitely on batch callback errors.
data/README.md CHANGED
@@ -35,9 +35,10 @@ A local processing server is also available for development. This local server p
35
35
  2. [Logging context](#logging-context)
36
36
  9. [Error Handling](#error-handling)
37
37
  1. [HTTP Error codes](#http-error-codes)
38
- 2. [Error callbacks](#error-callbacks)
39
- 3. [Max retries](#max-retries)
40
- 4. [Dispatch deadline](#dispatch-deadline)
38
+ 2. [Worker callbacks](#worker-callbacks)
39
+ 3. [Global callbacks](#global-callbacks)
40
+ 4. [Max retries](#max-retries)
41
+ 5. [Dispatch deadline](#dispatch-deadline)
41
42
  10. [Testing](#testing)
42
43
  1. [Test helper setup](#test-helper-setup)
43
44
  2. [In-memory queues](#in-memory-queues)
@@ -364,11 +365,41 @@ Cloudtasker.configure do |config|
364
365
  # This option can also be configured on a per worker basis via
365
366
  # the cloudtasker_options directive.
366
367
  #
367
- # Supported since: v0.12.rc8
368
+ # Supported since: v0.12.0
368
369
  #
369
370
  # Default: 600 seconds (10 minutes)
370
371
  #
371
372
  # config.dispatch_deadline = 600
373
+
374
+ #
375
+ # Specify a proc to be invoked every time a job fails due to a runtime
376
+ # error.
377
+ #
378
+ # This hook is not invoked for DeadWorkerError. See on_dead instead.
379
+ #
380
+ # This is useful when you need to apply general exception handling, such
381
+ # as reporting errors to a third-party service like Rollbar or Bugsnag.
382
+ #
383
+ # Note: the worker argument might be nil, such as when InvalidWorkerError is raised.
384
+ #
385
+ # Supported since: v0.12.0
386
+ #
387
+ # Default: no operation
388
+ #
389
+ # config.on_error = ->(error, worker) { Rollbar.error(error) }
390
+
391
+ #
392
+ # Specify a proc to be invoked every time a job dies due to too many
393
+ # retries.
394
+ #
395
+ # This is useful when you need to apply general exception handling, such
396
+ # logging specific messages/context when a job dies.
397
+ #
398
+ # Supported since: v0.12.0
399
+ #
400
+ # Default: no operation
401
+ #
402
+ # config.on_dead = ->(error, worker) { Rollbar.error(error) }
372
403
  end
373
404
  ```
374
405
 
@@ -649,7 +680,7 @@ Jobs failing will automatically return the following HTTP error code to Cloud Ta
649
680
  | 404 | The job has specified an incorrect worker class. |
650
681
  | 422 | An error happened during the execution of the worker (`perform` method) |
651
682
 
652
- ### Error callbacks
683
+ ### Worker callbacks
653
684
 
654
685
  Workers can implement the `on_error(error)` and `on_dead(error)` callbacks to do things when a job fails during its execution:
655
686
 
@@ -677,6 +708,25 @@ class HandleErrorWorker
677
708
  end
678
709
  ```
679
710
 
711
+ ### Global callbacks
712
+ **Supported since**: `0.12.0`
713
+
714
+ If you need to apply general exception handling logic to your workers you can specify `on_error` and `on_dead` hooks in the Cloudtasker configuration.
715
+
716
+ This is useful if you need to report errors to third-party services such as Rollbar or Bugsnag.
717
+
718
+ ```ruby
719
+ # config/initializers/cloudtasker.rb
720
+
721
+ Cloudtasker.configure do |config|
722
+ #
723
+ # Report runtime and dead worker errors to Rollbar
724
+ #
725
+ config.on_error = -> (error, _worker) { Rollbar.error(error) }
726
+ config.on_dead = -> (error, _worker) { Rollbar.error(error) }
727
+ end
728
+ ```
729
+
680
730
  ### Max retries
681
731
 
682
732
  By default jobs are retried 25 times - using an exponential backoff - before being declared dead. This number of retries can be customized locally on workers and/or globally via the Cloudtasker initializer.
@@ -740,7 +790,7 @@ end
740
790
  ```
741
791
 
742
792
  ### Dispatch deadline
743
- **Supported since**: `0.12.rc8`
793
+ **Supported since**: `0.12.0`
744
794
 
745
795
  By default Cloud Tasks will automatically timeout your jobs after 10 minutes, independently of your server HTTP timeout configuration.
746
796
 
data/docs/BATCH_JOBS.md CHANGED
@@ -18,7 +18,7 @@ Cloudtasker.configure do |config|
18
18
  end
19
19
  ```
20
20
 
21
- ## Example
21
+ ## Example: Creating a new batch
22
22
 
23
23
  The following example defines a worker that adds itself to the batch with different arguments then monitors the success of the batch.
24
24
 
@@ -47,6 +47,38 @@ class BatchWorker
47
47
  end
48
48
  ```
49
49
 
50
+ ## Example: Expanding the parent batch
51
+ **Note**: `parent_batch` is available since `0.12.0`
52
+
53
+ ```ruby
54
+ # All the jobs will be attached to the top parent batch.
55
+ class BatchWorker
56
+ include Cloudtasker::Worker
57
+
58
+ def perform(level, instance)
59
+ # Use existing parent_batch or create a new one
60
+ current_batch = parent_batch || batch
61
+
62
+ 3.times { |n| current_batch.add(self.class, level + 1, n) } if level < 2
63
+ end
64
+
65
+ # Invoked when any descendant (e.g. sub-sub job) is complete
66
+ def on_batch_node_complete(child)
67
+ logger.info("Direct or Indirect child complete: #{child.job_id}")
68
+ end
69
+
70
+ # Invoked when a direct descendant is complete
71
+ def on_child_complete(child)
72
+ logger.info("Direct child complete: #{child.job_id}")
73
+ end
74
+
75
+ # Invoked when all chidren have finished
76
+ def on_batch_complete
77
+ Rails.logger.info("Batch complete")
78
+ end
79
+ end
80
+ ```
81
+
50
82
  ## Available callbacks
51
83
 
52
84
  The following callbacks are available on your workers to track the progress of the batch:
@@ -91,7 +123,7 @@ def on_batch_node_complete(_child_job)
91
123
  end
92
124
  ```
93
125
 
94
- **Since:** `v0.12.rc5`
126
+ **Since:** `v0.12.0`
95
127
  By default the `progress` method only considers the direct child jobs to evaluate the batch progress. You can pass `depth: somenumber` to the `progress` method to calculate the actual batch progress in a more granular way. Be careful however that this method recursively calculates progress on the sub-batches and is therefore expensive.
96
128
 
97
129
  E.g.
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- cloudtasker (0.12.rc8)
4
+ cloudtasker (0.12.0)
5
5
  activesupport
6
6
  connection_pool
7
7
  fugit
@@ -13,94 +13,94 @@ PATH
13
13
  GEM
14
14
  remote: https://rubygems.org/
15
15
  specs:
16
- actioncable (6.1.3.1)
17
- actionpack (= 6.1.3.1)
18
- activesupport (= 6.1.3.1)
16
+ actioncable (6.1.4)
17
+ actionpack (= 6.1.4)
18
+ activesupport (= 6.1.4)
19
19
  nio4r (~> 2.0)
20
20
  websocket-driver (>= 0.6.1)
21
- actionmailbox (6.1.3.1)
22
- actionpack (= 6.1.3.1)
23
- activejob (= 6.1.3.1)
24
- activerecord (= 6.1.3.1)
25
- activestorage (= 6.1.3.1)
26
- activesupport (= 6.1.3.1)
21
+ actionmailbox (6.1.4)
22
+ actionpack (= 6.1.4)
23
+ activejob (= 6.1.4)
24
+ activerecord (= 6.1.4)
25
+ activestorage (= 6.1.4)
26
+ activesupport (= 6.1.4)
27
27
  mail (>= 2.7.1)
28
- actionmailer (6.1.3.1)
29
- actionpack (= 6.1.3.1)
30
- actionview (= 6.1.3.1)
31
- activejob (= 6.1.3.1)
32
- activesupport (= 6.1.3.1)
28
+ actionmailer (6.1.4)
29
+ actionpack (= 6.1.4)
30
+ actionview (= 6.1.4)
31
+ activejob (= 6.1.4)
32
+ activesupport (= 6.1.4)
33
33
  mail (~> 2.5, >= 2.5.4)
34
34
  rails-dom-testing (~> 2.0)
35
- actionpack (6.1.3.1)
36
- actionview (= 6.1.3.1)
37
- activesupport (= 6.1.3.1)
35
+ actionpack (6.1.4)
36
+ actionview (= 6.1.4)
37
+ activesupport (= 6.1.4)
38
38
  rack (~> 2.0, >= 2.0.9)
39
39
  rack-test (>= 0.6.3)
40
40
  rails-dom-testing (~> 2.0)
41
41
  rails-html-sanitizer (~> 1.0, >= 1.2.0)
42
- actiontext (6.1.3.1)
43
- actionpack (= 6.1.3.1)
44
- activerecord (= 6.1.3.1)
45
- activestorage (= 6.1.3.1)
46
- activesupport (= 6.1.3.1)
42
+ actiontext (6.1.4)
43
+ actionpack (= 6.1.4)
44
+ activerecord (= 6.1.4)
45
+ activestorage (= 6.1.4)
46
+ activesupport (= 6.1.4)
47
47
  nokogiri (>= 1.8.5)
48
- actionview (6.1.3.1)
49
- activesupport (= 6.1.3.1)
48
+ actionview (6.1.4)
49
+ activesupport (= 6.1.4)
50
50
  builder (~> 3.1)
51
51
  erubi (~> 1.4)
52
52
  rails-dom-testing (~> 2.0)
53
53
  rails-html-sanitizer (~> 1.1, >= 1.2.0)
54
- activejob (6.1.3.1)
55
- activesupport (= 6.1.3.1)
54
+ activejob (6.1.4)
55
+ activesupport (= 6.1.4)
56
56
  globalid (>= 0.3.6)
57
- activemodel (6.1.3.1)
58
- activesupport (= 6.1.3.1)
59
- activerecord (6.1.3.1)
60
- activemodel (= 6.1.3.1)
61
- activesupport (= 6.1.3.1)
62
- activestorage (6.1.3.1)
63
- actionpack (= 6.1.3.1)
64
- activejob (= 6.1.3.1)
65
- activerecord (= 6.1.3.1)
66
- activesupport (= 6.1.3.1)
57
+ activemodel (6.1.4)
58
+ activesupport (= 6.1.4)
59
+ activerecord (6.1.4)
60
+ activemodel (= 6.1.4)
61
+ activesupport (= 6.1.4)
62
+ activestorage (6.1.4)
63
+ actionpack (= 6.1.4)
64
+ activejob (= 6.1.4)
65
+ activerecord (= 6.1.4)
66
+ activesupport (= 6.1.4)
67
67
  marcel (~> 1.0.0)
68
- mini_mime (~> 1.0.2)
69
- activesupport (6.1.3.1)
68
+ mini_mime (>= 1.1.0)
69
+ activesupport (6.1.4)
70
70
  concurrent-ruby (~> 1.0, >= 1.0.2)
71
71
  i18n (>= 1.6, < 2)
72
72
  minitest (>= 5.1)
73
73
  tzinfo (~> 2.0)
74
74
  zeitwerk (~> 2.3)
75
- addressable (2.7.0)
75
+ addressable (2.8.0)
76
76
  public_suffix (>= 2.0.2, < 5.0)
77
- appraisal (2.4.0)
77
+ appraisal (2.4.1)
78
78
  bundler
79
79
  rake
80
80
  thor (>= 0.14.0)
81
81
  ast (2.4.2)
82
- async (1.28.9)
82
+ async (1.30.1)
83
83
  console (~> 1.10)
84
84
  nio4r (~> 2.3)
85
85
  timers (~> 4.1)
86
- async-http (0.54.1)
87
- async (~> 1.25)
88
- async-io (~> 1.28)
89
- async-pool (~> 0.2)
90
- protocol-http (~> 0.21.0)
91
- protocol-http1 (~> 0.13.0)
86
+ async-http (0.56.5)
87
+ async (>= 1.25)
88
+ async-io (>= 1.28)
89
+ async-pool (>= 0.2)
90
+ protocol-http (~> 0.22.0)
91
+ protocol-http1 (~> 0.14.0)
92
92
  protocol-http2 (~> 0.14.0)
93
- async-http-faraday (0.9.0)
93
+ async-http-faraday (0.11.0)
94
94
  async-http (~> 0.42)
95
95
  faraday
96
- async-io (1.30.2)
97
- async (~> 1.14)
98
- async-pool (0.3.5)
99
- async (~> 1.25)
96
+ async-io (1.32.2)
97
+ async
98
+ async-pool (0.3.8)
99
+ async (>= 1.25)
100
100
  builder (3.2.4)
101
- concurrent-ruby (1.1.8)
102
- connection_pool (2.2.3)
103
- console (1.10.2)
101
+ concurrent-ruby (1.1.9)
102
+ connection_pool (2.2.5)
103
+ console (1.13.1)
104
104
  fiber-local
105
105
  crack (0.4.5)
106
106
  rexml
@@ -109,18 +109,32 @@ GEM
109
109
  erubi (1.10.0)
110
110
  et-orbi (1.2.4)
111
111
  tzinfo
112
- faraday (1.3.0)
112
+ faraday (1.7.0)
113
+ faraday-em_http (~> 1.0)
114
+ faraday-em_synchrony (~> 1.0)
115
+ faraday-excon (~> 1.1)
116
+ faraday-httpclient (~> 1.0.1)
113
117
  faraday-net_http (~> 1.0)
118
+ faraday-net_http_persistent (~> 1.1)
119
+ faraday-patron (~> 1.0)
120
+ faraday-rack (~> 1.0)
114
121
  multipart-post (>= 1.2, < 3)
115
- ruby2_keywords
122
+ ruby2_keywords (>= 0.0.4)
123
+ faraday-em_http (1.0.0)
124
+ faraday-em_synchrony (1.0.0)
125
+ faraday-excon (1.1.0)
116
126
  faraday-http-cache (2.2.0)
117
127
  faraday (>= 0.8)
128
+ faraday-httpclient (1.0.1)
118
129
  faraday-net_http (1.0.1)
130
+ faraday-net_http_persistent (1.2.0)
131
+ faraday-patron (1.0.0)
132
+ faraday-rack (1.0.0)
119
133
  fiber-local (1.0.0)
120
- fugit (1.4.4)
134
+ fugit (1.5.1)
121
135
  et-orbi (~> 1.1, >= 1.1.8)
122
136
  raabro (~> 1.4)
123
- github_changelog_generator (1.16.1)
137
+ github_changelog_generator (1.16.4)
124
138
  activesupport
125
139
  async (>= 1.25.0)
126
140
  async-http-faraday
@@ -129,9 +143,8 @@ GEM
129
143
  octokit (~> 4.6)
130
144
  rainbow (>= 2.2.1)
131
145
  rake (>= 10.0)
132
- retriable (~> 3.0)
133
- globalid (0.4.2)
134
- activesupport (>= 4.2.0)
146
+ globalid (0.5.2)
147
+ activesupport (>= 5.0)
135
148
  google-cloud-tasks (1.0.0)
136
149
  google-gax (~> 1.3)
137
150
  googleapis-common-protos (>= 1.3.9, < 2.0)
@@ -142,22 +155,22 @@ GEM
142
155
  googleauth (~> 0.9)
143
156
  grpc (~> 1.24)
144
157
  rly (~> 0.2.3)
145
- google-protobuf (3.15.7)
158
+ google-protobuf (3.17.3)
146
159
  googleapis-common-protos (1.3.11)
147
160
  google-protobuf (~> 3.14)
148
161
  googleapis-common-protos-types (>= 1.0.6, < 2.0)
149
162
  grpc (~> 1.27)
150
- googleapis-common-protos-types (1.0.6)
163
+ googleapis-common-protos-types (1.1.0)
151
164
  google-protobuf (~> 3.14)
152
- googleauth (0.16.1)
165
+ googleauth (0.17.0)
153
166
  faraday (>= 0.17.3, < 2.0)
154
167
  jwt (>= 1.4, < 3.0)
155
168
  memoist (~> 0.16)
156
169
  multi_json (~> 1.11)
157
170
  os (>= 0.9, < 2.0)
158
171
  signet (~> 0.14)
159
- grpc (1.36.0)
160
- google-protobuf (~> 3.14)
172
+ grpc (1.38.0)
173
+ google-protobuf (~> 3.15)
161
174
  googleapis-common-protos-types (~> 1.0)
162
175
  grpc-google-iam-v1 (0.6.11)
163
176
  google-protobuf (~> 3.14)
@@ -167,8 +180,8 @@ GEM
167
180
  i18n (1.8.10)
168
181
  concurrent-ruby (~> 1.0)
169
182
  jaro_winkler (1.5.4)
170
- jwt (2.2.2)
171
- loofah (2.9.0)
183
+ jwt (2.2.3)
184
+ loofah (2.12.0)
172
185
  crass (~> 1.0.2)
173
186
  nokogiri (>= 1.5.9)
174
187
  mail (2.7.1)
@@ -176,26 +189,26 @@ GEM
176
189
  marcel (1.0.1)
177
190
  memoist (0.16.2)
178
191
  method_source (1.0.0)
179
- mini_mime (1.0.3)
180
- mini_portile2 (2.5.0)
192
+ mini_mime (1.1.0)
193
+ mini_portile2 (2.6.1)
181
194
  minitest (5.14.4)
182
195
  multi_json (1.15.0)
183
196
  multipart-post (2.1.1)
184
- nio4r (2.5.7)
185
- nokogiri (1.11.2)
186
- mini_portile2 (~> 2.5.0)
197
+ nio4r (2.5.8)
198
+ nokogiri (1.12.3)
199
+ mini_portile2 (~> 2.6.1)
187
200
  racc (~> 1.4)
188
- octokit (4.20.0)
201
+ octokit (4.21.0)
189
202
  faraday (>= 0.9)
190
203
  sawyer (~> 0.8.0, >= 0.5.3)
191
204
  os (1.1.1)
192
205
  parallel (1.20.1)
193
- parser (3.0.0.0)
206
+ parser (3.0.2.0)
194
207
  ast (~> 2.4.1)
195
208
  protocol-hpack (1.4.2)
196
- protocol-http (0.21.0)
197
- protocol-http1 (0.13.2)
198
- protocol-http (~> 0.19)
209
+ protocol-http (0.22.5)
210
+ protocol-http1 (0.14.1)
211
+ protocol-http (~> 0.22)
199
212
  protocol-http2 (0.14.2)
200
213
  protocol-hpack (~> 1.4)
201
214
  protocol-http (~> 0.18)
@@ -205,35 +218,35 @@ GEM
205
218
  rack (2.2.3)
206
219
  rack-test (1.1.0)
207
220
  rack (>= 1.0, < 3)
208
- rails (6.1.3.1)
209
- actioncable (= 6.1.3.1)
210
- actionmailbox (= 6.1.3.1)
211
- actionmailer (= 6.1.3.1)
212
- actionpack (= 6.1.3.1)
213
- actiontext (= 6.1.3.1)
214
- actionview (= 6.1.3.1)
215
- activejob (= 6.1.3.1)
216
- activemodel (= 6.1.3.1)
217
- activerecord (= 6.1.3.1)
218
- activestorage (= 6.1.3.1)
219
- activesupport (= 6.1.3.1)
221
+ rails (6.1.4)
222
+ actioncable (= 6.1.4)
223
+ actionmailbox (= 6.1.4)
224
+ actionmailer (= 6.1.4)
225
+ actionpack (= 6.1.4)
226
+ actiontext (= 6.1.4)
227
+ actionview (= 6.1.4)
228
+ activejob (= 6.1.4)
229
+ activemodel (= 6.1.4)
230
+ activerecord (= 6.1.4)
231
+ activestorage (= 6.1.4)
232
+ activesupport (= 6.1.4)
220
233
  bundler (>= 1.15.0)
221
- railties (= 6.1.3.1)
234
+ railties (= 6.1.4)
222
235
  sprockets-rails (>= 2.0.0)
223
236
  rails-dom-testing (2.0.3)
224
237
  activesupport (>= 4.2.0)
225
238
  nokogiri (>= 1.6)
226
- rails-html-sanitizer (1.3.0)
239
+ rails-html-sanitizer (1.4.1)
227
240
  loofah (~> 2.3)
228
- railties (6.1.3.1)
229
- actionpack (= 6.1.3.1)
230
- activesupport (= 6.1.3.1)
241
+ railties (6.1.4)
242
+ actionpack (= 6.1.4)
243
+ activesupport (= 6.1.4)
231
244
  method_source
232
- rake (>= 0.8.7)
245
+ rake (>= 0.13)
233
246
  thor (~> 1.0)
234
247
  rainbow (3.0.0)
235
- rake (13.0.3)
236
- redis (4.2.5)
248
+ rake (13.0.6)
249
+ redis (4.4.0)
237
250
  retriable (3.1.2)
238
251
  rexml (3.2.5)
239
252
  rly (0.2.3)
@@ -250,7 +263,7 @@ GEM
250
263
  rspec-mocks (3.10.2)
251
264
  diff-lcs (>= 1.2.0, < 2.0)
252
265
  rspec-support (~> 3.10.0)
253
- rspec-rails (5.0.1)
266
+ rspec-rails (5.0.2)
254
267
  actionpack (>= 5.2)
255
268
  activesupport (>= 5.2)
256
269
  railties (>= 5.2)
@@ -269,11 +282,11 @@ GEM
269
282
  rubocop-rspec (1.37.0)
270
283
  rubocop (>= 0.68.1)
271
284
  ruby-progressbar (1.11.0)
272
- ruby2_keywords (0.0.4)
285
+ ruby2_keywords (0.0.5)
273
286
  sawyer (0.8.2)
274
287
  addressable (>= 2.3.5)
275
288
  faraday (> 0.8, < 2.0)
276
- semantic_logger (4.7.4)
289
+ semantic_logger (4.8.2)
277
290
  concurrent-ruby (~> 1.0)
278
291
  signet (0.15.0)
279
292
  addressable (~> 2.3)
@@ -294,11 +307,11 @@ GEM
294
307
  tzinfo (2.0.4)
295
308
  concurrent-ruby (~> 1.0)
296
309
  unicode-display_width (1.6.1)
297
- webmock (3.12.2)
298
- addressable (>= 2.3.6)
310
+ webmock (3.14.0)
311
+ addressable (>= 2.8.0)
299
312
  crack (>= 0.3.2)
300
313
  hashdiff (>= 0.4.0, < 2.0.0)
301
- websocket-driver (0.7.3)
314
+ websocket-driver (0.7.5)
302
315
  websocket-extensions (>= 0.1.0)
303
316
  websocket-extensions (0.1.5)
304
317
  zeitwerk (2.4.2)