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 +4 -4
- data/CHANGELOG.md +11 -5
- data/README.md +56 -6
- data/docs/BATCH_JOBS.md +34 -2
- data/gemfiles/google_cloud_tasks_1.0.gemfile.lock +119 -106
- data/gemfiles/google_cloud_tasks_1.1.gemfile.lock +119 -106
- data/gemfiles/google_cloud_tasks_1.2.gemfile.lock +119 -106
- data/gemfiles/google_cloud_tasks_1.3.gemfile.lock +119 -106
- data/gemfiles/rails_5.2.gemfile.lock +63 -50
- data/gemfiles/rails_6.0.gemfile.lock +63 -50
- data/lib/cloudtasker/backend/redis_task.rb +1 -1
- data/lib/cloudtasker/batch/extension/worker.rb +1 -1
- data/lib/cloudtasker/batch/job.rb +14 -12
- data/lib/cloudtasker/config.rb +26 -2
- data/lib/cloudtasker/local_server.rb +1 -1
- data/lib/cloudtasker/unique_job/job.rb +5 -12
- data/lib/cloudtasker/version.rb +1 -1
- data/lib/cloudtasker/worker_handler.rb +5 -12
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c1ddbb417da7795762b05246c8f6c66331632e28fb1dc4aac95882eb1d592a91
|
4
|
+
data.tar.gz: 4e392625eab9dd00201fe9b4f0590137afb1887472a0a0c1e3df88d836743f51
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7b75bac785eb416cc982d95dc4144c3accc4b1e9dde1256ba163a7cfc3adef7fde5f1f91af06e81b143b7a97d83a3a2e7269b3f6ae98b3e603496f3e10149581
|
7
|
+
data.tar.gz: 1452b8478277be45e391856c05c333c597f8dc33bbbef5416c9b154f56db0f73f8400be1220ee4bb1b349709e46cc66909c72c853c768284c1946bdf34fa394a
|
data/CHANGELOG.md
CHANGED
@@ -1,20 +1,26 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
-
##
|
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.
|
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. [
|
39
|
-
3. [
|
40
|
-
4. [
|
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.
|
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
|
-
###
|
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.
|
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.
|
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.
|
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.
|
17
|
-
actionpack (= 6.1.
|
18
|
-
activesupport (= 6.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.
|
22
|
-
actionpack (= 6.1.
|
23
|
-
activejob (= 6.1.
|
24
|
-
activerecord (= 6.1.
|
25
|
-
activestorage (= 6.1.
|
26
|
-
activesupport (= 6.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.
|
29
|
-
actionpack (= 6.1.
|
30
|
-
actionview (= 6.1.
|
31
|
-
activejob (= 6.1.
|
32
|
-
activesupport (= 6.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.
|
36
|
-
actionview (= 6.1.
|
37
|
-
activesupport (= 6.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.
|
43
|
-
actionpack (= 6.1.
|
44
|
-
activerecord (= 6.1.
|
45
|
-
activestorage (= 6.1.
|
46
|
-
activesupport (= 6.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.
|
49
|
-
activesupport (= 6.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.
|
55
|
-
activesupport (= 6.1.
|
54
|
+
activejob (6.1.4)
|
55
|
+
activesupport (= 6.1.4)
|
56
56
|
globalid (>= 0.3.6)
|
57
|
-
activemodel (6.1.
|
58
|
-
activesupport (= 6.1.
|
59
|
-
activerecord (6.1.
|
60
|
-
activemodel (= 6.1.
|
61
|
-
activesupport (= 6.1.
|
62
|
-
activestorage (6.1.
|
63
|
-
actionpack (= 6.1.
|
64
|
-
activejob (= 6.1.
|
65
|
-
activerecord (= 6.1.
|
66
|
-
activesupport (= 6.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 (
|
69
|
-
activesupport (6.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.
|
75
|
+
addressable (2.8.0)
|
76
76
|
public_suffix (>= 2.0.2, < 5.0)
|
77
|
-
appraisal (2.4.
|
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.
|
82
|
+
async (1.30.1)
|
83
83
|
console (~> 1.10)
|
84
84
|
nio4r (~> 2.3)
|
85
85
|
timers (~> 4.1)
|
86
|
-
async-http (0.
|
87
|
-
async (
|
88
|
-
async-io (
|
89
|
-
async-pool (
|
90
|
-
protocol-http (~> 0.
|
91
|
-
protocol-http1 (~> 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.
|
93
|
+
async-http-faraday (0.11.0)
|
94
94
|
async-http (~> 0.42)
|
95
95
|
faraday
|
96
|
-
async-io (1.
|
97
|
-
async
|
98
|
-
async-pool (0.3.
|
99
|
-
async (
|
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.
|
102
|
-
connection_pool (2.2.
|
103
|
-
console (1.
|
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.
|
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.
|
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.
|
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
|
-
|
133
|
-
|
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.
|
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
|
163
|
+
googleapis-common-protos-types (1.1.0)
|
151
164
|
google-protobuf (~> 3.14)
|
152
|
-
googleauth (0.
|
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.
|
160
|
-
google-protobuf (~> 3.
|
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.
|
171
|
-
loofah (2.
|
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
|
180
|
-
mini_portile2 (2.
|
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.
|
185
|
-
nokogiri (1.
|
186
|
-
mini_portile2 (~> 2.
|
197
|
+
nio4r (2.5.8)
|
198
|
+
nokogiri (1.12.3)
|
199
|
+
mini_portile2 (~> 2.6.1)
|
187
200
|
racc (~> 1.4)
|
188
|
-
octokit (4.
|
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.
|
206
|
+
parser (3.0.2.0)
|
194
207
|
ast (~> 2.4.1)
|
195
208
|
protocol-hpack (1.4.2)
|
196
|
-
protocol-http (0.
|
197
|
-
protocol-http1 (0.
|
198
|
-
protocol-http (~> 0.
|
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.
|
209
|
-
actioncable (= 6.1.
|
210
|
-
actionmailbox (= 6.1.
|
211
|
-
actionmailer (= 6.1.
|
212
|
-
actionpack (= 6.1.
|
213
|
-
actiontext (= 6.1.
|
214
|
-
actionview (= 6.1.
|
215
|
-
activejob (= 6.1.
|
216
|
-
activemodel (= 6.1.
|
217
|
-
activerecord (= 6.1.
|
218
|
-
activestorage (= 6.1.
|
219
|
-
activesupport (= 6.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.
|
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.
|
239
|
+
rails-html-sanitizer (1.4.1)
|
227
240
|
loofah (~> 2.3)
|
228
|
-
railties (6.1.
|
229
|
-
actionpack (= 6.1.
|
230
|
-
activesupport (= 6.1.
|
241
|
+
railties (6.1.4)
|
242
|
+
actionpack (= 6.1.4)
|
243
|
+
activesupport (= 6.1.4)
|
231
244
|
method_source
|
232
|
-
rake (>= 0.
|
245
|
+
rake (>= 0.13)
|
233
246
|
thor (~> 1.0)
|
234
247
|
rainbow (3.0.0)
|
235
|
-
rake (13.0.
|
236
|
-
redis (4.
|
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.
|
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.
|
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.
|
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.
|
298
|
-
addressable (>= 2.
|
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.
|
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)
|