cloudtasker 0.12.rc8 → 0.12.0

Sign up to get free protection for your applications and to get access to all the features.
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)